核心在于利用nginx-module-vts暴露各upstream server的请求计数、响应时间、失败次数等指标,结合Prometheus采集与Grafana可视化,实现负载分布实时监控与异常识别。

在 Nginx 中实现后端节点负载分布的监控,核心在于利用 Nginx 自身模块(如 ngx_http_upstream_module)暴露的状态数据,并配合第三方工具或自定义指标采集,将负载情况可视化。Nginx 本身不内置图形化监控,但可通过 stub_status 模块(基础连接统计)和更强大的 nginx-plus 或开源替代方案(如 nginx-module-vts) 获取各 upstream server 的请求计数、响应时间、失败次数等关键负载指标。
启用 upstream 状态页(推荐 vts 模块)
Nginx 开源版默认不支持按 upstream server 细粒度统计。建议编译或安装 nginx-module-vts(Visual Time Series),它提供类似 Nginx Plus 的实时状态页:
- 添加配置示例:
upstream backend { server 192.168.1.10:8080; server 192.168.1.11:8080; server 192.168.1.12:8080; } - 在 server 块中暴露状态接口:
location /status { vhost_traffic_status_display; vhost_traffic_status_display_format html; } - 访问
/status即可查看各 server 的 request count、in/out bytes、response time(avg/max)、5xx 次数等,直观反映负载倾斜或异常节点。
结合 Prometheus 实现自动化采集与告警
vts 模块支持 JSON 格式输出(/status/format/json),天然适配 Prometheus:
- 部署 nginx-vts-exporter(轻量 exporter),定期抓取 vts JSON 并转换为 Prometheus metrics;
- 在 Prometheus 中配置 job 抓取该 exporter;
- 常用监控看板指标包括:
-
nginx_vts_upstream_requests_total{upstream="backend",server="192.168.1.10:8080"}—— 各节点请求数,判断是否轮询均匀; -
nginx_vts_upstream_response_time_seconds_avg{...}—— 平均响应延迟,识别慢节点; -
nginx_vts_upstream_requests_failed_total{...}—— 失败请求数,辅助定位健康检查失效或网络问题。
-
验证负载策略与健康检查联动效果
监控数据要能反推配置有效性。需确认以下几点是否闭环:
- 使用
least_conn或ip_hash时,在 vts 页面观察各 server 的 request 分布是否符合预期; - 手动模拟某后端宕机(如停掉 192.168.1.11),检查其 requests 是否归零、失败数上升,且流量是否自动切到其余节点;
- 确认
max_fails和fail_timeout设置合理,避免抖动误判,也防止故障节点长期被调用。
补充:基础 stub_status 的局限与用途
若无法引入 vts,仅启用官方 ngx_http_stub_status_module(需编译时开启):
- 仅提供全局连接统计:
Active connections、accepts/handled/requests,无法区分 upstream; - 适合快速确认 Nginx 自身吞吐压力,但不能用于“后端节点负载分布”分析;
- 建议至少搭配 access_log 中的
$upstream_addr和$upstream_response_time字段做离线日志分析,作为临时手段。
不复杂但容易忽略的是:监控必须与实际 upstream 配置、健康检查机制、业务流量特征对齐。光有图表没用,关键是通过指标变化及时发现轮询失衡、个别节点过载或静默故障。


















