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

PromQL按instance分组时如何关联获取对应节点CPU核心容量指标

PromQL跨指标关联匹配节点属性的解决方案

核心问题说明

你遇到的核心冲突是两组指标的instance标签归属完全不同:左侧node_cpu_seconds_total的instance对应node exporter的服务地址,右侧kube_node_status_capacity_cpu_cores的instance对应kube-state-metrics的服务地址,无法直接通过on(instance)关联,需要基于节点名称作为公共关联键实现跨指标匹配。


可用解决方案

方案1:基于node_uname_info中转关联(无需修改Prometheus配置)

node exporter默认暴露的node_uname_info指标自带nodename标签,值与Kubernetes节点名称完全对应,可作为中转标签实现两次关联,直接可用的查询语句如下:

(
  (1 - (
    avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[15s])) 
    * on(instance) group_left(nodename) node_uname_info
  )) * 0.007 + 0.23
) * 165 * 1.125 
* on(nodename) group_left() kube_node_status_capacity_cpu_cores

逻辑说明:

  • 第一次关联on(instance) group_left(nodename):以instance为匹配键,给左侧的CPU使用率指标附加对应节点的nodename标签
  • 第二次关联on(nodename) group_left():以节点名为匹配键,将对应节点的CPU核心数指标值乘入最终计算结果,完全规避instance标签不匹配的问题

方案2:提前注入统一节点标签(查询性能更优)

如果需要频繁做这类节点级指标关联,建议修改Prometheus抓取配置,给node exporter和kube-state-metrics的抓取任务都注入统一的节点名标签,示例relabel配置如下:

relabel_configs:
  - source_labels: [__meta_kubernetes_pod_node_name]
    target_label: k8s_node_name

配置完成后所有相关指标都会带k8s_node_name标签,后续查询可以直接用该标签关联,语句更简洁,查询效率更高:

(
  (1 - avg by (k8s_node_name) (rate(node_cpu_seconds_total{mode="idle"}[15s])))
  * 0.007 + 0.23
) * 165 * 1.125
* on(k8s_node_name) group_left() kube_node_status_capacity_cpu_cores

注意事项

如果关联时出现匹配失败的情况,可先检查两个指标的节点名格式是否一致(比如大小写、域名后缀差异),可以用label_replace函数对节点名做格式统一后再关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:15:00