Prometheus Python Client
用于服务器和容器等生产信息监控。
1. Install the client:
pip install prometheus-client
2. 运行该py,得到相关的信息
from prometheus_client import start_http_server, Summary
import random
import time
# Create a metric to track time spent and requests made.
REQUEST_TIME = Summary('request_processing_seconds', 'Time spent processing request')
# Decorate function with metric.
@REQUEST_TIME.time()
def process_request(t):
"""A dummy function that takes some time."""
time.sleep(t)
if __name__ == '__main__':
# Start up the server to expose the metrics.
start_http_server(8000)
# Generate some requests.
while True:
process_request(random.random())
启动服务IP
访问http://localhost:8000/以查看指标。
3. 提供4种类型指标
Counter, Gauge, Summary and Histogram(计数器、仪表、摘要和直方图)
counter
一直累加的计数器,不可以减少。counter适合用来记录访问总次数,累加值
定义它需要2个参数,第一个是metrics的名字,第二个是metrics的描述信息:
gauge
可增可减,可以任意设置,就代表了某个指标当前的值而已。
histogram
用来统计百分位的
summary
分桶和分桶计数
python客户端没有完整实现summary算法
from prometheus_client import Counter
c = Counter('my_failures', 'Description of counter')
c.inc() # Increment by 1
c.inc(1.6) # Increment by given value
# -*- coding: utf-8 -*-
from prometheus_client import Counter, Gauge, Summary, start_http_server, Histogram,ProcessCollector
import time
import random
ProcessCollector().collect()
# 定义4种metrics例子
c = Counter("cc", 'A counter')
g = Gauge('gg', 'A gauge')
h = Histogram('hh', 'A histogram', buckets=(-5, 0, 5))
s = Summary('ss', 'A summary', ['label1', 'label2']) # metrics名字, metrics说明, metrics支持的label
# 在线程中启动http服务, 供metrics抓取
start_http_server(8880)
while True:
# counter: 只增不减
c.inc(1000)
# gauge: 任意值
g.set(random.random())
# histogram: 任意值, 会给符合条件的bucket增加1次计数
h.observe(random.randint(-10, 10))
# summary:任意值, python client不支持summary的百分位统计, 其他语言的client也许支持, 但一般不建议用, 性能和场景都有局限
s.labels('a', 'b').observe(17)
time.sleep(1)
4进程收集
1.如何使用
Python 客户端会自动导出有关进程 CPU 使用率、RAM、文件描述符和开始时间的指标。命名空间和 pid 构造函数参数允许导出有关其他进程的指标
ProcessCollector(namespace='system', pid=1)
eg:
ProcessCollector(namespace='supervisord')
2.返回进程的参数信息
supervisord_process_virtual_memory_bytes 3.38071552e+08虚拟内存大小(以字节为单位)
supervisord_process_resident_memory_bytes 1.4118912e+07驻留内存大小(以字节为单位)
supervisord_process_start_time_seconds 1.64171996791e+09进程的开始时间(以秒为单位)
supervisord_process_cpu_seconds_total 0.09999999999999999用户和系统 CPU 总时间(以秒为单位)。
supervisord_process_open_fds 7.0打开文件描述符的数量。
supervisord_process_max_fds 1024.0打开文件描述符的最大数量。
5.扩展,思考
from flask import Flask
from werkzeug.middleware.dispatcher import DispatcherMiddleware
from prometheus_client import make_wsgi_app
# Create my app
app = Flask(__name__)
# Add prometheus wsgi middleware to route /metrics requests
app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
'/metrics': make_wsgi_app()
})
文档中有写到flask和promethus的集成,
在利用fastapi的继承者发展,发现目前暂无方法可利用
如利用,只能将数值传入,并编写相关的参数信息。
6流量
MultiProcessCollector