Nginx原生不支持实时监控least_conn连接状态,需通过后端上报、access_log解析、OpenResty+Lua扩展或系统层ss/netstat采样等外部手段间接实现。

在 Nginx 中,least_conn 是 upstream 的一种负载均衡策略,它本身不暴露连接数指标,Nginx 官方也不提供实时连接数的 HTTP 接口。因此,“实时监控 least_conn 集群连接状态”不能直接通过 Nginx 原生机制实现,必须借助外部手段间接推断或增强可观测性。下面给出几种切实可行、生产环境验证过的方法。
利用 Nginx stub_status 模块 + 后端主动上报
Nginx 自带的 stub_status 只能提供全局连接统计(如 active, reading, writing, waiting),无法按 upstream server 拆分。但你可以让后端服务在每次被选中处理请求时,主动向一个轻量服务(如 Redis 或本地文件)上报“被 least_conn 选中”的事件,再由脚本聚合计数。
- 在 upstream 中配置
least_conn,确保无其他干扰策略(如ip_hash) - 后端在收到请求后,用唯一标识(如
$host:$server_port)+ 时间戳写入 Redis Hash:HINCRBY backend_conn_count server1 1 - 用 Python/Shell 脚本定时(如每秒)读取 Redis 并排序,模拟当前 least_conn 的倾向性
- 注意:需控制上报频率(避免压垮 Redis),建议加采样或异步日志+logrotate 后解析
解析 Nginx access_log 实现近实时统计
如果启用了 $upstream_addr 和 $upstream_connect_time 等变量,access_log 可记录每次请求实际转发到哪个后端及连接建立情况,这是最稳定、无需修改后端的方式。
- 在 Nginx 配置中开启详细 upstream 日志:
log_format upstream_log '[$time_local] $remote_addr - $request_method $uri → $upstream_addr ($upstream_connect_time)'; - 用
tail -f+awk实时统计每秒各 backend 的请求数(即连接发起频次,与 least_conn 选择强相关):
tail -F /var/log/nginx/access.log | awk '{gsub(/[,;]/,"",$10); print $10}' | awk '{count[$1]++} END{for (i in count) print i, count[i]}' - 配合
watch或简单循环脚本,每 2–5 秒刷新一次,可观察连接分布趋势 - 优势:零侵入、全链路可追溯;缺点:是“已建立连接”的结果统计,非连接池实时快照
使用 OpenResty + Lua 扩展实时采集
如果你能接受升级到 OpenResty(完全兼容 Nginx 配置),可通过 Lua 在 balancer_by_lua* 阶段拦截负载决策,精确记录每次 least_conn 的选择结果。
- 启用
balancer_by_lua_block,在其中调用balancer.set_current_peer()前,将候选 server 列表和当前连接数缓存到 shared dict - 用
ngx.shared存储每个 backend 的“最近 30 秒连接计数”,并定期(如 timer)导出为 JSON 接口 - 编写 curl 脚本轮询该接口(如
/api/upstream-state),再做排序和告警判断 - 注意:需关闭
least_conn原生逻辑,改用 Lua 实现等效算法(遍历peer:count()),否则无法捕获
补充建议:结合系统层连接跟踪
真正意义上的“连接状态”还包含 TCP 连接数。可在 Nginx 机器上用 netstat/ss 辅助验证:
- 运行:
ss -tn src :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr查看当前所有出向连接的目标 IP - 与 upstream 配置中的 server IP 对齐,即可知道哪些后端正承载更多活跃连接
- 适合调试阶段快速验证,不建议高频执行(性能开销大),可设为每 10 秒采样一次
不复杂但容易忽略:Nginx 的 least_conn 是“新连接选择时”比较后端当前活跃连接数,它不维护长连接池,也不感知后端真实处理耗时。所以监控重点应是“连接发起频次”和“后端响应健康度”,而非幻想获取某个瞬时连接数快照。











