Prometheus 如何把 instance 标签重标记(Relabel)为主机名?

用 relabel_configs 把 instance 标签的值改写为主机名:从 __address__ 提取 IP 段,或通过反向 DNS/元数据标签取主机名写入 instance。本文给出 static 与 K8s 两种场景的完整配置。

最佳实践
Prometheus 如何把 instance 标签重标记(Relabel)为主机名?封面

在 relabel_configs 里加一条规则:以地址或元数据为源,用正则提取主机名部分,写入 target_label: instance——之后所有指标的 instance 标签就显示主机名而不是 IP:端口。

场景一:去掉端口,只留 IP/主机

relabel_configs:
  - source_labels: [__address__]
    regex: '([^:]+):\d+'
    target_label: instance
    replacement: '$1'

192.168.1.10:9100 → instance 变为 192.168.1.10

场景二:K8s/云环境中用真实主机名

relabel_configs:
  - source_labels: [__meta_kubernetes_node_name]
    target_label: instance

云厂商 VM 用对应的元数据标签(如 __meta_ec2_tag_Name)。

场景三:static_configs 直接命名

static_configs:
  - targets: ['10.0.0.1:9100']
    labels: {instance: 'web-server-01'}

最省事——直接在配置里把 instance 写成主机名。

原理说明

relabel 在抓取前执行,改的是目标的身份标签;想在抓取后改指标标签用 metric_relabel_configs。改 instance 属于身份层面,用前者。

观测云对照

观测云 DataKit 采集的主机指标自动以主机名为对象标识,并支持通过全局标签与 hostname 映射配置自定义命名,无需手写 relabel 规则。

常见问题(FAQ)

Q:改了 instance 历史数据怎么办? instance 是序列身份的一部分,改名等于新序列——历史数据留在旧标签下,建议一次性规划好命名。

Q:正则捕获组怎么引用? replacement: '$1' 中的 $1 对应 regex 的第一个括号。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台