以下是CentOS下Nginx日志管理的最佳实践,涵盖配置、轮转、监控及分析等核心环节:
日志路径与格式
/var/log/nginx/access.log(访问日志)、/var/log/nginx/error.log(错误日志)。nginx.conf的http模块中修改log_format指令,例如:log_format custom '$remote_addr - $request - $status [$time_local]';
access_log /var/log/nginx/access.log custom;
日志轮转(推荐logrotate)
yum install logrotate。/etc/logrotate.d/nginx,示例内容:/var/log/nginx/*.log {
daily # 每日轮转
rotate 30 # 保留30天日志
compress # 压缩旧日志
delaycompress # 延迟压缩(保留最近1个未压缩文件)
missingok # 忽略缺失文件
create 0640 nginx nginx # 新日志权限与属主
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid) # 通知Nginx重新打开日志
endscript
}
logrotate -vf /etc/logrotate.d/nginx。实时监控
tail -f /var/log/nginx/access.log查看实时日志。GoAccess:实时分析并生成HTML报告,支持按日/小时统计。multitail:多日志文件高亮显示,过滤关键词(如error)。自动化清理
#!/bin/bash
LOG_DIR="/var/log/nginx"
find "$LOG_DIR" -type f -name "access_*.log.gz" -mtime +30 -exec rm -f {} \;
find "$LOG_DIR" -type f -name "error_*.log.gz" -mtime +30 -exec rm -f {} \;
crontab定时执行(每天凌晨1点):0 1 * * * /path/to/cleanup_script.sh >> /var/log/nginx/log_cleanup.log 2>&1
高级分析工具
grok规则匹配格式)。nginx用户,避免权限问题导致写入失败:chown -R nginx:nginx /var/log/nginx。access_log指令添加buffer=32k flush=5m),减少磁盘IO。log_format或使用中间件过滤。