下面按「nginx 日志怎么留、留什么、怎么分析、怎么存、怎么清理」几方面系统讲一下 nginx 日志分析与留存。
nginx 常见日志有两类:
access_log /var/log/nginx/access.log main;
记录每次请求:IP、时间、URL、状态码、UA、耗时等。
error_log /var/log/nginx/error.log warn;
记录 nginx 自身错误、 upstream 错误、配置问题。
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time';
重点字段:
$remote_addr:客户端 IP$request_time:总耗时$upstream_response_time:后端耗时$status:状态码# Top IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
# 状态码统计
awk '{print $9}' access.log | sort | uniq -c
# 慢请求
awk '$NF>1.0 {print}' access.log
常用方案:
使用 logrotate:
/var/log/nginx/*.log {
daily
rotate 30
compress
missingok
notifempty
sharedscripts
postrotate
kill -USR1 `cat /var/run/nginx.pid`
endscript
}
✅ 保留 30 天,压缩,自动切割
location /api/login {
access_log off;
}
❌ 日志不切割 → 磁盘爆
❌ error_log 级别太低(debug)
❌ 长期本地不清理
❌ 只存不分析(日志价值 = 分析)
nginx 日志留存 = 合理格式 + 切割压缩 + 集中存储 + 定期分析 + 合规脱敏
如果你愿意,我可以: