Nginx 无内置 slow_start 权重变化图表,但可通过日志分析、主动探测及 nginx-module-vts 等外部工具监控 effective_weight 实时值并绘图验证;slow_start 仅在节点由不健康恢复健康时触发,需启用健康检查、支持动态权重的负载算法,并结合 access_log 秒级统计请求分布拟合线性增长曲线。

nginx 本身不提供 slow_start 权重变化的实时监控图表或内置指标接口,无法直接导出“权重随时间线性增长”的可视化曲线。但你可以通过组合日志分析、主动探测与外部工具,间接还原和验证 slow_start 的实际生效效果。
确认 slow_start 是否真正触发
slow_start 只在节点从“不健康”恢复为“健康”时启动(例如健康检查由 fail → pass),不是服务刚加入 upstream 就开始计时。要验证是否触发:
- 确保 upstream 启用了 主动健康检查(如
health_check指令)或配置了有效的被动探活(max_fails=3 fail_timeout=10s) - 观察 error log:当某 server 恢复健康时,Nginx 会记录类似
upstream server restored的信息 - 检查该 server 是否使用了
least_conn、ip_hash或hash ... consistent等支持动态权重的算法;round_robin(默认)下 slow_start 无效
通过 access_log 统计请求分布趋势
在 slow_start 时间窗口内(如 slow_start=60s),按秒级聚合各后端的请求量,可拟合出近似线性增长曲线:
- 在
log_format中加入后端地址与上游状态标识,例如:log_format upstream_log '$time_iso8601 $upstream_addr $upstream_response_time $upstream_cache_status'; - 用脚本每 5 秒采样一次 access.log,统计指定 server IP 在最近 60 秒内的请求数(例如用 awk + date 过滤)
- 绘制时间-请求数折线图:若 slow_start 生效,该 server 的请求占比应从接近 0 缓慢上升,60 秒末接近理论权重占比
用 stub_status 或第三方模块暴露指标
原生 Nginx 不暴露权重实时值,但可通过以下方式增强可观测性:
- 启用
ngx_http_stub_status_module(需编译时开启),配合upstream_conf模块(OpenResty 或 Nginx Plus)可动态查看当前各 server 的有效权重 - 使用
nginx-module-vts(Virtual Host Traffic Status):它提供 JSON 接口(如/status/format/json),其中upstreamZones下包含每个 server 的weight和effective_weight字段,后者即 slow_start 实时计算后的当前权重 - 定时轮询该接口,提取
effective_weight值并绘图,即可得到真实的权重增长曲线
模拟验证与日志标记法
快速验证 slow_start 行为是否符合预期,无需等真实故障恢复:
- 临时将某 backend server 的健康检查设为失败(如关掉服务或防火墙拦截),等待其被标记为 down
- 重启服务并放开访问,让健康检查在数秒内通过,此时 slow_start 开始计时
- 在 upstream 配置中为该 server 添加
down注释或改用唯一标识名,便于日志过滤 - 用
ab或wrk持续发压(如每秒 20 请求),持续 90 秒,再分析 access_log 中该 server 出现频次的时间序列


















