要监控nginx least connections策略下各后端实时连接数,需使用nginx-module-vts模块替代stub_status,通过/status/format/json暴露指标,经nginx-vts-exporter转换后由prometheus抓取,在grafana中用nginx_vts_upstream_server_active查询并可视化。

要监控 Nginx 使用 Least Connections 负载均衡策略时后端各服务器的实时连接数,Nginx 本身不直接输出“每台机器当前活跃连接数”的日志字段,但可通过组合内置变量、状态模块和外部工具实现可视化面板。核心思路是:利用 ngx_http_upstream_module 的 $upstream_addr 和连接统计逻辑,配合 stub_status 或第三方模块(如 nginx-module-vts)采集指标,再接入 Prometheus + Grafana。
启用 upstream 连接状态采集(推荐 vts 模块)
Nginx 官方 stub_status 只提供全局连接统计,无法按 upstream server 拆分。需引入 nginx-module-vts(Virtual Host Traffic Status)模块:
- 编译时添加:
--add-module=/path/to/nginx-module-vts - 配置示例:
upstream backend { least_conn; server 192.168.1.10:8080; server 192.168.1.11:8080; } <p>server { listen 8080; location /status { vhost_traffic_status_display; vhost_traffic_status_display_format html; } }</p> - 访问
http://your-nginx/status即可看到每个 upstream server 的active(当前活跃连接数)、requests、responses等实时指标
通过 Prometheus Exporter 暴露指标
vts 模块支持 JSON 格式输出,可被 Prometheus 抓取:
- 在 vts 配置中启用 JSON 接口:
location /status/format/json { vhost_traffic_status_display; vhost_traffic_status_display_format json; } - 部署 nginx-vts-exporter,它会定时拉取
/status/format/json,转换为 Prometheus 可识别的指标,例如:nginx_vts_upstream_server_active{upstream="backend",addr="192.168.1.10:8080"} - Prometheus 配置 job 抓取该 exporter 的
/metrics端点
Grafana 面板配置关键项
在 Grafana 中新建面板,数据源选 Prometheus,查询语句示例:
- 显示各节点实时 active 连接数:
nginx_vts_upstream_server_active{upstream=~"backend"} - 叠加显示连接趋势(过去 5 分钟):
rate(nginx_vts_upstream_server_requests_total{upstream=~"backend"}[5m]) - 设置面板类型为 “Time series” 或 “Stat”,开启 “Show all values” 查看每台 server 的独立曲线
- 添加变量(Variables)支持下拉筛选 upstream 名称或 server 地址,提升交互性
替代方案:自定义日志 + 实时解析(轻量级)
若无法编译模块,可用日志间接估算(精度略低,适用于调试):
- 在 upstream 块中启用
least_conn,并配置 log_format 记录所选后端:log_format connlog '$remote_addr - $upstream_addr [$time_local] $status'; - 配合
log_subrequest on;(确保子请求也记录) - 用
goaccess、awk + tail -f或 Loki + Grafana 实时统计单位时间内各$upstream_addr出现频次,作为连接活跃度近似指标 - 注意:该方式反映的是“近期请求分发情况”,非瞬时连接数,不等同于内核 socket 连接数
不复杂但容易忽略:vts 模块的 active 字段才是 Least Connections 算法真正依赖的实时连接计数,它由 Nginx 内部维护,比日志推算更准确可靠。











