带有 sum by(status) 的 Prometheus 查询尽管单个查询有效,但在组合查询中没有产生任何结果

问题描述 投票:0回答:1

我在 Prometheus 查询中遇到一个特殊问题,即组合两个查询会导致没有数据,即使每个单独的查询都返回结果。目标是计算 1 小时内不同状态的任务数量差异。这是组合查询:

sum by(status) (increase(number_of_tasks_total{queue=~"$queuename", kubernetes_namespace=~"$namespace", status="unique"}[1h])) - on(status) sum by(status) (increase(number_of_tasks_total{queue=~"$queuename", kubernetes_namespace=~"$namespace", status="enqueued"}[1h]))

期望的是,在 sum by(status) 之后,唯一剩下的标签应该是 status,从而允许减法运算正确工作。但是,我通过这个组合查询没有得到任何结果。

要点:

每个单独的查询部分都可以正常工作并返回数据。 这个问题似乎与 sum by(status) 后的标签不匹配有关,但我不确定为什么会发生这种情况,因为 status 应该是聚合后剩下的唯一标签。 查询中使用了变量 $queuename 和 $namespace,它们似乎按预期运行。 问题:

当 sum by(status) 应确保仅存在状态标签时,为什么会出现标签不匹配?
Prometheus 中是否存在任何隐藏标签或隐式行为可能导致此意外结果?
增加函数是否会以一种不立即明显的方式影响标签?
任何有关如何调试此问题的见解或建议将不胜感激!

prometheus grafana
1个回答
0
投票

您的查询问题在于操作数的标签状态不匹配:LHS 产生

status="unique"
,RHS -
status="enqueued"

当您编写

on(status)
时,您指示 Prometheus 仅使用列表中的标签来匹配操作数(忽略所有其他标签),但这种匹配是通过标签值的完全相等来完成的。

因此在您的查询中应使用

on()
来代替。

© www.soinside.com 2019 - 2024. All rights reserved.