计数器的increase()与changes()函数

Nik*_*kin 6 prometheus

我有一个礼品证书应用程序,每当有人激活证书时,它就会增加 Prometheus 计数器。

现在我想在 Grafana 板上输入简单的数字,显示过去 24 小时激活了多少证书。

我可以通过increase(gift_certificates_activated_total[24h])查询来做到这一点,但它会给出浮点结果,例如105.01287565915334.

但我发现如果我使用更改函数,它会给出精确的整数结果。查询是:changes(gift_certificates_activated_total[24h])并且它正好显示 105。

文件说

对于每个输入时间序列,changes(v range-vector) 返回其值在提供的时间范围内变化的次数作为即时向量。

据我了解,它适合仪表指标类型来获取仪表指标值的变化次数,而不适合计数器。但它似乎也适用于计数器。它显示与查询相同的结果floor(increase(gift_certificates_activated_total[24h]))

Changes() 函数的使用是否合适?

val*_*ala 6

如果您确定计数器在两次刮擦之间保持不变或增加 1,则可以使用 Prometheus 中的函数changes()代替函数。increase()如果计数器增加超过 1,则changes()返回的结果将低于increase()

increase()由于插值,Prometheus 中的函数可能会返回整数计数器的小数结果。请在此处查看更多详细信息。

另请注意,Prometheus 中的changes(m[d])和可能会错过后视窗口之前的最后一个样本与窗口中的第一个点increase(m[d])之间的差异。d不过,上面提到的两个问题都在MetricsQL中得到了解决。(我是 MetricsQL 的作者)。