跨多个实例查询 prometheus 计数器

Posted

技术标签:

【中文标题】跨多个实例查询 prometheus 计数器【英文标题】:Query prometheus counter across multiple instances 【发布时间】:2021-07-09 08:18:51 【问题描述】:

我得到了几个暴露 Prometheus 计数器的实例,并希望汇总一段时间内的所有值。我一直在尝试很多不同的东西,但都无法奏效。

假设我的指标名称是 request_total。该指标具有pathstatus_code 的方面。我的目标是得到这个计数器的总和,而不用它的任何方面过滤它。如果我运行sum by (instance) (request_total),我会从 Prometheus 得到以下图表:

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

我对 Prometheus 还很陌生,但我希望计数器实际上不会被重置并且会更好地累积。你能帮我告诉我这里缺少什么吗?

提前致谢

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

您好,尼尔,谢谢您的回答。现在我明白为什么我会得到这个结果。你知道我应该查询什么来获得一段时间内的累积值吗?就像在我的示例中得到一个值为 15、16、18 的图表。提前致谢 @vesna IIRC 执行以下操作:sum(rate(request_total[5m])) 将在 5 分钟的时间窗口内为您提供每秒平均请求数 如果您使用 Prometheus UI,您可以切换到“图形”模式,然后您还可以设置要查看多长时间的偏移量 好吧,我实际上弄清楚了我的问题来自哪里。问题是我的计数器在启动时没有被重置,这与这个问题有关:github.com/prometheus/prometheus/issues/1673。我从这个问题中选择了一个解决方法,它似乎运作良好。非常感谢您花时间回答我的问题!

以上是关于跨多个实例查询 prometheus 计数器的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus 按标签查询范围向量

prometheus rules

如何在 Prometheus 中一次调用执行多个查询

如何使用联合从多个 Prometheus 实例(每个使用 instance="localhost:9090")中收集 Prometheus 的指标

Prometheus FAQ

检索跨多个列的不同计数