[在Counter
和Gauge
之间决定时,Prometheus documentation states that
要在计数器和量规之间选择,有一个简单的经验法则:如果该值可以下降,这是一个量表。计数器只能上升(并且重置,例如进程重新启动时。)
它们似乎涵盖了重叠的用例:您可以使用只会不断增加的量规。那么,为什么还要首先创建“计数器”指标类型呢?您为什么不简单地同时使用两者呢?
从概念上看,量具和计数器的用途不同
irate/rate()
,increase()
...等函数来计算演化(通常是利用率)>这些演化操作需要可靠地计算量规无法实现的增长,因为您需要检测值的重置。
技术上,计数器具有两个重要属性:
如果应用程序在两次Prometheus刮擦之间重新启动,则第二个刮擦的值可能小于前一个刮擦的值,并且可以恢复增加的值(之所以这样,是因为您总是会在最后一个刮擦和重置之间松动增加的值) 。
计算从t1到t2的废料之间的计数增加的简单算法是:
counter(t2) >= counter(t1)
,则是increase=counter(t2)-counter(t1)
counter(2) < counter(t1)
则为increase=counter(t2)
作为结论,从技术角度来看,您可以使用仪表而不是计数器,只要您在启动时将其重置为0并仅将其递增,但任何违反合同的情况都会导致错误的值。
作为旁注,我还期望计数器实现使用无符号整数表示,而gauge宁愿使用浮点表示。这对代码有一些小的影响,例如能够自动溢出到0的能力以及更好地支持当前cpus上的原子操作。
对于计数器,您关心它的增长速度,而对于压力计,您关心的是实际值。尽管有一些指标(理论上)只能上升,但这并不能使它们反作用。