在 Debian 上监控 Nginx 日志,常见做法分为实时查看、日志分析、异常告警、可视化几个层面。下面按实用程度给你一套方案。
Nginx 默认日志路径(Debian):
/var/log/nginx/access.log
/var/log/nginx/error.log
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
tail -f /var/log/nginx/error.log | grep error
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
tail -f /var/log/nginx/access.log | awk '$9 ~ /^5/'
sudo apt update
sudo apt install goaccess
goaccess /var/log/nginx/access.log -o /tmp/report.html --log-format=COMBINED --real-time-html
或直接终端模式:
goaccess /var/log/nginx/access.log --log-format=COMBINED
✅ 优点:
Debian 默认使用 logrotate:
/etc/logrotate.d/nginx
查看:
cat /etc/logrotate.d/nginx
确保包含:
daily
missingok
rotate 14
compress
delaycompress
notifempty
手动测试:
sudo logrotate -d /etc/logrotate.d/nginx
sudo apt install fail2ban
示例(限制 404 爆破):
[nginx-botsearch]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 10
组件:
nginx-exporternode-exporterPrometheusGrafana适合:
适合:
#!/bin/bash
COUNT=$(tail -n 100 /var/log/nginx/error.log | grep -c "crit")
if [ "$COUNT" -gt 5 ]; then
echo "Nginx error spike!" | mail -s "Nginx Alert" admin@domain.com
fi
加 cron:
*/5 * * * * /opt/nginx-monitor.sh
| 场景 | 推荐方案 |
|---|---|
| 个人 / 小站 | tail + GoAccess |
| 多站点 | GoAccess + fail2ban |
| 生产环境 | Prometheus + Grafana |
| 大规模 | ELK / Loki |
如果你愿意,我可以: