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

如何在Prometheus中将instance标签重标记为节点主机名?

解决Prometheus抓取node_exporter后Grafana显示IP而非主机名的问题

我之前也遇到过一模一样的情况——用IP配置target后,Grafana里的instance全是冷冰冰的IP,根本分不清哪台是哪台。下面给你几种靠谱的解决方法,从简单到灵活都有:

方法1:静态配置直接指定主机名(最简单)

如果你的机器数量不多,主机名也不会经常变,直接在Prometheus的static_configs里给每个target加上instance标签就行,一步到位:

scrape_configs:
  - job_name: node_exporter
    static_configs:
      - targets: ["1.2.3.4:9100"]
        labels:
          instance: "web-server-01"  # 这里写实际主机名
      - targets: ["2.3.4.5:9100"]
        labels:
          instance: "db-server-01"
      - targets: ["3.4.5.6:9100"]
        labels:
          instance: "cache-server-01"

修改后重启Prometheus,Grafana里的instance就会直接显示你设置的主机名了。

方法2:用metric_relabel自动提取主机名(适合机器多的场景)

你提到用了重标记规则没效果,大概率是用错了配置项——要注意relabel_configs和metric_relabel_configs的区别:

  • relabel_configs是在"抓取目标"阶段处理(还没拿到指标数据),这时候根本拿不到node_exporter暴露的主机名标签;
  • metric_relabel_configs才是在"抓取到指标后"处理,能读取到node_uname_info里的nodename(也就是主机名)。

正确的配置应该是这样:

scrape_configs:
  - job_name: node_exporter
    static_configs:
      - targets:
        - 1.2.3.4:9100
        - 2.3.4.5:9100
        - 3.4.5.6:9100
    # 重点:用metric_relabel_configs修改指标的instance标签
    metric_relabel_configs:
      # 匹配node_uname_info指标,把nodename的值替换到instance标签
      - source_labels: [__name__, nodename]
        regex: node_uname_info;(.*)
        target_label: instance
        replacement: $1
      # 可选:把原来的IP:port标签保留为original_instance,方便排查问题
      - source_labels: [instance]
        target_label: original_instance

重启Prometheus后,所有node_exporter的指标都会自动把instance替换成主机名,原来的IP会存在original_instance里(如果配置了的话)。

方法3:Grafana层面处理(不用改Prometheus)

如果不想动Prometheus的配置,也可以直接在Grafana里做文章:

  1. 编写查询时,用group_left关联node_uname_info指标(它包含主机名nodename):
# 以CPU使用率为例,关联nodename标签
100 - (avg by (instance, nodename) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)
  1. 在面板的"图例选项"里,把图例格式改成{{nodename}},而不是默认的{{instance}}。

这样Grafana的图表就会显示主机名,完全不用修改Prometheus配置。

为什么你的重标记规则没效果?

大概率是这两个原因:

  • 用了relabel_configs而不是metric_relabel_configs,时机不对,拿不到nodename标签;
  • 正则表达式写得有问题,比如没正确匹配node_uname_info的指标名和nodename值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:40:58