我正在尝试查询自定义计数器Promethues指标,但似乎找不到正确的查询。我想查询最后一分钟的发生次数。为此,我尝试了sum(increase(my_counter[1m]))
和sum(rate(my_counter[1m]))
。似乎都没有给出准确的值。我该如何查询呢?
答案 0 :(得分:0)
您不会从普罗米修斯那里获得准确的值(就您所期望的而言)。
当前的问题是PromQL的increase()
和rate()
使用外推法而不是实际可用数据。有关详情,请参见this Prometheus issue。有许多解决方法,但都不是理想的。 (例如,您可以在所需的时间间隔 plus scrape_interval
中进行增加,然后通过除以该时间间隔的长度再乘以所需的时间间隔来进行调整。)
更深层的问题是混叠,对此您无能为力。基本上,因为Prometheus每隔x
秒/分钟对您的计数器进行一次采样,所以您实际上无法确切知道在任何时间范围内的增加量,除了准确地收集这些样本的瞬间之间。 (而且,当您向Prometheus索要rate(x[1m])
时,您实际上是在要求将 now 和 now 之间精确地减去1分钟,这可能会不一致以及收集到的所有样本。)更不用说由于网络延迟,负载等原因造成的抖动。
尽管这不是(IMHO)PromQL对rate()
和increase()
的实现的借口,并且您应该能够获得比Prometheus给您的更好的数字。 (再次,请参见上面链接的Prometheus问题。)