如何禁用Python prometheus_client的默认指标采集
针对Python版Prometheus客户端禁用默认指标的方案
Python版Prometheus客户端默认会自动注册进程运行状态、Python解释器GC、平台信息三类默认指标,你可以通过以下两种方案实现仅保留自定义指标:
方案1:使用自定义空Registry(更推荐)
避免使用客户端自带的全局REGISTRY,自行初始化无默认收集器的空Registry,仅将你需要的自定义指标注册到该Registry即可,示例代码如下:
from prometheus_client import Counter, Registry, start_http_server # 初始化空Registry,无任何默认指标 custom_reg = Registry() # 自定义指标注册时指定使用该Registry app_request_counter = Counter('app_request_total', '应用请求总量', registry=custom_reg) # 启动指标暴露服务时指定自定义Registry start_http_server(9091, registry=custom_reg)
方案2:从全局Registry卸载默认收集器
如果现有代码逻辑不方便替换全局Registry,可以直接从默认的全局Registry中移除自带的默认收集器,示例代码如下:
from prometheus_client import REGISTRY, ProcessCollector, GCCollector, PlatformCollector # 依次卸载三类默认收集器 default_collectors = [ProcessCollector, GCCollector, PlatformCollector] for collector_cls in default_collectors: try: REGISTRY.unregister(collector_cls()) except ValueError: # 对应收集器未注册时直接跳过即可 pass
注意事项
- 如果你使用
generate_latest这类函数手动生成指标输出,需要同步传入自定义Registry,否则仍然会返回全局Registry的默认指标:from prometheus_client import generate_latest # 传入自定义Registry获取仅包含自定义指标的输出 metrics_content = generate_latest(custom_reg) - 多进程部署场景下上述逻辑仍然适用,只需保证自定义指标注册和指标读取都使用同一个Registry即可。
内容的提问来源于stack exchange,提问作者Abhishek Anand
相关产品推荐
相关产品推荐

