停止在 python 的 prometheus_client 中抓取默认指标

Posted

技术标签:

【中文标题】停止在 python 的 prometheus_client 中抓取默认指标【英文标题】:Stop scraping of default metric in prometheus_client in python 【发布时间】:2021-11-16 09:12:30 【问题描述】:

我正在集成 prometheus 以从我的应用程序中抓取自定义指标。但是,我收到了许多默认启用的不需要的指标。有没有办法禁用这些指标,以便只收集我想要的自定义指标。

我正在使用的 prometheus 客户端的参考 - https://github.com/prometheus/client_python

【问题讨论】:

你说的是process_cpu_seconds_total之类的吗?请添加一些示例。 是的。这些指标 【参考方案1】:

虽然在我看来这些是有用的指标,但您可以使用 REGISTRY.unregister() 删除它们:

from time import sleep
import prometheus_client as prom

prom.REGISTRY.unregister(prom.PROCESS_COLLECTOR)
prom.REGISTRY.unregister(prom.PLATFORM_COLLECTOR)
prom.REGISTRY.unregister(prom.GC_COLLECTOR)

g = prom.Gauge("test", "test")

prom.start_http_server(port=9999)

while True:
    sleep(1)
    g.inc(1)

PROCESS_COLLECTORPLATFORM_COLLECTORGC_COLLECTOR 是默认指标的来源(您可以在包的 __init__.py 中找到它们)。默认注册表(prom.REGISTRY,即)在抓取时从它们那里收集指标,因此通过使用unregister(),您可以有效地使注册表忘记这些来源。

以上内容适用于使用默认注册表的情况。还有一种方法,就是实例化自己的注册表,到处传递:

from time import sleep
import prometheus_client as prom

reg = prom.CollectorRegistry()
g = prom.Gauge("test", "test", registry=reg)

prom.start_http_server(port=9999, registry=reg)

while True:
    sleep(1)
    g.inc(1)

测试两者你会得到这样的结果:

❯ curl localhost:9999/metrics
# HELP test test
# TYPE test gauge
test 3.0

【讨论】:

以上是关于停止在 python 的 prometheus_client 中抓取默认指标的主要内容,如果未能解决你的问题,请参考以下文章

在python中停止socketserver.ThreadingMixIn

为啥 Python 在加载 QML 文件时停止工作?

停止python启动的前端项目

为啥这个while循环在Python中永远不会停止

为啥我在无限循环中休眠的 python 脚本停止运行?

python Python - 在数字低于零之前停止一个数字