【问题标题】:How can I compute the difference between two PromQL queries when I have null values?当我有空值时,如何计算两个 PromQL 查询之间的差异?
【发布时间】:2021-06-16 21:44:19
【问题描述】:

我在 Grafana 中有两个 PromQL 查询。

查询一:max_over_time(counter{label="label1"}[5m])

查询 2:max_over_time(counter{label="label1"}[5m] offset 10m)

两个查询中的标签完全匹配,所以我认为我不需要使用on() 函数。 我想计算这些查询之间的差异……

查询 3:max_over_time(counter{label="label1"}[5m]) - max_over_time(counter{label="label1"}[5m] offset 10m)

查询 3 返回的结果向量在大多数情况下是正确的。例如,如果查询 1 的结果向量在第 i 个位置有一个值为 1500 的条目,而查询 2 的结果向量在第 i 个位置有一个值为 1000 的条目。那么第 i 个结果向量在查询 3 中的位置变为 1500-1000= 500。

但是当查询 1 的值为 1000,查询 2 的值为 null(格式为 0)时,结果变为 1000 - null = null。

在这种情况下,我希望结果为 1000。我试图将所有空值转换为零,但根据我所读到的内容,Prometheus 似乎已经将空值视为零。我也尝试过使用vector(0):

(max_over_time(counter{label="label1"}[5m]) or vector(0)) - (max_over_time(counter{label="label1"}[5m] offset 10m) or vector(0))

但这不会改变结果。

这是从 Grafana 的查询检查器中获得的所有三个查询结果的子集。

Correct results for the difference query

当有非空值时,我得到了差异查询的正确结果。但是,一旦出现空值,就无法再计算差值。

Incorrect difference values when there are null values. 1000-null should be 1000 not null.

非常感谢一些有用的提示。提前致谢。

【问题讨论】:

    标签: prometheus grafana promql


    【解决方案1】:

    试试这个查询:

    sum(max_over_time(counter{label="label1"}[5m]) or vector(0)) - sum(max_over_time(counter{label="label1"}[5m] offset 10m) or vector(0))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      • 2020-05-13
      相关资源
      最近更新 更多