现场是这样的。用 Prometheus 抓 vLLM 0.6.3 的指标,配置里写的路径是 /stats,target 一直是 DOWN,手工 curl 也是 404,换成另一个路径立刻有数据。

中间走过弯路,把「抓取端口写成了业务端口之外的另一个端口」当成主因,改完现象没变。

排查方向其实有限,先把可能性排一排。指标暴露路径是 /metrics,不是自行推测的 /stats;启动参数里加了关闭指标的开关;服务挂在子路径下,需要 rewrite 才能命中。

手工探测真实路径返回什么状态码

curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8000/metrics

然后确认启动命令没有禁用统计

python -c "print('不要加 --disable-log-stats')"

再往下改完配置后热加载

curl -X POST http://127.0.0.1:9090/-/reload

直接查 target 的健康状态

curl -s http://127.0.0.1:9090/api/v1/targets | findstr health

那几天正好在做别的变更,先把时间线对齐才敢动手。

排查用的命令都是临时敲的,没有写成脚本,事后才整理。

恢复的判定其实很直接。target 状态为 up,vllm:num_requests_running 能查到连续数据点,抓取间隔内没有断点。

路径写错的表现为 404 而不是连接失败,看到 DOWN 先手工 curl 一次,比反复翻配置快。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189