详解Nginx默认access.log访问日志格式、案例和日志切割

概述

日志是我们运维用来分析问题和处理问题的重要维护依据,但是Nginx的日志文件是非常庞大的,而且以文本格式显示导致Nginx的日志直接分析非常困难。有时候为了初步处理或紧急处理问题,我们也对直接打开Nginx的日志文件进行分析,这里我们就介绍如何对Nginx的默认日志格式进行分析和含义的解读。

详解Nginx默认access.log访问日志格式、案例和日志切割


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默认access.log访问日志格式、案例和日志切割


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

详解Nginx默认access.log访问日志格式、案例和日志切割

这里只需要定义一个cron,在每天晚上23:59:50执行这个脚本就可以了。


篇幅有限,关于nginx的access.log访问日志方面就介绍到这了,后面会分享更多关于devops和DBA方面内容,感兴趣的朋友可以关注下!

详解Nginx默认access.log访问日志格式、案例和日志切割

相关推荐