日志分析 第二章 统一访问日志格式
网站的简版拓扑图
在开始搭建之前,先简单了解一下拓扑图
说明:网站入口是lvs+keepalived实现的高可用,后端两台nginx,将请求反向代理到后端web服务器的各个nginx之上,然后nginx交由php处理动态程序。
当然这只是一个简版图,实际环境中要比这复杂的多,分了各个频道,比如game频道,home频道,www频道以及gameapi频道等十几个频道,公司网站pv每天大概6000多万,加上如果加上节日活动等,pv最多达到过上亿。
我们filebeat收集日志只需要放在后端web服务器上即可,不必放在二级代理之上,放在二级代理上无法获得后端每个web服务器的主机名,后面grafana要用到主机名。我们只收集nginx访问日志,nginx错误日志和php错误日志。
工欲善其事必先利其器
开始搭建之前一定先规划好nginx访问日志格式以及日志存放目录。
我们规定日志存放目录为/data/logs目录
1 /data/logs 2 ├── nginx 3 │ ├── access_all.log 4 │ └── error.log 5 └── php 6 └── php_error.log
这是事先部署规划好的日志格式,其中10.80.2.139是这台主机的内网IP
1 log_format logstash '$server_name ' '10.80.2.139 ' '$http_x_real_ip ' '$remote_port ' '[$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '$request_time ' '$upstream_response_time';
在每台后端web服务器修改好日志格式之后,还没完,一定要看看有没有加上日志切割,日志切割是通过logrotate实现的。
1 nginx日志轮循 2 # cat /etc/logrotate.d/nginx 3 /data/logs/nginx/access_*.log /data/logs/nginx/error*.log { 4 rotate 7 5 daily 6 missingok 7 compress 8 delaycompress 9 notifempty 10 sharedscripts 11 postrotate 12 [ -f /usr/local/nginx/logs/nginx.pid ] && kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` 13 endscript 14 }
1 php日志轮循 2 # cat /etc/logrotate.d/php 3 /data/logs/php/php_error.log { 4 rotate 7 5 daily 6 missingok 7 compress 8 delaycompress 9 notifempty 10 sharedscripts 11 postrotate 12 [ -f /usr/local/nginx/logs/nginx.pid ] && kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` 13 endscript 14 }