2

速率函数真的会随着时间的推移给出平均值吗?

我通过以下方式向端点发送 20 个请求

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

快照

所以,我使用 rate 函数的指标超过 20 秒,所以它应该给我 1 个值,因为在过去 20 秒内有 20 个请求。

因此20 / 20 = 1,但它提供了值2

我相信结果的scrape_intervalevaluation_interval之间没有关系 ,我的两个间隔都是10s

4

1 回答 1

2

如果您的抓取间隔是 10 秒,那么这是可以预期的。其工作方式是 Prometheus 在您的 20 秒间隔内获取 2 个样本(因为它们相隔 10 秒),计算差异 (20),将其外推到整个间隔 (40),然后除以间隔的长度 ( 20) 所以你得到 2。

我也不喜欢这样,我一直在提倡更好的rate实现,它查看范围之前的最后一个样本和范围中的最后一个样本(所以在你的情况下,你会在 20 秒内增加 20,而不是而不是在 10 秒内增加 20 或可能在 10 秒内增加 0,具体取决于您何时查询)。但到目前为止,这一切都没有发生。所以至少现在,欢迎来到俱乐部。

对抗 Prometheus 实现的一种非常骇人听闻的方法是对其进行逆向工程。例如,在您的情况下,将在 20 秒内为您提供实际速率的表达式是:

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

即 Prometheus 将速率超过 20 秒,将其推断为 30,然后您撤消该推断。但这需要您了解抓取间隔并进行数学运算以撤消 Prometheus 的推断。

于 2019-01-16T10:05:24.660 回答