基于Flask与Prometheus Client自定义指标声明位置咨询
在Flask中添加自定义Prometheus指标的正确位置
你的代码已经搭好了基础的Prometheus metrics路由,接下来自定义指标的声明其实很清晰——必须放在全局作用域(或者请求处理流程之外的作用域),不能在路由函数内部定义,不然每次请求都会尝试创建新的指标,Prometheus会抛出重复注册的错误。
给你一个完整的示例,包含自定义Counter指标的声明和使用:
from flask import Flask from werkzeug.middleware.dispatcher import DispatcherMiddleware from prometheus_client import make_wsgi_app, Counter # 全局声明自定义指标:记录Flask请求总数,按endpoint标签区分 REQUEST_COUNT = Counter( 'flask_requests_total', 'Total number of incoming Flask requests', ['endpoint'] ) app = Flask(__name__) # 挂载Prometheus metrics路由 app.wsgi_app = DispatcherMiddleware(app.wsgi_app, { '/metrics': make_wsgi_app() }) @app.route('/') def home(): # 在路由处理逻辑中更新指标 REQUEST_COUNT.labels(endpoint='/').inc() return "Hello from Flask!" @app.route('/api/user') def get_user(): REQUEST_COUNT.labels(endpoint='/api/user').inc() return {"user_id": 123, "name": "John Doe"} if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
关键注意点:
- 全局作用域声明:指标需要在应用启动时就完成注册,所以要放在路由函数之外,比如文件顶部、app实例创建前后都可以,只要是全局可见的位置。
- 指标类型选择:根据你的需求选合适的指标类型:
Counter:只增不减的计数器(比如请求数、错误数)Gauge:可以增减的仪表盘(比如当前在线用户数、内存使用率)Histogram:记录分布情况(比如请求耗时)Summary:类似Histogram,但会计算分位数
- 自定义Registry(可选):如果需要隔离不同的指标集合,可以创建自定义
CollectorRegistry,然后在声明指标和创建wsgi应用时指定:from prometheus_client import CollectorRegistry, Gauge # 创建自定义注册表 custom_registry = CollectorRegistry() # 把指标注册到自定义注册表 ONLINE_USERS = Gauge('online_users', 'Current number of online users', registry=custom_registry) # 挂载时指定自定义注册表 app.wsgi_app = DispatcherMiddleware(app.wsgi_app, { '/metrics': make_wsgi_app(registry=custom_registry) })
启动应用后,访问http://localhost:5000/metrics就能看到你自定义的flask_requests_total指标了。
内容的提问来源于stack exchange,提问作者Nicolas Berthier
相关产品推荐
相关产品推荐

