Nginx轮询负载均衡实时统计需组合日志解析、vts模块与系统工具:通过log_format记录$upstream_addr等字段,用awk实时统计请求占比;部署nginx-module-vts获取节点级请求数、活跃连接及健康状态;辅以stub_status、ss和pidstat验证整体负载与后端连通性。

要查看 Nginx 轮询负载均衡的实时请求分发统计指标,关键不是等“内置仪表盘”,而是组合日志、状态模块和轻量工具构建可观测链路。Nginx 开源版本身不提供开箱即用的实时节点级分发热力图,但通过合理配置,完全可以做到秒级感知各后端接收了多少请求、是否延迟高、有没有被剔除。
启用并解析 access_log 中的 upstream 信息
这是最直接、无需额外编译的方式,前提是日志格式已记录关键字段:
- 确保 log_format 包含
$upstream_addr(实际转发目标)、$upstream_response_time和$upstream_status,例如:
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$upstream_addr $upstream_response_time $upstream_status';- 用 awk + sort + uniq 实时统计每台后端请求数占比(适合快速验证是否均匀):
tail -f /var/log/nginx/access.log | awk '{print $NF}' | cut -d, -f1 | sort | uniq -c | sort -nr- 注意:
$NF默认是最后一列,需确认它对应的是$upstream_addr;若 upstream 地址含多个(如故障转移),建议用cut -d, -f1取首个目标
部署 nginx-module-vts 查看动态上游视图
vts(Virtual Host Traffic Status)是目前开源生态中最实用的 Nginx 实时监控方案,能直观展示每个 upstream server 的活跃连接、请求数、健康状态:
- 编译时加入 vts 模块(或使用已集成该模块的发行版,如 OpenResty)
- 在
http块中启用状态区:vhost_traffic_status_zone; - 配一个 status 页面(如监听 8080 端口):
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}- 访问
http://nginx-ip:8080/status→ 切换到 “Upstreams” 标签页,即可看到每台 server 的:Active(当前活跃连接)、Requests(累计请求数)、Health(up/down) - 只要 Health 显示为 up 且 Active > 0,就说明该节点正在真实承接流量
结合 stub_status 和系统工具做辅助判断
当无法安装 vts 时,可用基础能力交叉验证:
- 启用
stub_status获取全局连接状态(如Active connections: 124),虽不区分后端,但可判断整体压力趋势 - 用
ss -tn src :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr查看当前所有到后端的 TCP 连接来源 IP(即 Nginx 正连哪些后端地址) - 配合
pidstat -u 1或top -p $(pgrep nginx)观察 worker 进程 CPU 是否持续偏高,间接反映调度或后端响应瓶颈
监控响应质量与故障剔除是否生效
轮询是否“有效”,不仅看请求数是否平均,更要看后端是否真能及时响应:
- 检查 error.log 中是否有大量
connect() failed或no live upstreams,说明 max_fails/fail_timeout 配置可能未起作用或阈值过严 - 在 upstream 配置中显式设置容错参数(轮询默认不自动剔除):
upstream backend {
server 192.168.1.101 max_fails=3 fail_timeout=30s;
server 192.168.1.102 max_fails=3 fail_timeout=30s;
}- 用
grep "192.168.1.101" /var/log/nginx/error.log | tail -20快速确认该节点近期是否被标记为不可用


















