温馨提示×

怎样监控nginx异常日志

小樊
37
2026-09-14 18:24:38
栏目: 编程语言

监控 Nginx 异常日志,通常可以从日志收集、异常识别、实时告警、可视化四个层面来做。下面按常见场景给你一套可落地方案。


一、先明确:Nginx 有哪些“异常日志”

Nginx 常见日志:

  1. access.log(访问日志)
    • 异常通常体现在:
      • 状态码异常:4xx5xx 比例过高
      • 响应时间慢:request_time 偏大
      • 高频访问 / 爬虫 / 扫描行为
  2. error.log(错误日志)
    • 异常包括:
      • crit / alert / emerg
      • connect() failed
      • upstream timed out
      • too many open files
      • permission denied

二、基础方案(轻量、快速)

1. 实时查看 error.log

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

2. 统计异常状态码

awk '$9 ~ /5[0-9][0-9]/' /var/log/nginx/access.log

统计 5xx 数量:

grep -c " 500 \| 502 \| 503 \| 504 " /var/log/nginx/access.log

三、常用监控方案(推荐)

✅ 方案 1:Filebeat + ELK(最通用)

架构:

Nginx → Filebeat → Logstash → Elasticsearch → Kibana

监控内容:

  • 5xx 错误趋势
  • 上游超时
  • 某 IP 异常访问
  • 接口级慢请求

Kibana 可做:

  • 状态码饼图
  • 错误日志时间线
  • 告警规则(Watcher)

✅ 方案 2:Prometheus + Grafana(偏指标)

  1. 使用 nginx-prometheus-exporter

  2. 暴露指标:

    • nginx_http_requests_total
    • nginx_http_requests_total{status="500"}
  3. Grafana 面板:

    • QPS
    • 4xx / 5xx 比例
    • upstream 响应时间

✅ 适合业务指标型监控


✅ 方案 3:Loki + Promtail(轻量日志监控)

Nginx → Promtail → Loki → Grafana

优点:

  • 比 ELK 轻
  • 查询语法简单
  • 和 Prometheus 天然搭配

示例查询:

{job="nginx"} |= "error"
{job="nginx"} |~ "502|504|timeout"

四、异常告警(关键)

1. 基于日志内容告警

  • 5xx 比例 > 1%
  • error.log 出现 crit
  • upstream timeout 连续出现

2. 常见告警工具

  • Alertmanager
  • Elasticsearch Watcher
  • Grafana Alert
  • 企业微信 / 钉钉 / 飞书 webhook

五、Nginx 配置优化(辅助监控)

增加关键字段

log_format main '$remote_addr - $request_time - $status';
access_log /var/log/nginx/access.log main;

错误级别控制

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

六、简单实践建议(按规模)

场景 推荐方案
单台服务器 tail + 脚本 + 钉钉
中小团队 Loki + Grafana
生产集群 ELK / Prometheus
云原生 Nginx Ingress + Prometheus

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

  • 用的是 物理机 / Docker / K8s
  • 想监控 错误日志还是访问异常
  • 是否需要 实时告警

我可以直接给你一套可复制的配置示例

0