跨多个实例查询普罗米修斯计数器

Query prometheus counter across multiple instances

我有几个实例公开了一个普罗米修斯计数器,我想汇总特定时间段内的所有值。我一直在尝试很多不同的东西,但无法正常工作。

假设我的指标名称是 request_total。此指标具有 pathstatus_code 方面。我的目标是获得该计数器的总和,而不按其任何方面进行过滤。如果我 运行 sum by (instance) (request_total),我从普罗米修斯得到以下图表:

正如我们所见,我的计数器似乎对每个实例都是正确的。但是,如果我尝试将所有这些值与 sum (request_total) 相加,我会得到以下结果:

我是 Prometheus 的新手,但我希望计数器实际上不会被重置并且可以更好地累积。你能帮我告诉我我在这里缺少什么吗?

提前致谢

sum(request_total) 应该可以工作并显示所有实例的结果,根据你的图表,它确实是这样做的:

直到上午 8 点 30 分,有两个实例报告了 4 个和 11 个请求,总共 15 个,您可以在第二张图中看到。

从上午 8:33 到 8:42am 只有一个实例报告一个请求,然后另一个实例开始报告一个请求,在第二个累积图上显示为从 1 到 2。

普罗米修斯counters are periodically reset. If you need to get the total counter increase across multiple time series with graceful handling of counter resets, then wrap increase() function into sum()就可以了。例如,以下查询将 return 去年的请求总数:

sum(increase(requests_total[1y]))

请注意,此查询需要在当前时间结束的 year-long 时间范围内加载和扫描原始样本。所以它可能很慢。您可以根据需要调整方括号中的lookbehind window。有关可能的持续时间,请参阅 these docs

另请注意,Prometheus 可能 return 来自 increase() 时间序列整数样本的小数结果。这是由于外推 - 请参阅 this issue for details. This issue has been solved in MetricsQL - see this article and this comment for technical details. MetricsQL also provides running_sum 函数,该函数可用于绘制计数器总和的累积增长。例如,下面的查询 return 是一条线,它从图表左侧的 0 开始,并根据所有 requests_total 系列的总和的累积增加量在选定的持续时间内增加,例如它 returns 在选定时间范围内的累计请求数:

running_sum(sum(increase(requests_total)))