监控 Nginx 日志变化,常见做法有实时查看、自动告警、集中采集、可视化几种方式。下面按“由简到繁”给你一套可落地方案。
tail -f(最常用)tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
同时看两个:
tail -f /var/log/nginx/access.log /var/log/nginx/error.log
只看新增内容(不显示历史):
tail -n 0 -f /var/log/nginx/access.log
grep 监控异常tail -f /var/log/nginx/error.log | grep -i "error"
监控 5xx:
tail -f /var/log/nginx/access.log | awk '$9 ~ /^5/'
监控某个 IP:
tail -f /var/log/nginx/access.log | grep "1.2.3.4"
logrotateNginx 默认通过 logrotate 切割日志:
/etc/logrotate.d/nginx
注意:
copytruncate 或 USR1 信号,避免 tail -f 失效kill -USR1 $(cat /var/run/nginx.pid)
inotify(文件级监控)apt install inotify-tools
inotifywait -m /var/log/nginx/access.log
示例(有写入就报警):
inotifywait -m -e modify /var/log/nginx/error.log
fail2ban(安全监控)适合监控:
apt install fail2ban
示例 jail:
[nginx-botsearch]
enabled = true
logpath = /var/log/nginx/access.log
maxretry = 10
优点:
nginx-prometheus-exporter 导出指标比 ELK 轻很多,适合中小项目。
建议关注:
#!/bin/bash
LOG=/var/log/nginx/access.log
tail -n0 -F $LOG | while read line; do
echo "$line" | grep -q " 500 " && \
curl -s "https://hook.example.com/alert?msg=500 detected"
done
tail -f + grepinotify + fail2banFilebeat / Loki / Prometheus如果你愿意,我可以: