You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Flask+Prometheus Client不同端点返回指定Metric?

实现Flask+Prometheus Client分端点返回指定Metric

完全可行,核心解决思路是为每个指标分配独立的CollectorRegistry(指标注册表),避免使用默认的全局注册表导致所有指标被统一收集。具体实现步骤如下:

1. 导入依赖模块

from flask import Flask, Response
from prometheus_client import Gauge, generate_latest, CollectorRegistry

2. 初始化Flask应用与独立注册表

为每个需要单独暴露的指标创建专属注册表,绑定对应的Gauge实例:

app = Flask(__name__)

# 为nbl_cpu_usage创建独立注册表
cpu_registry = CollectorRegistry()
nbl_cpu_usage = Gauge(
    name='nbl_cpu_usage',
    documentation='CPU Usage Metric',
    registry=cpu_registry
)

# 为nbl_cpu_usage1创建独立注册表
cpu1_registry = CollectorRegistry()
nbl_cpu_usage1 = Gauge(
    name='nbl_cpu_usage1',
    documentation='CPU Usage Metric 1',
    registry=cpu1_registry
)

3. 编写指标更新逻辑

替换成你实际的指标采集代码(比如读取CPU使用率):

def update_metrics():
    # 模拟获取CPU使用率,实际场景替换为真实采集逻辑
    nbl_cpu_usage.set(42.5)
    nbl_cpu_usage1.set(78.3)

4. 定义分端点路由

每个路由调用对应注册表的generate_latest方法,仅返回该注册表下的指标:

@app.route('/metric_cpu')
def expose_cpu_metric():
    update_metrics()
    return Response(
        generate_latest(cpu_registry),
        mimetype='text/plain; version=0.0.4; charset=utf-8'
    )

@app.route('/metric_cpu1')
def expose_cpu1_metric():
    update_metrics()
    return Response(
        generate_latest(cpu1_registry),
        mimetype='text/plain; version=0.0.4; charset=utf-8'
    )

5. 启动应用

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

关键说明

  • 默认情况下Prometheus Client会使用全局注册表REGISTRY,所有指标都会被添加到这个全局注册表中,导致所有端点返回全部指标。通过为每个指标创建独立注册表,可以实现指标的隔离。
  • 如果需要定时自动更新指标,可以结合APScheduler等定时任务工具,核心的注册表隔离逻辑保持不变。

内容的提问来源于stack exchange,提问作者chih-hao wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 12:02:46