普罗米修斯增加不处理进程重新启动

byt*_*223 4 monitoring metrics prometheus

我试图弄清楚 Prometheus 的increase()查询函数在进程重新启动时的行为。

当在 2m 间隔内有一个进程重新启动时,我查询:

sum(increase(my_metric_total[2m])) 
Run Code Online (Sandbox Code Playgroud)

我得到的值低于预期。

例如,在一个简单的实验中,我模拟了:

  • 3 lcm_restarts
  • 1 进程重启
  • 2 lcm_restarts

全部在 2 分钟的间隔内。

查询时:

sum(increase(lcm_restarts[2m])) 
Run Code Online (Sandbox Code Playgroud)

当我期待 5 时,我收到了 ~4.5 的值。

lcm_restarts 图

总和(增加(lcm_restarts[2m]))结果

有人可以解释一下吗?

And*_*gle 5

非常简洁且准备充分的第一个问题。请保持这种精神!

使用计数器时,用作rate()irate()并且还会increase()调整由于重新启动而导致的重置。除了顾名思义,该increase()函数不计算给定时间范围内的绝对增加,而是一种不同的写法rate(metric[interval]) * number_of_seconds_in_interval。该rate()函数采用系列中的第一个和最后一个测量值,并计算给定时间内每秒增加的量。这就是为什么即使您总是以完整数字增加,您也可能观察到非整数增加的原因,因为测量值几乎从来都不是恰好在间隔的开始和结束处。

有关这方面的更多详细信息,请查看函数prometheus 文档increase()。在强大的感知博客中也有一些关于在使用计数器时做什么和不做什么的很好的提示。

看看您的标签尺寸,我还认为计数器重置不适用于您构建的示例。有一个称为reason在重新启动之间更改的标签,因此创建了第二个时间序列(不继续现有的)。在这里,您基本上也总结了两个不同时间序列增加的速率,(对于它们自己)都发生了外推。

所以基本上你所做的没有任何问题,你只是不应该依赖于从 prometheus 中获取高度精确的数字来用于你的用例。