Python 代码集成 Prometheus Client 输出 Metrics 到 Prometheus
在 Python 中,可以使用 Prometheus Python Client Library 来输出 Metrics,供 Prometheus 采集。
安装 Prometheus 客户端库
pip install prometheus-client |
以下是一个完整的示例,展示如何设置和暴露 Metrics:
from prometheus_client import start_http_server, Summary, Counter, Gauge, Histogram |
Metrics 类型说明(对应 Prometheus 中相关的数据类型)
Summary
: 用于记录事件的持续时间或大小(例如请求处理时间)。Counter
: 计数器,记录事件的总发生次数(例如请求总数)。Gauge
: 测量当前值,可以增加或减少(例如当前活跃请求数)。Histogram
: 创建直方图,记录数据分布(例如请求延迟分布)。
向 Prometheus 暴露 Metrics
start_http_server(8000)
会启动一个 HTTP 服务器,在 /metrics
路径下暴露指标数据。Prometheus 将通过该路径采集数据。
装饰器
使用 @REQUEST_TIME.time()
装饰器自动记录函数执行时间。
标签
可以在指标中添加 标签(Labels) 来提供多维度的指标。
REQUEST_COUNT.labels(method='GET').inc() |
Metrics 类型说明
在 Prometheus Python Client Library 中,常用的四种数据类型分别是 Counter
、Gauge
、Summary
和 Histogram
。
数据类型对比
数据类型 | 特性 | 常见用途 |
---|---|---|
Counter |
只能递增 | 请求总数、错误总数 |
Gauge |
可增可减,可设置具体值 | 系统状态(CPU、内存)、队列长度 |
Summary |
百分位、平均值 | 请求时间、数据大小 |
Histogram |
值的分布,生成直方图 | 延迟分布、批处理时间分布 |
Counter
累加器 ,用于计数只能增加的值(不会减少)。常用于记录事件发生的总次数,如请求数量、错误数量等。支持以下方法:
from prometheus_client import Counter |
Gauge
可变值 ,表示某个值可以增加或减少。常用于表示当前状态,比如系统内存占用量、活跃线程数、队列长度等。
from prometheus_client import Gauge |
Summary
用于记录事件的持续时间或值的分布 。生成 最小值 、 最大值 、 平均值 和 百分位 。
from prometheus_client import start_http_server, Summary |
Histogram
和 Summary
类似,但它会将值划分到 桶(buckets) 中,生成分布直方图
from prometheus_client import start_http_server, Histogram |
Django 集成 Prometheus Client Library
在 Django 项目中通过同一个地址(如 8081
)暴露 Prometheus Metrics,可以通过以下方式实现共享 HTTP 服务来暴露 Metrics
- 集中管理 Prometheus Metrics 和 HTTP 服务 。在一个单独的文件中创建指标和 HTTP Server 在
metrics.py from prometheus_client import start_http_server, Gauge, Counter
# 定义全局指标
PROJECT_STATE = Gauge('proj_state', 'State of project', ['state', 'message'])
REQUEST_COUNTER = Counter('request_counter', 'Request count', ['domain', 'item'])
RESP_CODE = Gauge('resp_code', 'Response code', ['domain', 'item'])
# 启动 Prometheus HTTP 服务(仅启动一次)
def start_prometheus_server():
start_http_server(8081)urls.py
中启动 Metrics 服务urls.py # urls.py
from django.urls import path
from .metrics import start_prometheus_server
# 启动 Prometheus 服务
start_prometheus_server()
urlpatterns = [
# 其他路径配置
]在
urls.py
中启动 Prometheus Metris Http Server,使用python3 manage.py shell -c
启动程序,不会将 Metrics 写入到 Prometheus Metrics Server 中。需要通过 HTTPurl
的方式调用程序才行。