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

Prometheus查询K8s集群节点CPU利用率报错:多对多匹配不允许

解决Prometheus查询K8s节点CPU利用率的多对多匹配错误

错误原因

错误的核心是:查询右侧的machine_cpu_cores指标经label_join生成kubernetes_node标签后,存在**多个时间序列对应同一个kubernetes_node**的情况。Prometheus的二元运算(如除法)要求匹配标签至少在一侧是唯一的,否则会触发多对多匹配的禁止报错。

修正后的查询语句

方案1:保留kubernetes_node标签匹配

sum by (kubernetes_node) (rate(node_cpu_seconds_total{mode!~"idle|wait|iowait"}[5m]))
/ on (kubernetes_node) max by (kubernetes_node) (label_join(machine_cpu_cores, "kubernetes_node", "", "kubernetes_io_hostname"))
* 100 > 80

方案2:直接使用node标签匹配(更简洁,推荐)

如果node_cpu_seconds_total本身带有node标签(kubelet暴露的指标通常默认包含),可以跳过label_join,直接用node标签关联:

sum by (node) (rate(node_cpu_seconds_total{mode!~"idle|wait|iowait"}[5m]))
/ on (node) max by (node) (machine_cpu_cores)
* 100 > 80

关键修改说明

  • 对右侧的machine_cpu_cores用max by (标签名)聚合:每个节点的CPU核心数是固定值,同一节点下的多个machine_cpu_cores序列值完全一致,聚合后每个节点仅保留一个时间序列,满足Prometheus对匹配标签唯一性的要求。
  • 可选添加group_left():若需明确指定左连接(左侧每个序列匹配右侧一个序列),可在on (标签名)后补充该指令,示例:
    sum by (node) (rate(node_cpu_seconds_total{mode!~"idle|wait|iowait"}[5m]))
    / on (node) group_left() max by (node) (machine_cpu_cores)
    * 100 > 80
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:45:03