You need to enable JavaScript to run this app. 如何为端点上的不同请求设置独立的Prometheus Counter指标
优惠活动
大模型
产品
解决方案
定价
更多

如何为端点上的不同请求设置独立的Prometheus Counter指标

核心问题

你的代码计数时给endpoint标签传了固定的硬编码值,没有和实际访问路径挂钩:

  • 代码里写死basic_counter.labels('prom-python-app', 'localhost:5000'),不管访问哪个路径,标签值永远是localhost:5000
  • Prometheus完全依赖标签值拆分独立时间序列,所有请求的标签完全相同,自然只会输出聚合的总计数,没法区分不同页面的访问量。

调整方式

只需要把硬编码的标签值替换为动态获取的当前请求信息,就能生成按路径拆分的独立计数器。结合你使用Python、端口5000(Flask默认端口)的场景,可参考如下实现:

  1. 原有的Counter定义不需要改动,已配置的app_name、endpoint两个标签维度完全满足需求
  2. 借助Flask的请求上下文拿到当前访问的host和路径,作为标签值传入labels()方法。可以用全局请求钩子统一处理所有接口的计数,避免在每个路由中重复写计数逻辑
    完整示例代码:
    from flask import Flask, request
    from prometheus_client import Counter, generate_latest
    
    app = Flask(__name__)
    # 原有Counter定义完全保留
    basic_counter = Counter('basic_counter', 'A basic counter.', ['app_name', 'endpoint'])
    
    # 全局钩子:所有接口响应完成后自动触发计数
    @app.after_request
    def count_request(response):
        # 动态拼接当前请求的endpoint标识:host + 实际访问路径
        current_endpoint = f"{request.host}{request.path}"
        # 用动态值替换原来的硬编码标签值
        basic_counter.labels('prom-python-app', current_endpoint).inc()
        return response
    
    # 根路径接口
    @app.route('/')
    def home():
        return "home page"
    
    # /health健康检查接口
    @app.route('/health')
    def health():
        return "service ok"
    
    # Prometheus指标暴露接口
    @app.route('/metrics')
    def metrics_endpoint():
        return generate_latest()
    

实际效果

分别访问localhost:5000/和localhost:5000/health各一次后,打开/metrics页面,就能看到两个独立的时间序列计数:

basic_counter_total{app_name="prom-python-app",endpoint="localhost:5000/"} 1.0
basic_counter_total{app_name="prom-python-app",endpoint="localhost:5000/health"} 1.0

避坑提醒

  • 不要把无边界的高基数内容(比如用户ID、订单号、动态查询参数)放到Counter标签中,这类值会生成海量时间序列,快速消耗Prometheus的内存和存储资源
  • 对于带路径参数的接口(比如/user/<id>),不要把实际传入的id值作为标签,要使用路由模板本身(比如/user/<id>)作为标签值,从源头控制标签基数
  • 新增接口时不需要单独写计数逻辑,全局钩子会自动覆盖所有路由,减少漏记的可能

内容的提问来源于stack exchange,提问作者sinG20

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 08:27:02