本文详细讲解Nginx日志格式的配置方法,包括常用变量、自定义格式实现,以及日志分析的实用技巧。通过合理的日志配置和高效的分析方法,可以帮助运维人员快速定位问题、优化服务器性能。
一、Nginx日志格式配置
Nginx默认提供两种日志格式:combined和main,但实际业务场景中往往需要自定义格式。以下是配置方法:
1. 默认日志格式解析
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
2. 自定义日志格式
在nginx.conf中添加自定义格式(示例包含响应时间和上游服务器信息):
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'rt=$request_time uct="$upstream_connect_time" '
'uht="$upstream_header_time" urt="$upstream_response_time"';
3. 应用日志格式
access_log /var/log/nginx/access.log custom;
二、常用日志变量说明
- $remote_addr:客户端IP地址
- $time_local:本地时间(带时区)
- $request:完整的请求行(方法+URI+协议)
- $status:HTTP响应状态码
- $request_time:请求处理时间(秒,含网络传输)
- $upstream_response_time:后端服务器响应时间
三、日志分析方法
1. 基础分析命令
使用Linux命令快速分析:
统计HTTP状态码分布
awk '{print $9}' access.log | sort | uniq -c | sort -rn
统计最频繁的请求URL
awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -20
统计慢请求(响应时间>5s)
awk '{if ($NF > 5) print $7,$NF}' access.log | sort -k2 -rn
2. 使用GoAccess工具
实时可视化分析工具安装与使用:
安装
apt-get install goaccess
生成报告
goaccess access.log -o report. --log-format=COMBINED
3. ELK Stack方案
搭建完整的日志分析系统:
- Filebeat收集日志
- Logstash解析和过滤
- Elasticsearch存储索引
- Kibana可视化展示
四、性能优化建议
- 对静态资源请求单独配置日志,减少日志量
- 设置日志轮转(logrotate)防止磁盘爆满
- 对高频访问IP进行限流配置
- 根据$upstream_response_time优化后端服务
评论