费率函数是否真的会随着时间的推移提供普罗米修斯的平均值?

时间:2019-01-15 21:30:02

标签: prometheus promql

费率函数真的能随时间推移得出平均值吗?

我通过

向端点发送20个请求

ab -n 20 http://0.0.0.0:8001/

Snapshot

因此,我使用的费率函数的指标超过20s,因此应该给我1个值,因为在过去20s中有20个请求。

所以20 / 20 = 1却提供了值 2

我相信两者之间没有任何关系 scrape_interval evaluation_interval 作为结果,我的两个间隔均为 10s

1 个答案:

答案 0 :(得分:0)

如果您的抓取时间间隔是10秒,那么这是预期的。这种方法的工作方式是Prometheus在20s的间隔(相距10s)中获取2个样本,计算出差(20),将其外推到整个间隔(40),然后除以间隔的长度( 20)所以你得到2。

我也不喜欢这样做,I've been advocating也不希望实现更好的rate实现,该实现着眼于范围之前的最后一个样本和范围中的最后一个样本(因此,您将获得您的情况是20乘20,而不是10乘20或10乘0(取决于您何时查询)。但是到目前为止,它什么都没有。所以至少现在,欢迎加入俱乐部。

一种与Prometheus的实施相抵触的极其骇人听闻的方法是对它进行反向工程。例如。在您的情况下,可以在20秒内为您提供实际费率的表达式是:

rate(hello_worlds_total[30s]) / 30 * 20

即Prometheus将速率超过20秒,外推至30,然后撤消该外推。但这需要您了解刮擦间隔,并做一些数学运算才能撤销Prometheus的推断。