费率函数真的能随时间推移得出平均值吗?
我通过
向端点发送20个请求 ab -n 20 http://0.0.0.0:8001/
因此,我使用的费率函数的指标超过20s,因此应该给我1个值,因为在过去20s中有20个请求。
所以20 / 20 = 1
却提供了值 2 。
我相信两者之间没有任何关系 scrape_interval 和 evaluation_interval 作为结果,我的两个间隔均为 10s
答案 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的推断。