概述
日志是我们运维用来分析问题和处理问题的重要维护依据,但是Nginx的日志文件是非常庞大的,而且以文本格式显示导致Nginx的日志直接分析非常困难。有时候为了初步处理或紧急处理问题,我们也对直接打开Nginx的日志文件进行分析,这里我们就介绍如何对Nginx的默认日志格式进行分析和含义的解读。
Nginx配置文件中的配置项
在安装好Nginx后系统会默认给你开通access.log访问日志功能,这个配置文件在etc/nginx的文件夹下,打开配置文件后如下面是按行进行的默认格式配置。
log_format main ' $remote_addr - $remote_user [$time_local] "$request" '' $status $body_bytes_sent " $http_referer" '' "$http_user_agent" "$http_x_forwarded_for" ';
Nginx日志的配置项目:access_log /var/log/nginx/access.log main;
Nginx日志范例分析
日志写入文本文件是一行行的,这里我们把一行日志,按3个字段进行分行进行分析。
61.135.165.19 - 这里是访问者的IP地址
- 这里是客户名称,但一般获取不到。
[17/Nov/2018:03:39:32 +0800] 这里是访问的时间
"GET /ask/0901/images/a13.jpg HTTP/1.0" 这个是这次记录的访问对象
200 返回的状态码
19916 这条记录访问对象的大小
"http://xx.xx.xx/ask/0901/index.htm?jh=haerbinlvyou-YD&gjc=7riyoudongbei&e_keywordid=%7Bkeywordid%7D" 这个是从什么入口访问的也就是来源。
"Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C;Baiduspider-ads)AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30" 这个是客户端浏览器的一些参数
"10.205.160.32" 这里是代理的地址,一般是没有的。
Nginx日志中变量对应的字段
remote_addr 远程请求IP地址
remote_user 客户端用户的名称,没有时用-符合代替
time_local 本地时间戳
request 请求具体URI文件,例如网页中的JPG图片。
status http请求状态
body_bytes_sent 请求文件大小
http_refer 网页url跳转来源,源地址,可以伪造。例如一个HTML网页然后调用图片URI资源。
http_user_agent 用户终端浏览器UserAgent的相关信息
http_x_forwarded_for是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项
其他非默认的选项
host 请求host地址
request_time 整个请求的总时间
upstream_addr 后台提供服务的地址(即转发处理的目标地址)
upstream_reponse_time请求时,upstream的响应时间
upstream_status upstream状态
nginx日志切割
通过如下方式达到日志切割:
# vi logcron.sh log_dir="/data/logs/nginx" date_dir=`date +%Y%m%d` /bin/mkdir -p ${log_dir}/${date_dir} > /dev/null 2>&1 /bin/mv ${log_dir}/access.log ${log_dir}/${date_dir}/access.log
这里只需要定义一个cron,在每天晚上23:59:50执行这个脚本就可以了。
篇幅有限,关于nginx的access.log访问日志方面就介绍到这了,后面会分享更多关于devops和DBA方面内容,感兴趣的朋友可以关注下!