温馨提示×

如何监控nginx日志变化

小樊
58
2026-09-07 09:23:34
栏目: 编程语言

监控 Nginx 日志变化,常见做法有实时查看、自动告警、集中采集、可视化几种方式。下面按“由简到繁”给你一套可落地方案。


一、最基础:实时查看日志变化

1. 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

二、过滤 & 关注重点变化

2. 配合 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"

三、日志切割 & 防止漏监控

3. 使用 logrotate

Nginx 默认通过 logrotate 切割日志:

/etc/logrotate.d/nginx

注意:

  • 使用 copytruncate 或 USR1 信号,避免 tail -f 失效
  • 推荐 Nginx 官方方式:
kill -USR1 $(cat /var/run/nginx.pid)

四、主动监控(变化即告警)

4. 使用 inotify(文件级监控)

apt install inotify-tools
inotifywait -m /var/log/nginx/access.log

示例(有写入就报警):

inotifywait -m -e modify /var/log/nginx/error.log

5. 使用 fail2ban(安全监控)

适合监控:

  • 暴力破解
  • 频繁 404 / 403
apt install fail2ban

示例 jail:

[nginx-botsearch]
enabled = true
logpath = /var/log/nginx/access.log
maxretry = 10

五、集中化 & 可视化(生产推荐)

6. ELK / EFK

  • Filebeat 采集 Nginx 日志
  • Elasticsearch 存储
  • Kibana 可视化

优点:

  • 实时 dashboard
  • 异常自动告警
  • 多机统一监控

7. Prometheus + Grafana(指标型)

  • nginx-prometheus-exporter 导出指标
  • Grafana 展示 QPS / 5xx / 延迟

8. 轻量方案:Loki + Promtail

比 ELK 轻很多,适合中小项目。


六、监控“变化”的关键指标

建议关注:

  • ✅ 请求量突增
  • ✅ 5xx 比例
  • ✅ 响应时间变长
  • ✅ 异常 IP
  • ✅ 404 暴增(可能是扫描)

七、简单脚本示例(变化即通知)

#!/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 + grep
  • 单台服务器:inotify + fail2ban
  • 生产环境:Filebeat / Loki / Prometheus

如果你愿意,我可以:

  • 给你一套 Nginx 日志监控完整配置
  • 或针对 Docker / K8s Nginx 给方案

0 踩