要让nginx负载均衡器对外暴露统一、可读、可集成的流量监控视角,关键在于构建“采集—聚合—展示—告警”闭环:启用nginx-module-vts提供结构化json指标,对接prometheus实现长期存储与告警,叠加nginx_upstream_check_module实现主动健康检查,并通过grafana统一可视化。

要让 Nginx 负载均衡器对外暴露统一、可读、可集成的流量监控视角,关键不是只开一个状态页,而是构建“采集—聚合—展示—告警”闭环。核心在于用标准化指标替代零散日志,用结构化接口替代人工翻页。
启用 vts 模块并暴露结构化状态接口
Nginx 自带的 stub_status 仅返回极简连接数,无法反映后端健康、响应码分布、请求速率等关键维度。推荐启用 nginx-module-vts(Virtual Host Traffic Status),它提供完整 upstream 级别指标:
- 编译安装时添加
--add-module=/path/to/nginx-module-vts,或使用已集成该模块的 OpenResty 发行版 - 在
http块中启用模块:vhost_traffic_status on; - 配置专用 location 暴露 JSON 接口:
location /status/format/json {<br> vhost_traffic_status_display;<br> vhost_traffic_status_display_format json;<br> allow 127.0.0.1;<br> allow 10.0.0.0/8;<br> deny all;<br>} - 访问
/status/format/json即可获得含upstream.zones、server、requestCounter、inBytes、respCode等字段的完整结构化数据
对接 Prometheus 实现指标长期存储与告警
单纯看实时接口无法追溯异常趋势或触发自动响应。需将 vts 数据导出为 Prometheus 格式:
- 部署
nginx-vts-exporter(如官方推荐的 nginx-vts-exporter) - 启动时指定采集地址:
./nginx-vts-exporter -nginx.scrape_uri=http://127.0.0.1/status/format/json - 在 Prometheus 的
scrape_configs中添加 job,目标指向 exporter 的/metrics端点(默认 9913) - 关键可观测指标立即可用:例如
nginx_vts_upstream_request_counter_total{upstream="backend", code="200"}、nginx_vts_upstream_response_time_msec_sum、nginx_vts_upstream_fails_total
配置主动健康检查并同步状态到监控视图
监控不能只看“有没有流量”,更要确认“流量是否发到了健康的节点”。被动失败(max_fails)滞后且不可见,必须叠加主动探测:
- 使用
nginx_upstream_check_module(需编译支持),在 upstream 中添加:check interval=5 rise=2 fall=3 timeout=1 type=http;<br>check_http_send "GET /health HTTP/1.0\r\n\r\n";<br>check_http_expect_alive http_2xx;
- 该模块会把每个 server 的
check_status(up/down)、rise/fall计数写入共享内存,vts 模块可直接读取并在 JSON 输出中体现为upstream.zones.*.checks字段 - Prometheus 抓取后,即可建立告警规则,例如:
sum(nginx_vts_upstream_fails_total{upstream="backend"}) by (server) > 5
或nginx_vts_upstream_check_status{upstream="backend"} == 0
统一入口:用 Grafana 构建全局仪表板
最终面向运维和值班人员的,应是一个无需登录多台机器、不查日志、不拼命令的可视化看板:
- 导入社区维护的 Nginx VTS Dashboard(ID: 2949 或最新版)到 Grafana
- 关键面板建议包含:
– 全局 QPS 与后端分组请求量对比
– 各 upstream server 的响应时间 P95/P99 热力图
– 5xx 错误率 Top 3 后端 + 对应健康状态标记
– 当前 active 连接数 vs max_conns 限制水位线
– 健康检查失败趋势(fall 计数突增即预警) - 所有面板均支持下钻至具体 server 或 URI 维度,点击即可跳转对应 Prometheus 查询或日志系统











