consul_sd_configs 做什么
consul_sd_configs 让 Prometheus 从 Consul 服务目录读取实例列表,把服务注册信息直接变成抓取目标,不必再维护一份静态 target 清单。适合已经有 Consul 做服务发现的环境:注册与监控共用同一份拓扑,服务上下线时监控目标自动跟随。
基本信息
| 主要配置 | server(Consul 地址与端口)、services 或 tags、token 等 |
|---|---|
| 发现结果 | 每个健康实例生成一条目标,地址与端口来自注册信息 |
| 健康过滤 | 默认只发现通过健康检查的实例 |
| 标签来源 | __meta_consul_* 系列元标签,可经 relabel 转成业务标签 |
配置示例
配置示例
scrape_configs:
- job_name: 'consul-services'
consul_sd_configs:
- server: 'consul.example.com:8500'
services: ['order-api', 'pay-api']
tags: ['metrics']
relabel_configs:
# 注册端口是业务端口,指标端口需要改写
- source_labels: [__address__]
regex: '(.*):(\d+)'
replacement: '$1:9100'
target_label: __address__
- source_labels: [__meta_consul_service]
target_label: service典型使用场景
- 服务实例频繁扩缩容,静态目标清单维护成本过高
- 已有 Consul 作为注册中心,希望复用注册信息做监控发现
- 按服务名或 tag 分批抓取不同指标端口
- 灰度环境只注册部分实例,用 tag 区分是否纳入抓取
Consul 注册的端口通常是业务端口而非指标端口,必须用 relabel 改写 __address__,否则会抓业务端口导致采集全部失败。
需要自行过滤时可用 __meta_consul_health 标签;跨机房部署时 consul server 的地理分布会影响发现延迟,网络抖动会被放大。
常用元标签
| 标签 | 含义 | 用途 |
|---|---|---|
| __meta_consul_service | 服务名 | 改写成 service 标签,用于聚合与分组 |
| __meta_consul_service_id | 实例 ID | 区分同一服务下的不同实例 |
| __meta_consul_service_address | 实例地址 | 作为附加标签或用于改写目标地址 |
| __meta_consul_service_port | 注册端口 | 与指标端口不一致时据此改写 |
| __meta_consul_tags | 实例标签串 | 按 tag 过滤环境、角色或采集批次 |
服务很少变化时静态配置更简单可控;只有当实例频繁增减、手工维护目标清单开始出错时,引入服务发现才划算。
多个 Prometheus 实例调用同一 Consul 接口时注意查询压力与并发限制,必要时调整刷新间隔或使用本地 consul agent。