文档仅收集nginx的日志来grafana展示,如果要收集ingress-nginx的日志来grafana展示见 https://www.putianhui.cn/posts/60dba0725b3e 这个文档中的安装ingress-nginx
配置
安装es681 我这里用docker安装的es681,这里先安装docker
1 $ curl https://www.putianhui.cn/package/script/install_docker.sh |bash
创建es数据和logs目录并启动
1 2 3 $ mkdir -p /data/es-data/{data,logs} $ cd /data/es-data/ && chmod 777 data && chmod 777 logs $ docker run -d --name es681 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -v /data/es-data/data:/usr/share/elasticsearch/data -v /data/es-data/logs:/usr/share/elasticsearch/logs elasticsearch:6.8.1
安装logstash 下载logstash的rpm包,注意版本和es版本一致
1 $ wget https://artifacts.elastic.co/downloads/logstash/logstash-6.8.1.rpm
通过rpm安装
1 2 3 4 5 $ yum install java-1.8.0-openjdk $ rpm -ivh logstash-6.8.1.rpm
配置nginx日志格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $ vim /etc/nginx/nginx.conf log_format main '{"@timestamp":"$time_iso8601",' '"@source":"$server_addr",' '"hostname":"$hostname",' '"ip":"$remote_addr",' '"client":"$remote_addr",' '"request_method":"$request_method",' '"scheme":"$scheme",' '"domain":"$server_name",' '"referer":"$http_referer",' '"request":"$request_uri",' '"args":"$args",' '"size":$body_bytes_sent,' '"status": $status,' '"responsetime":$request_time,' '"upstreamtime":"$upstream_response_time",' '"upstreamaddr":"$upstream_addr",' '"http_user_agent":"$http_user_agent",' '"https":"$https"' '}' ;
nginx虚拟站点修改日志存储目录并应用日志格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $ vim /etc/nginx/conf.d/test.conf server { server_name test.putianhui.cn; listen 80; access_log /var/log/nginx/test.out main; location / { root /data/test; index index.html; } } $ nginx -t $ nginx -s reload $ ls /var/log/nginx/ access.log error.log test.out
配置logstash收集nginx日志目录下的*.out
日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 $ cd /etc/logstash/ $ vim conf.d/nginx_access.conf input { file { path => [ "/var/log/nginx/*.out" ] ignore_older => 0 codec => json } } filter { mutate { convert => [ "status" ,"integer" ] convert => [ "size" ,"integer" ] convert => [ "upstreatime" ,"float" ] remove_field => "message" } geoip { source => "ip" } } output { elasticsearch { hosts => "192.168.66.73:9200" index => "logstash-nginx-access-%{+YYYY.MM.dd}" } }
启动logstash
1 $ nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx_access.conf > ./logstash.log 2>&1 &
当有用户访问我们的虚拟站点查看es是否有索引创建并有数据
安装grafana 安装grafana
1 2 3 4 5 6 $ cd /data $ wget https://dl.grafana.com/enterprise/release/grafana-enterprise-7.5.12.linux-amd64.tar.gz $ tar -zxvf grafana-enterprise-7.5.12.linux-amd64.tar.gz $ nohup /data/grafana-7.5.12/bin/grafana-server > /data/grafana-7.5.12/grafana.log 2>&1 &
安装grafana的插件
1 2 3 4 $ cd grafana-7.5.12 $ grafana-cli plugins install grafana-worldmap-panel $ bin/grafana-cli plugins install grafana-piechart-panel 1.3.8
由于默认安装的插件放到了/var/lib/grafana/plugins
目录下,我们grafana是二进制安装的,需要把对应的插件移动到我们二进制grafana的plugin目录下
1 2 $ cp -rf grafana-piechart-panel grafana-worldmap-panel /data/grafana-7.5.12/data/plugins/
重新打开grafana添加es数据源
导入grafana仪表盘ID2292
打开仪表盘即可出图,下面是默认2292仪表盘展示
默认的仪表盘在统计时部分会有问题,我自己稍微改了改,并增加了部分条件过滤掉本地健康探测的访问统计。
下面是我改后的仪表盘地址,下载后导入grafana即可,我的默认es数据源名称为nginx-es
,可能需要修改仪表盘读取的数据源或者修改数据源的名称为nginx-es
1 $ wget https://www.putianhui.cn/package/script/grafana/nginx-logs-grafana.json
我的修改的仪表盘展示
当然,也可以用下面我修改后的另外一个的图表,这个更好看一点
1 $ wget https://www.putianhui.cn/package/script/grafana/grafana-nginx-json-11090.json
图表展示