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

K8s集群中如何在Grafana表格展示多相似PromQL查询结果

解决Grafana中按节点展示多状态Pod统计表格的问题

问题背景

Prometheus和Grafana部署在Kubernetes集群中,希望将多个仅标签过滤条件不同的关联查询结果,合并为同一表格展示——按节点统计各状态(Running、Pending、Failed等)的Pod数量,预期表格格式如下:

NodeRunningFailedPending...
node-11010...
node-21221...

此前尝试配置多个查询并使用Merge转换时,出现错误:Merge has no effect when applied on a single frame,无法实现预期效果。


错误原因说明

Merge has no effect when applied on a single frame提示的含义是:当前仅存在单个数据帧(比如仅执行了一个查询,或多个查询的结果被自动合并为一个帧),而Merge转换的作用是合并多个独立的数据帧,因此无法生效。


最优解决方案:单PromQL查询+Pivot转换

无需创建多个查询,通过优化PromQL语句配合Grafana的Pivot转换,即可直接生成目标表格,步骤如下:

1. 编写统计用PromQL

使用count函数结合标签关联,一次性获取所有节点各状态的Pod数量:

count by(node, phase) (
  kube_pod_status_phase{phase=~"Running|Pending|Failed"} != 0
  * on(pod) group_left(node) kube_pod_info
)
  • 逻辑说明:通过* on(pod) group_left(node)将kube_pod_info中的node标签关联到kube_pod_status_phase指标;
  • count by(node, phase)按节点和Pod状态分组统计数量;
  • 可替换phase=~"..."为自定义变量(如$pod_phase),实现状态列的动态切换。

2. 配置Grafana表格与转换

  1. 创建一个表格类型的面板,将上述PromQL作为唯一查询;
  2. 进入「转换」标签页,添加Pivot转换;
  3. 配置Pivot参数:
    • 「Row field」:选择node(作为表格的行,对应Node列);
    • 「Column field」:选择phase(作为表格的列,对应Running、Failed等状态);
    • 「Value field」:选择Value(对应统计的Pod数量);
  4. 可选:在表格面板的「选项」中,将「空值处理」设置为0,确保无对应状态Pod的节点显示0而非空值。

备选方案:多查询+Merge转换(不推荐)

如果坚持使用多查询方式,需确保每个查询返回独立的数据帧,再通过Merge合并:

  1. 为每个Pod状态创建单独查询,例如:
    • Running状态:count by(node) (kube_pod_status_phase{phase="Running"} != 0 * on(pod) group_left(node) kube_pod_info)
    • Failed状态:count by(node) (kube_pod_status_phase{phase="Failed"} != 0 * on(pod) group_left(node) kube_pod_info)
  2. 确保每个查询的结果都包含node标签和对应数值;
  3. 添加Merge转换,此时每个查询对应一个独立数据帧,Merge会自动按node标签合并为同一表格。

此方案缺点是查询数量随状态数增加而增多,维护成本高,性能不如单查询方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:23:09