如何衡量 Prometheus 中计数器事件的每日发生率?

How can I measure the daily rate of a counter event in Prometheus?

我正在尝试计算每天的事件数(在我的示例部署中)。我目前正在做的是基于 pushgateway

的 HTTP API 发送以下计数器事件
# TYPE deployments_count counter
# HELP deployments_count Deployments Counter
deployments_count{label1="${label1}",label2="${label2}"} 1

我想在我的仪表板上计算的是在给定的一天发生了多少不同的事件(即部署)。

根据经验,我知道我每小时应该有超过 10 个事件(部署),但是当我执行以下查询时,我一直收到 0

rate(deployments_count[24h])

请注意,当给定事件(部署)发生时,我的计数器总是报告 1

首先,rate()函数计算计数器每秒的增长率。也就是说,即使您的计数器值是准确的,您也会得到 每秒(过去 24 小时内)发生的部署次数,而不是每天发生的次数。

如果你想计算过去24小时内的部署次数,有increase()函数:increase(deployments_count[24h]).

但是您当前的表达式产生 0 的原因是计数器值始终为 1。每次发生事件时都必须递增计数器(请参阅 Prometheus docs)。

也就是说,您必须以某种方式跟踪计数器的当前值并在每次部署时递增它,然后再将其推送到 Pushgateway,而不是仅在每个事件上推送 1。后一种方法不起作用,它看起来对 Prometheus 来说好像该值永远不会改变。


解决这个问题有两种可能的方法:

1.不使用 Pushgateway

您确定需要 Pushgateway 还是可以加入一个 Prometheus client library in your code? Check When to use the Pushgateway, and, in particular, a Pushgateway is not a distributed counter。本质上,Pushgateway 的用例适用于需要在终止前将指标存放在某个地方的临时作业。

如果您的代码永久 运行ning,另一方面,Prometheus 客户端库负责计数器递增逻辑并公开指标,以便 Prometheus 可以直接抓取它。

2。跟踪计数器值

如果您必须使用 Pushgateway,则需要跟踪当前计数器值以便递增它。您可以在您的代码中执行此操作,或者从 Pushgateway 本身查询当前值,递增它,然后将其推回。当有多个进程对计数器有贡献时(即并发更新、竞争条件),这两种方法 运行 都会出现问题。