prometheus-client

Prometheus Python Client

https://prometheus.io/

普罗米修斯-客户 ·PyPI

用于服务器和容器等生产信息监控。

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

你可能感兴趣的:(prometheus-client)