阿里云可观测监控 prometheus 版监控 nginx 的核心是“暴露指标→抓取数据→可视化呈现→告警联动”四步闭环:需启用 stub_status 和 upstream-check 模块暴露健康事实,用 nginx-prometheus-exporter 翻译为 prometheus 指标,通过 arms 控制台一键接入并使用预置大盘,再基于 nginx_upstream_server_healthcheck_fails_current 等指标配置节点级、集群级和连接积压告警。

阿里云可观测监控 Prometheus 版采集 Nginx 服务运行状态并构建健康检查大盘,核心在于“暴露指标 → 抓取数据 → 可视化呈现 → 告警联动”四步闭环。关键不在于装一个 exporter 就完事,而在于让 Nginx 主动说出它知道的健康事实,并确保这些事实能被准确翻译成 Prometheus 可理解的语言。
让 Nginx 暴露真实健康状态
Nginx 默认不输出后端节点健康分、连续失败次数或实时活跃连接数。必须通过模块扩展其“表达能力”:
- 启用 ngx_http_stub_status_module:提供基础连接与请求统计(
Active connections,accepts/handled/requests),是所有监控的起点 - 集成 nginx-upstream-check-module(或 OpenResty 内置 health check):在
upstream块中配置主动探测,例如:check interval=3 rise=2 fall=3 timeout=1 type=http;check_http_send "GET /health HTTP/1.1\r\nHost: x.com\r\nConnection: close\r\n\r\n";check_http_expect_alive http_2xx; - 开启 status 页面权限控制:如
location /status { check_status; allow 10.0.0.0/8; deny all; },避免健康拓扑泄露
用 Exporter 把状态“翻译”成 Prometheus 指标
原生 Nginx 的 /status 或 /status/format/json 是人类可读格式,Prometheus 无法直接解析。需要专用 Exporter 做结构化转换:
-
nginx-prometheus-exporter(官方推荐):定期抓取
/nginx_status和/status(需 upstream_check 支持),输出如:nginx_upstream_server_healthcheck_fails_current{upstream="api",server="192.168.1.10:8080"}nginx_upstream_server_active_connections{upstream="api",server="192.168.1.10:8080"} - 若使用 nginx-module-vts,配合
vts-exporter可获取更细粒度的 upstream/server 维度指标,包括响应时间分布、错误码计数等 - Exporter 启动后监听默认端口(如
:9113),Prometheus 通过scrape_configs中配置targets: ['exporter-host:9113']定期拉取
在 ARMS/Prometheus 控制台配置采集与大盘
阿里云 ARMS 控制台已封装标准流程,省去手动写 job 配置的步骤:
- 登录 ARMS 控制台 → 接入中心 → 搜索“Nginx” → 选择环境类型(容器服务集群 或 ECS/VPC)
- 填写目标地址(如容器内 Service 名称 或 ECS 内网 IP + Exporter 端口)
- 保存后自动创建采集任务,并关联开箱即用的 专属监控大盘,含:活跃连接趋势、上游节点健康状态热力图、各节点失败次数排行、P95 响应延迟下钻等
- 在“采集指标”页签可确认是否已采集到
nginx_upstream_server_healthcheck_fails_current、nginx_upstream_server_weight等关键健康相关指标
基于健康指标配置有效告警
有数据不等于有洞察,告警规则需紧扣业务影响:
- 节点级异常:当某后端连续 3 分钟
nginx_upstream_server_healthcheck_fails_current > 0,触发“节点疑似失联”告警 - 集群级风险:计算健康节点占比:
count by(upstream) (nginx_upstream_server_healthcheck_fails_current == 0) / count by(upstream) (nginx_upstream_server_healthcheck_fails_current)
低于 80% 时告警“上游集群健康率过低” - 连接积压预警:某节点
nginx_upstream_server_active_connections > nginx_upstream_server_max_conns * 0.8,提示可能过载











