包括未定义过滤标签的命名空间的指标

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

我在 Grafana 中有一个 PromQL 查询,它返回 Kubernetes 集群中所有命名空间的 CPU 使用情况,由名为

risk
的命名空间标签聚合:

sort_desc(
sum(
max(kube_namespace_labels{label_risk="$risk_query"}) by (label_risk, namespace)
*
on(namespace) group_right(label_risk)
sum by (namespace)
(avg_over_time(namespace:container_cpu_usage:sum{}[$__range]))) BY (label_risk))

如您所见,查询是通过 Grafana 查询变量

risk_query
进行过滤的,其定义如下:

label_values(kube_namespace_labels, label_risk)

在某种程度上,此查询按预期运行:仪表板的用户可以在下拉菜单中选择任何现有的

risk
命名空间标签值,他们将看到
risk
标签设置为的所有命名空间的 CPU 使用率该特定值。

问题是用户还必须为此变量提供一个可用的“全部”选项,以便查询返回所有命名空间的 CPU 使用情况,甚至是那些没有定义

risk
标签的命名空间。不幸的是,无论我们使用
risk_query
还是
<blank>
的自定义所有值,对
""
变量使用“包含全部选项”都会返回“无数据”。我能弄清楚如何包含所有命名空间的 CPU 使用情况的唯一方法是从查询中完全删除
{label_risk="$risk_query"}
,但这使得过滤变得不可能。

总之,如何保留过滤此查询的功能,同时允许用户在需要时查看所有命名空间的 CPU 使用情况?

kubernetes prometheus grafana promql
1个回答
0
投票

感谢@valyala为我指明了解决这个问题的正确方向。

首先,在 Grafana 中定义

risk_query
查询变量时,使用
.*
作为“自定义所有值”。

其次,像这样定义查询:

sort_desc(
sum(
max(kube_namespace_labels{label_risk=~"$risk_query"}) by (label_risk, namespace)
*
on(namespace) group_right(label_risk)
sum by (namespace)
(avg_over_time(namespace:container_cpu_usage:sum{}[$__range]))) BY (label_risk))

当用户为查询变量

risk
选择“全部”选项时,这将允许查询返回所有命名空间(甚至是那些未定义
risk_query
标签的命名空间)的 CPU 使用情况。

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