Consul SD 常见标签用途对照表
本文档整理了 Prometheus 使用 consul_sd_configs 时常见的内部标签(__meta_consul_*)以及它们的用途,尤其适合 Blackbox Exporter 场景。
一、先说几个最容易混淆的标签
在 Consul SD + Blackbox 场景里,最常见、也最容易搞混的是这几个:
__meta_consul_service_address__meta_consul_service_port__address____param_targetinstance__meta_consul_tagged_address_lan
它们并不是一回事。

二、常见标签用途总表
| 标签名 | 来源 | 典型值 | 是否是内部标签 | 主要用途 | 常见误区 |
|---|---|---|---|---|---|
__meta_consul_service |
Consul 服务名 | https_probe |
是 | 区分 Consul 注册的服务名 | 不是目标地址 |
__meta_consul_service_address |
Consul Service Address | 10.10.1.20 |
是 | 服务注册地址 | 常常只有 IP,没有端口 |
__meta_consul_service_port |
Consul Service Port | 2379 |
是 | 服务端口 | 单独不能直接用于 blackbox 探测 |
__address__ |
Prometheus 发现后的目标地址 | 10.10.1.20:2379 |
是 | Prometheus 当前认为的抓取地址 | 后续可能被改写为 Blackbox 地址 |
__param_target |
relabel 后生成 | 10.10.1.20:2379 |
是 | Blackbox 的 target= 参数 |
不是自动生成的,通常要手动映射 |
instance |
scrape 最终展示标签 | 10.10.1.20:2379 |
否 | Prometheus 中展示目标实例 | 不设置时可能显示成 blackbox 地址 |
__meta_consul_tagged_address_lan |
Consul Tagged Address 中的 LAN 地址 | 10.10.1.20 |
是 | 获取实例 LAN 地址 | 不是所有注册都有这个字段 |
__meta_consul_tags |
Consul 服务 tags | prod,etcd |
是 | 用于筛选目标 | 容易和 metadata 混淆 |
__meta_consul_service_metadata_target_use |
Consul Service Meta | etcd |
是 | 获取服务用途 | 来自 meta 不是 tags |
__meta_consul_service_metadata_hostname |
Consul Service Meta | node-01 |
是 | 获取主机名 | 需要服务注册时显式写入 meta |
__meta_consul_service_metadata_cluster |
Consul Service Meta | rg6_nangang |
是 | 获取集群名 | 需要服务注册时提供 |
三、重点标签详细说明
1. __meta_consul_service
来源
Consul 中注册的服务名。
示例
text
https_probe
用途
通常用于记录服务类型、服务发现来源。
常见写法
- source_labels: ['__meta_consul_service']
target_label: 'exporter_name'
说明
它只是服务名,不是地址,不是实例,不带端口。
2. __meta_consul_service_address
来源
Consul 注册服务时的 ServiceAddress。
示例
10.10.1.20
用途
表示实例的服务地址,可作为展示标签保存。
常见写法
- source_labels: ['__meta_consul_service_address']
target_label: 'target_ident'
注意点
它通常只有 IP/域名,不包含端口。
所以直接拿来做 TCP blackbox 的 target,可能不够。
常见误区
误以为它等于:
10.10.1.20:2379
实际上很多情况下它只是:
10.10.1.20
3. __meta_consul_service_port
来源
Consul 服务注册中的端口。
示例
2379
用途
保存实例端口,便于打标签和组装地址。
常见写法
- source_labels: ['__meta_consul_service_port']
target_label: 'target_port'
注意点
它只是端口号,不能单独作为 blackbox 目标。
4. __address__
来源
Prometheus 服务发现后的标准目标地址。
示例
10.10.1.20:2379
用途
这是 Prometheus 当前默认要抓取的地址。
在 blackbox 场景中的关键作用
通常会先把它转存为 __param_target:
- source_labels: [__address__]
target_label: __param_target
然后再把 __address__ 改写成 blackbox exporter:
- target_label: __address__
replacement: 10.10.1.20:9115
注意点
在 blackbox 配置里:
一开始的 __address__ = 被探测目标
改写之后的 __address__ = blackbox exporter 地址
所以它是会变化的。
5. __param_target
来源
通过 relabel 手动写入的特殊内部标签。
示例
10.10.1.20:2379
用途
传给 Blackbox Exporter 作为探测参数:
/probe?target=10.10.1.20:2379
常见写法
- source_labels: [__address__]
target_label: __param_target
注意点
它不是 Consul 自动给的,也不是 Prometheus 自动生成的,
而是你在 relabel_configs 中手动设置的。
常见误区
误以为 __param_target 是普通标签。
实际上它是一个 特殊参数标签,用于生成 scrape URL 参数。
6. instance
来源
Prometheus 最终指标标签。
示例
10.10.1.20:2379
用途
表示最终展示给用户看的实例标识。
常见推荐写法
- source_labels: [__param_target]
target_label: instance
为什么要手动设置
如果不设置,在 blackbox 场景里 instance 很可能显示成:
10.10.1.20:9115
也就是 blackbox exporter 自己,而不是被探测目标。
推荐做法
在 blackbox job 里几乎总是建议补一条:
- source_labels: [__param_target]
target_label: instance
7. __meta_consul_tagged_address_lan
来源
Consul 服务实例的 Tagged Addresses 中的 lan 地址。
示例
10.10.1.20
用途
表示实例的 LAN 网络地址,通常用于标记来源地址、内网地址或节点网络属性。
常见写法
- source_labels: ['__meta_consul_tagged_address_lan']
target_label: 'source'
适合场景
区分实例内网地址
做来源标识
在多网卡/多地址环境中保留 LAN 地址信息
注意点
不是所有 Consul 注册实例都会有 TaggedAddresses.lan。
如果注册信息里没有 lan,那这个标签就不会有值。
和 __meta_consul_service_address 的区别
标签 含义 典型用途
__meta_consul_service_address 服务注册声明的地址 作为服务目标地址
__meta_consul_tagged_address_lan Consul 记录的 LAN 地址 作为来源地址、节点 LAN 地址标识
在某些环境里,这两个值可能一样;在复杂网络环境里,可能不同。
例如:
service_address = 172.16.1.100
tagged_address_lan = 10.10.1.20
那就说明服务对外注册地址和节点 LAN 地址不是同一个。
8. __meta_consul_tags
来源
Consul 服务注册中的 tags。
示例
prod,etcd
用途
用于筛选服务实例。
常见写法
- source_labels: ['__meta_consul_tags']
action: keep
regex: '.*etcd.*'
说明
含义是:
只保留 tags 中包含 etcd 的目标。
常见误区
不要和 meta 混了:
tags 是标签列表
meta 是键值对
9. __meta_consul_service_metadata_target_use
来源
Consul Service Meta 中的 target_use 字段。
示例
etcd
用途
表示该服务实例的用途。
常见写法
- source_labels: ['__meta_consul_service_metadata_target_use']
target_label: 'target_use'
说明
它来源于 Consul 服务注册里的:
"meta": {
"target_use": "etcd"
}
10. __meta_consul_service_metadata_hostname
来源
Consul Service Meta 中的 hostname 字段。
示例
node-01
常见写法
- source_labels: ['__meta_consul_service_metadata_hostname']
target_label: 'hostname'
11. __meta_consul_service_metadata_cluster
来源
Consul Service Meta 中的 cluster 字段。
示例
rg6_nangang
常见写法
- source_labels: ['__meta_consul_service_metadata_cluster']
target_label: 'cluster'
四、推荐 blackbox relabel 模板
下面是一版较常见、较规范的写法:
relabel_configs:
- source_labels: ['__meta_consul_tags']
action: keep
regex: '.*etcd.*'
- source_labels: ['__meta_consul_service']
target_label: 'exporter_name'
- source_labels: ['__meta_consul_service_address']
target_label: 'target_ident'
- source_labels: ['__meta_consul_service_port']
target_label: 'target_port'
- source_labels: ['__meta_consul_tagged_address_lan']
target_label: 'source'
- source_labels: ['__meta_consul_service_metadata_hostname']
target_label: 'hostname'
- source_labels: ['__meta_consul_service_metadata_cluster']
target_label: 'cluster'
- source_labels: ['__meta_consul_service_metadata_target_use']
target_label: 'target_use'
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 172.20.101.156:9115
## **五、一张最通俗的关系图**
Consul 中的服务实例
├─ ServiceName -> __meta_consul_service
├─ ServiceAddress -> __meta_consul_service_address
├─ ServicePort -> __meta_consul_service_port
├─ TaggedAddresses.lan -> __meta_consul_tagged_address_lan
├─ Tags -> __meta_consul_tags
└─ Meta.target_use -> __meta_consul_service_metadata_target_use
Meta.hostname -> __meta_consul_service_metadata_hostname
Meta.cluster -> __meta_consul_service_metadata_cluster
Prometheus 服务发现后
└─ __address__ -> 一般为 ServiceAddress:ServicePort
Blackbox 场景
├─ __address__ -> 先拷贝到 __param_target
├─ __param_target -> 真正被探测的目标
├─ __address__ -> 再改写成 Blackbox Exporter 地址
└─ instance -> 建议设置为 __param_target
六、一句话总结
在 Consul SD + Blackbox 中:
__meta_consul_service_address:服务注册地址
__meta_consul_service_port:服务端口
__meta_consul_tagged_address_lan:实例 LAN 地址
__address__:Prometheus 当前目标地址,通常是 IP:PORT
__param_target:传给 blackbox 的真实探测目标
instance:最终展示给用户看的实例名
如果你愿意,我下一步可以继续帮你补一份:
"Consul 注册字段 → Prometheus SD 标签 → 推荐 relabel 用法" 三列表
这样你以后看任何 __meta_consul_* 都能直接知道从哪来、该怎么用。