PromQL 查询之间的区别

Posted

技术标签:

【中文标题】PromQL 查询之间的区别【英文标题】:PromQL difference between queries 【发布时间】:2020-10-29 02:26:20 【问题描述】:

我是使用 Prometheus 的新手,我正在尝试理解一些事情。

我有一个 java web 应用程序,它公开了一个计数器,比如说“my_counter”。

以下查询有什么区别?

sum(increase(my_counter[1m]))

sum(increase(my_counter[3m]))

如果我在 1 小时的相同时间间隔内运行这些查询,为什么两者返回不同的结果?

我想要实现的是查看计数器在可配置的时间段内增加了多少。

谢谢。

附:我实际上是使用 Grafana 来运行查询并选择时间范围。

【问题讨论】:

【参考方案1】:

我假设“1 小时的相同时间间隔”意味着在运行显示的查询时,从时间范围控制面板中选择了完全相同的小时。

您的查询之间的区别在于它们查看的时间范围不同。第一个检查在过去 1 分钟期间 my_counter 增加了多少,第二个检查在过去 3 分钟期间 my_counter 增加了多少.

时间和计数器值的示例:

01:20:00 => my_counter: 0
01:21:00 => my_counter: 1
01:22:00 => my_counter: 2
01:23:00 => my_counter: 2
01:23:45 => my_counter: 4 (This is the moment of my_counter examination. Notice the time.)
在 01:23:45,第一个查询会查看 01:22:45 和 01:23:45 之间的 1 分钟时间范围,并且会显示增加约 2。 同时第二次查询会查看01:20:45到01:23:45这3分钟的时间段,会显示增加了4左右(因为三分钟前01:20:45 my_counter 的值仍然是 0)。

您在 Grafana 中看到的每个数据点都会发生同样的事情。增加查询被外推以覆盖整个时间范围,这意味着您可能还会看到非整数值。在这里你可以找到the actual documentation about the increase query function。

【讨论】:

您好,谢谢您的解释。我想我明白你所做的解释,但仍有一些不清楚的地方。 sum 函数应分别添加所有 1m 和 3m 的间隔。这意味着对于 1m,我将有 60 个值较小的区间,而 3m 将为我提供 20 个值较大的区间。尽管如此,所有这些的总和应该仍然是相同的。在您提供的示例中,总和在两种情况下都应返回 4。对吗?

以上是关于PromQL 查询之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

保姆级别的 PromQL 教程

Prometheus 查询 promql 以在同一字段上进行平均

查询、本机查询、命名查询和类型化查询之间的区别 [关闭]

两个Sql查询之间的区别[重复]

这两个mysql查询之间的区别?

GraphQL 查询和对象字段之间的编程区别是啥?