如果仪表可以充当计数器,为什么普罗米修斯既有计数器又有仪表?

时间:2019-11-02 18:31:50

标签: monitoring prometheus metrics

CounterGauge之间进行选择时,Prometheus documentation states that

  

要在计数器和量规之间进行选择,有一个简单的经验法则:   该值可以下降,这是一个量表。计数器只能上升(并且   重置,例如进程重新启动时。

它们似乎涵盖了重叠的用例:您可以使用只会不断增加的量规。那么,为什么还要首先创建“计数器”指标类型呢?为什么不简单地对两者都使用量规呢?

3 个答案:

答案 0 :(得分:2)

从概念上讲,仪表和计数器的用途不同

  • 量规通常代表一种状态,通常是为了检测饱和度。
  • 计数器的绝对值不是很有意义,真正的目的是使用irate/rate()increase() ...之类的函数来计算演化(通常是利用率)。

这些演化操作需要可靠地计算量规无法达到的增长,因为您需要检测该值的重置。

从技术上讲,计数器具有两个重要属性:

  1. 它总是从0开始
  2. 它总是增加(即代码中增加)

如果应用程序在两次Prometheus刮擦之间重新启动,则第二个刮擦的值可能小于前一个刮擦的值,并且可以恢复增加的值(之所以这样,是因为您总是会在最后一次刮擦和重置之间松开增加的值)。

一种简单的算法来计算从t1到t2的废料之间的计数增加:

  • 如果counter(t2) >= counter(t1),然后increase=counter(t2)-counter(t1)
  • 如果counter(2) < counter(t1)然后increase=counter(t2)

结论是,从技术角度来看,您可以使用仪表而不是计数器,前提是您在启动时将其重置为0,并且只能将其递增,但是任何违反合同的行为都会导致错误的值。

作为旁注,我还希望计数器实现使用无符号整数表示,而gauge则宁愿使用浮点表示。这对代码有一些小的影响,例如能够自动溢出到0的能力以及更好地支持当前cpus上的原子操作。

答案 1 :(得分:0)

对于计数器,您关心它的增长速度,而对于仪表,则关心实际值。尽管有一些指标(理论上)只会上升,但这并不能使它们反作用。

答案 2 :(得分:0)

在这方面的敏锐观察是:

<块引用>

Gauge 背后的感觉是:

量表是合适的 Iff SUM operation measurements 对任何时间间隔都没有意义

例如,如果哈勃太空望远镜正在观察它在天体扫描中观察到的 brightness of every star - 温度总和 - 将不会产生任何有价值的信息。

bank-balance 也类似。您每天的银行余额总和并不是一个有意义的财富指标。因此,为此使用gauge -gauge 中提供了avg over interval。


rate() fn 问题只是关于 rate() fn 的技术问题,而不是关于仪表和计数器。

罪魁祸首是 rate() 在检测重置方面过于聪明。似乎没有数学上的原因说明 simple-rate() 不能在规范中完成。