You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Grafana中实现支持risk标签过滤及全Namespace的CPU用量查询?

问题:Grafana PromQL实现Risk标签过滤+全量Namespace CPU统计

现有配置

原PromQL查询

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_query变量通过label_values(kube_namespace_labels, label_risk)获取所有risk标签值;开启「Include All option」后,选择「全部」返回无数据,仅移除{label_risk="$risk_query"}才能查看全量数据,但会丢失过滤功能。

解决方案

1. 调整变量配置

  • 编辑risk_query变量,确保「Include All option」已开启
  • 自定义值输入.*,显示名称设为「全部」(该正则表达式可匹配任意risk标签值,包括空)

2. 修改PromQL查询

调整后的查询同时支持:选择具体risk标签值时过滤对应Namespace,选择「全部」时包含所有Namespace(包括无risk标签的),并将无标签的Namespace归为「未标记」组:

sort_desc(
sum by (label_risk) (
  # 给所有Namespace补全label_risk标签,无标签的设为"未标记"
  max by (namespace, label_risk) (
    kube_namespace_labels
    or on(namespace) group_left(label_risk)
    kube_namespace_labels * 0 + 1
    * on() group_left(label_risk) vector("未标记")
  )
  # 根据变量值过滤risk标签(选全部时匹配所有)
  and on(label_risk) group_left(namespace)
  vector(1) unless label_risk !=~ "$risk_query"
  # 关联CPU用量数据
  * on(namespace) group_right(label_risk)
  sum by (namespace) (avg_over_time(namespace:container_cpu_usage:sum{}[$__range]))
))

逻辑说明

  • 补全标签:通过or语句给没有risk标签的Namespace添加label_risk="未标记"标签,确保所有Namespace都能被统计
  • 条件过滤:用label_risk !=~ "$risk_query"实现动态过滤——选择具体标签值时仅保留对应Namespace;选择「全部」时,.*匹配所有标签(包括"未标记"),返回全量数据
  • 关联聚合:最后关联CPU用量数据,按label_risk聚合并排序

内容的提问来源于stack exchange,提问作者wwillfred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:13:19