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

如何在Grafana查询中自动映射两个标签值,无需手动配置?

怎么自动把Prometheus里的Instance IP和节点名称对应上?

方法1:采集时直接把节点名称加到指标里(最省心)

修改Prometheus的采集配置,针对kubelet的job添加relabel规则,从K8s节点元数据里直接提取节点名称生成新标签。这样所有kubelet指标都会自带节点名称标签,完全不用手动维护映射关系。

配置示例:

scrape_configs:
  - job_name: 'kubelet'
    kubernetes_sd_configs:
      - role: node
    relabel_configs:
      # 从K8s节点元数据提取节点名称,存为node_name标签
      - source_labels: [__meta_kubernetes_node_name]
        target_label: node_name
      # 确保规则仅对kubelet job生效
      - action: keep
        source_labels: [job]
        regex: kubelet

配置完成后重启Prometheus,后续查询kubelet_runtime_operations_total时,每个指标都会带上node_name标签(值为devops-test-srv01这类节点名),直接用该标签过滤即可。

方法2:查询时动态关联两个指标(不用改采集配置)

如果无法修改Prometheus采集配置,可通过PromQL将kubelet指标与kube-state-metrics提供的节点指标关联,自动匹配IP和节点名。

查询语句:

kubelet_runtime_operations_total{job="kubelet", metrics_path="/metrics"}
* on(instance) group_left(node)
label_replace(kube_node_info{}, "instance", "$1", "address", "(.*):.*")

逻辑说明:

  • kube_node_info指标包含node(节点名)和address(节点IP+端口,如100.130.101.101:10250)标签
  • label_replace函数从address中提取IP部分,生成与kubelet指标一致的instance标签
  • on(instance) group_left(node)通过IP关联两个指标,将节点名标签附加到kubelet指标上

查询结果会同时包含原IP标签和节点名标签,按需使用即可。

方法3:Grafana里用变量自动关联(针对可视化场景)

如果用Grafana展示数据,可通过变量实现自动关联:

  1. 创建instance变量:查询语句用label_values(kubelet_runtime_operations_total{job="kubelet", metrics_path="/metrics"}, instance),获取所有IP列表
  2. 创建node_name变量:查询语句用label_values(kube_node_info{address=~"${instance}:.*"}, node),选中IP时自动匹配对应节点名

或者直接创建节点名变量,查询语句用label_values(kube_node_info, node),然后在指标查询中通过节点名反向匹配IP:

kubelet_runtime_operations_total{job="kubelet", metrics_path="/metrics", instance=~"${node_name:instance}"}

这种方式无需手动维护映射,新节点加入后会自动同步。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:38:14