Nginx日志管理
Posted 徐中祥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx日志管理相关的知识,希望对你有一定的参考价值。
nginx日志管理
Nginx有非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令定义格式
1.log_format语法
Syntax: log_format name [escape=default|json|none] string ...;
Default: log_format combined "...";
Context: http
2.默认日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 默认日志格式
10.0.0.1 - - [27/Nov/2020:09:36:08 +0800] "GET /images/tank.ico HTTP/1.1" 200 25214 "http://www.tank.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/84.0.4147.89 Safari/537.36" "-"
# 修改默认时间的日志格式
[root@web02 ~]# vim /etc/nginx/nginx.conf
log_format main '$remote_addr - $remote_user [$time_iso8601] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 查看修改后的日志格式
10.0.0.1 - - [15/Apr/2021:18:47:03 +0800] "GET / HTTP/1.1" 200 1637 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" "-"
3.日志常用变量
$remote_addr # 记录客户端IP地址(只记录上一个客户端IP)
$remote_user # 记录客户端用户名
$time_local # 记录通用的本地时间
$time_iso8601 # 记录ISO8601标准格式下的本地时间
$request # 记录请求的方法以及请求的http协议
$status # 记录请求状态码(用于定位错误信息)
$body_bytes_sent # 发送给客户端的资源字节数,不包括响应头的大小
$bytes_sent # 发送给客户端的总字节数
$msec # 日志写入时间。单位为秒,精度是毫秒。
$http_referer # 记录从哪个页面链接访问过来的
$http_user_agent # 记录客户端浏览器相关信息
$http_x_forwarded_for #记录经过的所有服务器的客户端IP地址
$X-Real-IP # 记录起始的客户端IP地址和上一层客户端的IP地址
$request_length # 请求的长度(包括请求行, 请求头和请求正文)。
$request_time # 请求花费的时间,单位为秒,精度毫秒
# 注:如果Nginx位于负载均衡器,nginx反向代理之后, web服务器无法直接获取到客 户端真实的IP地址。
# $remote_addr获取的是反向代理的IP地址。 反向代理服务器在转发请求的http头信息中,
# 增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址。
4.nginx日志切割
[root@web01 ~]# vim /etc/logrotate.d/nginx
#指定要切割的日志
/var/log/nginx/*.log {
#每天切割日志
daily
#忽略日志丢失
missingok
#日志保留时间 52天
rotate 52
#日志压缩
compress
#延时压缩
delaycompress
#不切割空日志
notifempty
#切割好的日志权限
create 640 nginx adm
#开始执行脚本
sharedscripts
#标注脚本内容
postrotate
#判断nginx启动
if [ -f /var/run/nginx.pid ]; then
#重新生成一个access.log
kill -USR1 `cat /var/run/nginx.pid`
fi
#脚本执行完毕
endscript
}
以上是关于Nginx日志管理的主要内容,如果未能解决你的问题,请参考以下文章