Ubuntu Nginx如何监控告警

Ubuntu 上搭建 Nginx 监控与告警的实用方案一 监控目标与基础指标建议优先覆盖四类关键指标:延迟:关注 $request_time、$upstream_response_time,绘制 TP95/TP99 曲线,结合业务容忍度设置阈值。错误:监控 HTTP 5xx/4xx,尤其是 500/502/504;同时采集 error.log 中的关键错误。流量:关注 PV/UV、关键接口与后

Ubuntu 上搭建 Nginx 监控与告警的实用方案


一 监控目标与基础指标

  • 建议优先覆盖四类关键指标:
    1. 延迟:关注 $request_time$upstream_response_time,绘制 TP95/TP99 曲线,结合业务容忍度设置阈值。
    2. 错误:监控 HTTP 5xx/4xx,尤其是 500/502/504;同时采集 error.log 中的关键错误。
    3. 流量:关注 PV/UV、关键接口与后端命中率,识别突增/突降。
    4. 饱和度:关注 CPU连接数/队列磁盘 IO;最大可承受连接数约为 worker_processes × worker_connections
  • 建议启用 ngx_http_stub_status_module 获取连接与请求的基础计数,用于存活与饱和度观测。

二 方案一 Prometheus + Alertmanager + Nginx Exporter(推荐)

  • 启用 Nginx 状态页
    在 server 配置中增加:
    location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; }
    重启后在 http://服务器IP/nginx_status 可查看 Active/Reading/Writing/Waiting 与总请求数。
  • 部署 Nginx Exporter(以官方 nginx-prometheus-exporter 为例)
    启动示例:
    docker run -d –name nginx-exporter
    -p 9113:9113
    nginx/nginx-prometheus-exporter:latest
    -nginx.scrape-uri=http:///nginx_status
    访问 http://:9113/metrics 应看到 nginx 指标。
  • 配置 Prometheus 抓取
    在 prometheus.yml 增加:
    scrape_configs:

    • job_name: ‘nginx’
      static_configs:

      • targets: [‘:9113’]
  • 配置 Alertmanager 邮件告警
    alertmanager.yml 示例:
    global:
    smtp_smarthost: ‘smtp.example.com:587’
    smtp_from: ‘alertmanager@example.com’
    smtp_auth_username: ‘alertmanager’
    smtp_auth_password: ‘password’
    smtp_ssl: true
    route:
    receiver: ‘email’
    receivers:

    • name: ‘email’
      email_configs:

      • to: ‘admin@example.com’
  • Prometheus 告警规则示例(/etc/prometheus/rules/alert.rules)
    groups:

    • name: nginx
      rules:

      • alert: InstanceDown
        expr: up{job=“nginx”} == 0
        for: 1m
        labels: severity: critical
        annotations:
        summary: “Nginx exporter down ({{ $labels.instance }})”
        description: “Nginx exporter has been down for more than 1 minute.”
      • alert: NginxHigh5xx
        expr: sum(rate(nginx_http_requests_total{status=~“5…”}[5m])) by (instance) / sum(rate(nginx_http_requests_total[5m])) by (instance) > 0.05
        for: 2m
        labels: severity: critical
        annotations:
        summary: “High 5xx rate on {{ $labels.instance }}”
        description: “5xx rate is {{ $value | humanizePercentage }} over the last 5 minutes.”
      • alert: NginxHighLatency
        expr: histogram_quantile(0.95, sum(rate(nginx_http_request_duration_seconds_bucket[5m])) by (le,instance)) > 1
        for: 5m
        labels: severity: warning
        annotations:
        summary: “High 95th percentile latency on {{ $labels.instance }}”
        description: “95th percentile request latency is {{ $value }}s over the last 5 minutes.”.

三 方案二 ELK 或 Grafana Loki 日志告警

  • ELK(Filebeat → Logstash → Elasticsearch → Kibana)
    1. Filebeat 采集 /var/log/nginx/access.logerror.log
    2. Logstash 用 Grok 解析日志,结构化后写入 ES;
    3. Kibana 建立索引模式与可视化仪表盘;
    4. 使用 WatcherKibana Alerting 配置阈值/异常规则(如 5xx 比例、403/404 突增、特定路径扫描)。
  • Grafana Loki + Promtail + Grafana
    1. Promtail 采集 Nginx 日志并打标签;
    2. Loki 存储与查询;
    3. Grafana 建立日志面板,用 Grafana Alerting 基于 LogQL 触发告警(如 rate({job=“nginx”} |= " 5xx "))。

四 轻量快速方案与运维要点

  • 轻量快速方案
    • 实时查看:tail -f /var/log/nginx/access.log /var/log/nginx/error.log
    • 可视化分析:GoAccess
      goaccess /var/log/nginx/access.log -a -c -d –log-format=COMBINED -o report.html
      实时 HTML:goaccess … –real-time-html –port=7890
    • 安全与滥用防护:Fail2Ban 针对探测与暴力路径(如 /wp-admin.env)自动封禁。
  • 日志轮转与权限
    /var/log/nginx/*.log {
    daily; missingok; rotate 7; compress; delaycompress; notifempty;
    create 0640 www-data adm; sharedscripts;
    postrotate
    if [ -f /var/run/nginx.pid ]; then kill -USR1 cat /var/run/nginx.pid; fi
    endscript
    }
    确保 /var/log/nginx/ 权限与属主正确,避免采集/告警失败。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1486574.html

(0)
派派
上一篇 2026-01-07
下一篇 2026-01-07

发表回复

登录后才能评论