prometheus python客户端和工具库

pyprometheus的Python项目详细描述


Prometheus的非官方Python 2和3客户端

https://travis-ci.org/Lispython/pyprometheus.svg?branch=master

功能

  • 支持四种度量:counter、gauge、summary(不带分位数)和histogram。
  • InMemoryStorage(不要用于多处理应用程序)
  • uwsgi存储-进程之间共享度量
  • uwagi flush storage-通过flush调用与uwsgi sharedera同步度量
  • 时间装饰器
  • 时间上下文管理器

安装

要使用pyprometheus,请使用pip或简易安装:

pip install pyprometheus

easy_install pyprometheus

如何检测代码

仪表

量表是一个度量单位,表示一个可以任意上下移动的数值

from pyprometheus import Gauge
from pyprometheus import BaseRegistry, LocalMemoryStorage

storage = LocalMemoryStorage()
registry = CollectorRegistry(storage=storage)
gauge = Gauge("job_in_progress", "Description", registry=registry)

gauge.inc(10)
gauge.dec(5)
gauge.set(21.1)

实用程序:

gauge.set_to_current_time()   # Set to current unixtime

# Increment when entered, decrement when exited.
@gauge.track_in_progress()
def f():
    pass

with gauge.track_in_progress():
    pass


with gauge.time():
    time.sleep(10)

计数器

计数器是一个累积度量,它表示一个仅上升的数值

from pyprometheus import Counter
from pyprometheus import BaseRegistry, LocalMemoryStorage

storage = LocalMemoryStorage()
registry = CollectorRegistry(storage=storage)
counter = Counter("requests_total", "Description", registry=registry)

counter.inc(10)

小结

与柱状图类似,总结样本观察(通常是请求持续时间和响应大小)

from pyprometheus import Summary
from pyprometheus import BaseRegistry, LocalMemoryStorage

storage = LocalMemoryStorage()
registry = CollectorRegistry(storage=storage)
s = Summary("requests_duration_seconds", "Description", registry=registry)

s.observe(0.100)

计时代码实用程序:

@gauge.time()
def func():
   time.sleep(10)

with gauge.time():
   time.sleep(10)

直方图

直方图对观察结果(通常是请求持续时间或响应大小)进行采样,并在可配置的存储桶中对其进行计数。它还提供所有观测值的总和。

from pyprometheus import Summary
 from pyprometheus import BaseRegistry, LocalMemoryStorage

 storage = LocalMemoryStorage()
 registry = CollectorRegistry(storage=storage)
 histogram = Histogram("requests_duration_seconds", "Description", registry=registry)

 histogram.observe(1.1)

计时代码实用程序:

@histogram.time()
def func():
   time.sleep(10)

with histogram.time():
   time.sleep(10)

标签

所有度量都可以有标签,允许对相关时间序列进行分组。

示例:

from pyprometheus import Counter
c = Counter('my_requests_total', 'HTTP Failures', ['method', 'endpoint'])
c.labels('get', '/').inc()
c.labels('post', '/submit').inc()

或标记为关键字参数:

from pyprometheus import Counter
c = Counter('my_requests_total', 'HTTP Failures', ['method', 'endpoint'])
c.labels(method='get', endpoint='/').inc()
c.labels(method='post', endpoint='/submit').inc()

存储量

当前库支持2个存储:LocalMemoryStorage和UWSGIStorage

每个注册表都必须有指向存储的链接:

from pyprometheus import BaseRegistry, LocalMemoryStorage

storage = LocalMemoryStorage()
registry = CollectorRegistry(storage=storage)

使用本地内存存储

将样本存储到应用程序内存的简单存储器。它可以和线一起使用

from pyprometheus import BaseRegistry, LocalMemoryStorage

storage = LocalMemoryStorag()

使用uwsgistorage

uwsgistorage允许使用uwsgi sharedarea在进程之间同步度量。:

from pyprometheus.contrib.uwsgi_features import UWSGICollector, UWSGIStorage

SHAREDAREA_ID = 0
storage = UWSGIStorage(SHAREDAREA_ID)

还需要配置UWSGI sharedead页面

导出

库中有一些帮助程序可导出度量值

文本格式

您可以将注册表转换为文本格式:

from pyprometheus import BaseRegistry, LocalMemoryStorage
from pyprometheus.utils.exposition import registry_to_text
from pyprometheus import Gauge

storage = LocalMemoryStorage()
registry = CollectorRegistry(storage=storage)
g = Gauge('raid_status', '1 if raid array is okay', registry=registry)
g.set(1)
print(registry_to_text(registry))

文本文件导出

这对于监视cronjobs或编写cronjobs以公开有关计算机系统的度量很有用。

from pyprometheus import BaseRegistry, LocalMemoryStorage
from pyprometheus.utils.exposition import registry_to_text, write_to_textfile
from pyprometheus import Gauge

storage = LocalMemoryStorage()
registry = CollectorRegistry(storage=storage)
g = Gauge('raid_status', '1 if raid array is okay', registry=registry)
g.set(1)
write_to_textfile(registry, "/path/to/file/metrics.prom")

您可以将text file collector配置为使用生成的文件。

待办事项

我们计划执行的一些功能:

  • []添加mmap存储
  • []为异步框架添加功能
  • []优化UWSGI存储字节板
  • []添加分位数

示例项目

我们创建example project来显示在实际项目中使用pyprometheus的热度。

贡献

forkhttps://github.com/Lispython/pyprometheus/,创建提交并将请求拉到develop

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java从SOAP响应获取值   prolog中不允许使用java StAX解析器内容   JAVA项目中,创建一个由4行11列组成的显示表   java原子写入Spring可变bean   完整的worddatabase for JavaApp检查一个单词是否是一个合法的单词,在这种情况下SQL是否合适?   java如何将数组字节转换为组织。w3c。多姆。文件   运行Spring MVC应用程序时出现java JBoss错误   java为什么scanner类与BufferedReader相比需要较长的时间   java jaxb2mavenplugin仅执行第一次执行   java有什么方法可以使活动在单击每个按钮时做出不同的反应?   对java开发人员学习数据结构和算法有何建议   lambda我对java函数签名有疑问   java使用Maven创建三层应用程序   java Hadoop分布式文件系统是否像Google文件系统一样支持任何更新操作?   按下按钮后,swing Java Key事件不会执行   java JPA Hibernate删除实体关系中的孤立项   java将负数输入到数字反转程序中   java在OpenCV中无阻塞地从回调方法获取图像