虽然 prometheus 已有大量可直接使用的 exporter 可供使用,以满足收集不同的监控指标的需要。例如,node exporter 可以收集机器 cpu,内存等指标,cadvisor 可以收集容器指标。然而,如果需要收集一些定制化的指标,还是需要我们编写自定义的指标。
本文讲述如何使用 prometheus python 客户端库和 flask 编写 prometheus 自定义指标。
安装依赖库
我们的程序依赖于 flask 和 prometheus client 两个库,其 requirements.txt
内容如下:
flask==1.1.2
prometheus-client==0.8.0
运行 flask
我们先使用 flask web 框架将 /metrics
接口运行起来,再往里面添加指标的实现逻辑。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask
app = Flask(__name__)
@app.route('/metrics')
def hello():
return 'metrics'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
打开浏览器,输入 http://127.0.0.1:5000/metrics
,按下回车后浏览器显示 metrics 字符。
编写指标
Prometheus 提供四种指标类型,分别为 Counter,Gauge,Histogram 和 Summary。
Counter
Counter 指标只增不减,可以用来代表处理的请求数量,处理的任务数量,等。
可以使用 Counter
定义一个 counter 指标:
counter = Counter('my_counter', 'an example showed how to use counter')
其中,my_counter
是 counter 的名称,an example showed how to use counter
是对该 counter 的描述。
使用 counter 完整的代码如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask, Response
from prometheus_client import Counter, generate_latest
app = Flask(__name__)
counter = Counter('my_counter', 'an example showed how to use counter')
@app.route('/metrics')
def hello():