加权轮询负载均衡日志监控的核心是通过Nginx access_log中$upstream_addr字段统计各后端实际请求占比,验证是否符合配置权重比,并结合error_log中的超时或无可用上游错误识别节点异常。

加权轮询负载均衡的日志监控分析,核心是确认请求是否按预设权重比例分发,并及时发现异常倾斜或节点失联。不需要额外开启特殊日志格式,Nginx 默认 access_log 就能支撑基础分析,关键在日志字段设计、采集方式和统计逻辑。
确保日志包含关键字段
默认日志通常只记录时间、IP、URL、状态码等,无法区分后端服务器。必须在 log_format 中加入 $upstream_addr 和 $upstream_response_time:
-
$upstream_addr:记录实际转发到的后端地址(如192.168.1.10:8080),这是识别权重分配是否准确的唯一依据 -
$upstream_response_time:辅助判断某台服务器是否响应变慢,间接影响权重效果(尤其在启用least_conn或动态权重时) - 示例配置:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '<br> ' $status $body_bytes_sent "$http_referer" "<br> ' $http_user_agent" "$http_x_forwarded_for" '<br> ' '$upstream_addr $upstream_response_time';
用命令行快速验证权重分配比例
对 access.log 抽样统计,直接看各后端地址出现频次是否接近设定权重比:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 假设配置为:
server 192.168.1.10 weight=3; server 192.168.1.11 weight=2; server 192.168.1.12 weight=1,理论占比应为 50% : 33.3% : 16.7% - 执行统计命令:
awk '{print $12}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
(注意:$12 是$upstream_addr在上述 log_format 中的位置,需按实际字段序号调整) - 若某台服务器占比长期偏离预期(如 weight=3 的只占 30%),需检查该节点健康状态、网络延迟或是否被自动剔除(
max_fails触发)
结合健康检查日志交叉验证
Nginx 不会把健康检查失败单独记入 access_log,但会在 error_log 中输出连接失败、超时等信息:
- 关注
/var/log/nginx/error.log中类似内容:upstream timed out (110: Connection timed out) while connecting to upstream
或no live upstreams while connecting to upstream - 一旦某台服务器频繁报错,即使配置了 weight=3,也会被临时移出轮询队列,导致实际流量全部压向剩余节点——此时 access_log 统计结果必然严重失真
- 建议定期 grep error.log:
grep "upstream.*timeout\|no live upstreams" /var/log/nginx/error.log | tail -20
进阶:用脚本做定时比例校验
手动查日志易遗漏波动。可写一个轻量脚本,每5分钟跑一次,对比实际分配比与理论权重比:
- 提取最近1000条日志的 upstream_addr,统计频次
- 计算各服务器占比,与配置中 weight 总和归一化后的理论值比较(如 3/6=0.5, 2/6≈0.333)
- 偏差超过 ±5% 时,自动发邮件或写入告警日志
(脚本无需复杂,几十行 bash + awk 即可实现)

















