天天看点

python 编写 promethues exporter

promethues 服务中记录数据

promethues 支持的数据类型

  • counter:一个计数器是代表一个累积指标单调递增计数器,它的值只能增加或在重新启动时重置为零。
  • GauGge:表示单个数值,可以任意地上升和下降的度量。常用于测量值,如温度或当前内存使用情况,但也可用于可以上下的“计数”,例如并发请求的数量。
  • Summary:摘要采样观察(通常是请求持续时间和响应大小等)
  • Histogram:跟踪存储桶中事件的大小和数量。这允许分位数的可聚合计算。
  • 下面是python prometheus_client库 示例
counter
  • 一直累加的计数器,不可以减少,只有服务重启才能清零
  • 前面两个参数必填,第一个是名字,第二个是描述,第三个是标签(选填)
  • 只有inc()方法,默认加1
GauGge
  • 参数与counter类型一致
  • 有三个方法
    • inc() #默认+1
    • dec() #默认-1
    • set() #设置具体数值(float)
demo
import random

from prometheus_client import Counter,Gauge,start_http_server
from flask import Flask,request
from wsgiref.simple_server import make_server

app = Flask(__name__)
# 使用Counter类型数据,只能递增,不能递减,只能重启服务的时候清零,第一个参数是名称,第二个参数是说明,第三个参数是标签名称
c = Counter('Counter_test','this is test server',('url','name'))
http_request_total  = Counter('http_request_total','request request total of the host',['url'])
# 使用Gauge类型数据,可变大变小,第一个参数是名称,第二个参数是说明,第三个参数是标签名称
http_request_speed  = Gauge('http_request_speed','request request speed',['url'])

@app.route('/')
def index():
    # 标签需要写上去,每次加1
    c.labels('127.0.0.1','activt').inc()
    # 每次加10
    http_request_total.labels('127.0.0.1').inc(10)
    num = random.random()
    # 每次的数据是可大可小的num
    http_request_speed.labels(request.base_url).set(num)
    return 'render_template("index.html")'
        
if __name__ == "__main__":
    # 开启promethues web服务,等待promethues服务器过来抓取数据
    start_http_server(8032)

    # 开启web服务,接受请求,统计数据
    httpd = make_server('0.0.0.0', 8012, app )
    httpd.serve_forever()


# 返回的结果
# Counter_test_total{name="activt",url="127.0.0.1"} 6.0  ------这是统计Counter数据
# http_request_total{url="127.0.0.1"} 60.0 -----这是统计Counter数据
# http_request_speed{url="http://127.0.0.1:8012/"} 0.6473488224134477  ---Gauge数据