阅读量:29
Ubuntu Nginx日志管理技巧
1. 基础日志配置:明确路径与级别
Nginx默认生成两种核心日志:access.log(记录HTTP请求,含状态码、响应时间、客户端IP等)和error.log(记录错误与警告,如502、权限问题)。需先确认其路径:
grep -r "access_log\|error_log" /etc/nginx/nginx.conf /etc/nginx/conf.d/*.conf
默认路径通常为/var/log/nginx/access.log和/var/log/nginx/error.log。
优化方向:
- 调整error日志级别:生产环境设为
warn(避免debug日志洪流),调试时临时设为debug(分析后恢复):error_log /var/log/nginx/error.log warn; # 生产环境推荐 - 禁用静态文件日志:减少不必要的噪声(如图片、CSS文件请求):
location /static { access_log off; alias /var/www/static; }
2. 自动日志轮转:Logrotate配置
使用logrotate工具实现日志自动切割、压缩与清理,避免日志文件过大占满磁盘。
步骤:
- 创建专用配置文件:在
/etc/logrotate.d/下新建nginx文件:sudo nano /etc/logrotate.d/nginx - 添加以下内容(关键参数说明见注释):
/var/log/nginx/*.log { daily # 每天轮转(可选:weekly/monthly) missingok # 日志文件不存在时不报错 rotate 30 # 保留30个历史文件(即30天) compress # 启用gzip压缩(节省空间) delaycompress # 延迟压缩(保留access.log.1为明文,便于应急排查) notifempty # 空文件不轮转 create 0640 www-data adm # 轮转后新日志权限(Ubuntu下Nginx用户多为www-data) sharedscripts # 所有日志切割完成后统一执行postrotate postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 $(cat /var/run/nginx.pid); # 向Nginx主进程发送信号,重新打开日志文件 fi endscript } - 测试配置:
sudo logrotate -d /etc/logrotate.d/nginx # 调试模式(dry-run,不实际执行) sudo logrotate -f /etc/logrotate.d/nginx # 强制立即执行 - 验证结果:
ls -lht /var/log/nginx/ | head -n 5 # 查看最新日志文件(应生成access.log.1等)
3. 手动日志管理:应急与补充
若需临时清理或切割日志(如日志即将占满磁盘),可使用以下命令:
- 手动切割:
sudo mv /var/log/nginx/access.log /var/log/nginx/access.$(date +%Y%m%d).log sudo mv /var/log/nginx/error.log /var/log/nginx/error.$(date +%Y%m%d).log sudo kill -USR1 $(cat /var/run/nginx.pid) # 重新打开日志 - 清理旧日志:
# 删除7天前的.log文件 sudo find /var/log/nginx/ -type f -name "*.log" -mtime +7 -exec rm -f {} \; # 删除7天前的.gz压缩文件 sudo find /var/log/nginx/ -type f -name "*.gz" -mtime +7 -exec rm -f {} \;
4. 高级技巧:条件日志与性能优化
- 条件日志记录:仅记录特定状态码(如2xx成功请求),减少日志体积:
map $status $loggable { ~^[2] 1; # 2xx状态码记录 default 0; # 其他状态码不记录 } access_log /var/log/nginx/access.log combined if=$loggable; - 日志缓冲:高并发场景下,启用缓冲减少IO阻塞(需Nginx支持):
access_log /var/log/nginx/access.log combined buffer=64k flush=5m;
5. 监控与告警:及时发现问题
- 实时监控日志:使用
tail或multitail工具跟踪日志:tail -f /var/log/nginx/access.log | grep ' 500 ' # 监控500错误 sudo apt install multitail && multitail -i /var/log/nginx/access.log -i /var/log/nginx/error.log # 同时监控多个日志 - 设置磁盘告警:通过
df命令监控日志分区使用率,超过阈值(如80%)触发告警:df -h /var/log | awk 'NR==2 {print $5}' | sed 's/%//' # 获取日志分区使用率 # 结合cron定时任务,每天发送告警(示例) echo "日志分区使用率:$(df -h /var/log | awk 'NR==2 {print $5}')"
通过以上技巧,可实现Nginx日志的高效管理,平衡日志保留需求与磁盘空间占用,提升运维效率。