使用prometheus-fastapi-instrumentator自定义函数计数器遇计数不增长问题
问题解决:Prometheus FastAPI 计数器无法累加的问题
你的问题根源在于每次调用invalid_doc_type_counter()时都会重新创建一个新的Counter实例,每次执行inc()都是针对这个新实例,所以指标数值永远停留在1,不会累加。
修正后的代码实现
把Counter的定义移到方法外部,作为类的静态属性,确保整个应用生命周期内只有一个计数器实例:
from prometheus_client import Counter class Counters: # 在类级别定义计数器,仅初始化一次 INVALID_DOC_TYPE_COUNTER = Counter( "invalid_doc_type_count", "Number of times invalid doc type issue came up", labelnames=("handler",) ) @staticmethod def invalid_doc_type_counter(): # 复用已初始化的计数器实例进行递增操作 Counters.INVALID_DOC_TYPE_COUNTER.labels("info.modified_handler").inc()
调用逻辑保持不变:
if not filtered_det: #Invalid doc type counter Counters.invalid_doc_type_counter() raise ValueError("Invalid Doc Type")
进阶优化(支持动态标签)
如果需要针对不同handler统计,可让方法接收标签参数,增强灵活性:
@staticmethod def invalid_doc_type_counter(handler): Counters.INVALID_DOC_TYPE_COUNTER.labels(handler).inc()
调用时传入对应handler:
if not filtered_det: Counters.invalid_doc_type_counter("info.modified_handler") raise ValueError("Invalid Doc Type")
这样修改后,每次触发计数器时都会对同一个实例进行递增,访问/metrics就能看到数值正确累加了。
内容的提问来源于stack exchange,提问作者Abhishek Bose
相关产品推荐
相关产品推荐

