【发布时间】: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