需使用v0.12.0+版本Nginx Exporter并配置支持worker指标的endpoint(如/status/format/json),确保暴露nginx_worker_connections_active等带pid标签的指标,再通过Prometheus抓取、PromQL告警规则及Alertmanager分级通知实现worker级性能监控与自动报警。

要利用 Prometheus Nginx Exporter 监控 Nginx worker 性能并实现自动报警,核心是采集 worker 级指标(如活跃连接数、请求处理速率、worker 进程状态等),通过 Prometheus 抓取并存储,再用 PromQL 编写告警规则,由 Alertmanager 触发通知。
确保 Nginx Exporter 正确暴露 worker 级指标
Nginx Exporter 默认不开启 worker 级指标(如 nginx_worker_connections_active、nginx_worker_requests_total),需确认以下几点:
- 使用支持 worker 指标的 Exporter 版本(推荐 v0.12.0+,较老版本如 v0.10.x 可能仅支持 stub_status,不包含 worker 维度)
- Nginx 配置中启用
status模块(或第三方模块如nginx-module-vts),并确保 Exporter 能访问到含 worker 信息的 endpoint(例如/status/format/json或/basic_status) - 启动 Exporter 时指定正确的 Nginx status URL 和参数,例如:
./nginx-exporter --nginx.scrape-uri=http://localhost:8080/status/format/json - 验证指标是否可用:访问
http://exporter-host:9113/metrics,搜索nginx_worker_,应能看到类似nginx_worker_connections_active{pool="default",pid="23456"}的带 label 指标
在 Prometheus 中配置抓取任务并验证数据
修改 prometheus.yml,添加针对 Nginx Exporter 的 job:
- 确保
static_configs指向 Exporter 地址(如targets: ['nginx-exporter:9113']) - 可加 relabel 规则区分不同 Nginx 实例,例如基于主机名或标签打标:
relabel_configs:<br> - source_labels: [__address__]<br> target_label: instance<br> replacement: nginx-prod-worker
- 重启 Prometheus 后,进入 Web UI → Status → Targets,确认该 job 处于 UP 状态
- 在 Graph 页面输入
nginx_worker_connections_active,查看时间序列是否返回多条(每个 worker 进程一条),且数值随负载变化
编写 worker 性能告警规则(PromQL + alert.rules)
聚焦关键 worker 异常场景,避免过度告警。常用规则示例(写入 alert.rules.yml 并在 prometheus.yml 中加载):
-
单个 worker 连接数长期过高:
avg by (instance, pid) (nginx_worker_connections_active) > 1024<br>for: 5m<br>labels: {severity: "warning"}<br>annotations: {summary: "Nginx worker {{ $labels.pid }} on {{ $labels.instance }} has too many active connections"} -
worker 请求处理速率骤降(可能卡死或崩溃):
rate(nginx_worker_requests_total[5m]) == 0<br>for: 2m<br>labels: {severity: "critical"}<br>annotations: {summary: "Nginx worker {{ $labels.pid }} stopped processing requests"} -
worker 进程频繁重启(PID 波动大):
利用count by (instance) (nginx_worker_connections_active)的变化趋势,或结合process_start_time_seconds(若 Exporter 暴露)判断进程存活时间过短
配置 Alertmanager 实现分级通知
Alertmanager 不仅转发告警,还需支持抑制、静默和路由。关键配置点:
- 在
alertmanager.yml中定义接收器(如邮件、企业微信、PagerDuty),例如邮件 receiver:receivers:<br> - name: 'email-notifications'<br> email_configs:<br> - to: 'ops@example.com'
- 设置路由规则,将 worker 类告警导向特定 receiver,并按 severity 分级:
route:<br> receiver: 'email-notifications'<br> routes:<br> - match: {severity: "critical"}<br> receiver: 'pager-duty' - 添加抑制规则(inhibit_rules),例如当整个 Nginx 实例宕机(
up{job="nginx"} == 0)时,抑制所有 worker 子告警,避免噪音 - 启动 Alertmanager 并在 Prometheus 中配置
alerting.alertmanagers指向其地址
整个链路跑通后,可通过手动 kill 一个 worker 进程(kill -USR2 不适用,建议 kill -TERM 某个 worker PID)触发告警,验证从指标采集、Prometheus 触发、到 Alertmanager 通知的全流程是否正常。不复杂但容易忽略的是 Exporter 对 Nginx status 接口的支持粒度和 Prometheus relabel 的准确性。



















