温馨提示×

如何监控nginx错误日志

小樊
32
2026-09-25 14:01:55
栏目: 编程语言

监控 Nginx 错误日志(通常位于 /var/log/nginx/error.log)可以从实时查看、自动告警、集中收集、可视化几个层面来做。下面按“由浅入深”的方式说明。


一、最基础:实时查看错误日志

1. 实时跟踪日志

tail -f /var/log/nginx/error.log

2. 只看错误级别及以上

Nginx 错误日志级别:

debug < info < notice < warn < error < crit < alert < emerg

修改 nginx 配置:

error_log /var/log/nginx/error.log error;

只查看 error 以上:

tail -f /var/log/nginx/error.log | grep -E "error|crit|alert|emerg"

二、自动监控 & 告警(推荐)

方案 1:使用 logrotate + 定时脚本(简单)

定期扫描日志关键词并告警:

grep -E "error|timeout|refused" /var/log/nginx/error.log \
  | mail -s "Nginx Error Alert" admin@example.com

可放入 crontab:

*/5 * * * * /scripts/check_nginx_error.sh

方案 2:使用 fail2ban(防攻击 + 日志监控)

适合监控:

  • 频繁 404
  • 扫描行为
  • 异常请求
apt install fail2ban

示例 filter:

[nginx-error]
enabled = true
filter = nginx-error
logpath = /var/log/nginx/error.log
maxretry = 5

方案 3:使用 Prometheus + Grafana(生产推荐)

架构

nginx → error.log → node_exporter / loki → prometheus → grafana

常用方案

  • Loki + Promtail(轻量日志监控)
  • Filebeat + Elasticsearch + Kibana
  • Fluentd + Prometheus

示例(Loki):

scrape_configs:
  - job_name: nginx
    static_configs:
      - targets: [localhost]
        labels:
          job: nginx
          __path__: /var/log/nginx/error.log

Grafana 中可写查询:

{job="nginx"} |= "error"

三、Nginx 自身增强监控

1. 开启更多错误上下文

error_log /var/log/nginx/error.log warn;

2. 分离不同错误

error_log /var/log/nginx/error.log;
error_log /var/log/nginx/critical.log crit;

四、常见需要重点监控的错误

错误 含义
connect() failed 后端服务异常
upstream timed out 后端响应慢
no live upstreams 负载均衡全部不可用
Permission denied 文件/目录权限问题
Too many open files 系统句柄不足

五、推荐组合(按场景)

  • 个人 / 小项目:tail -f + 定时脚本
  • 中型服务:fail2ban + 邮件告警
  • 生产环境:Loki / ELK + Grafana
  • K8s 环境:Fluent Bit + Loki

如果你愿意,可以告诉我:

  • 使用的是 物理机 / 云服务器 / Docker / K8s
  • 是否已有 Prometheus / ELK
  • 想做 实时告警还是历史分析

我可以直接给你一套可落地的配置方案。

0 踩