现场是这样的。自建推理服务用 Prometheus 抓指标,vLLM 自带的 request_success_total 有数据,自己加的 token 计数在 /metrics 里看不到,代码里定义了 Counter,请求打了几十次仍然没有数值。

中间走过弯路,把「指标名与已有前缀冲突被丢弃」当成主因,改完现象没变。

把日志和配置对完,能解释这个现象的基本就这几处。Counter 定义在函数里,没有注册到默认 registry;自定义 Collector 没挂到默认 registry;多进程模式下各进程的指标不共享。

上来先确认指标是否出现在端点

curl http://127.0.0.1:8000/metrics | grep token

接着改到模块级定义并显式注册

python metrics_demo.py --module-level

多进程下换 multiprocess 收集器

python metrics_demo.py --multiprocess

末了打一条请求后复查指标

curl http://127.0.0.1:8000/metrics | grep llm_tokens

当时还开着另一个排查窗口,两边日志对照着看才定位到。

别只看报错消失,验证要多做一步。/metrics 里能看到按模型与类型拆分的 token 计数,请求一次计数加一,面板能画出曲线。

prometheus_client 的指标必须在模块级定义,函数里 new 出来的 Counter 不会出现在 /metrics 里。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189