首页/云/可观测性速查/consul_sd:Consul 服务目录发现
Prometheus 与采集64 条

consul_sd:Consul 服务目录发现

consul_sd_configs 从 Consul 服务目录读取实例列表;适合已有 Consul 体系复用服务注册信息,减少重复维护目标清单。

可观测性速查云更新于 2026-10-13

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。

易错点

  • Consul 注册端口与指标端口不同,需要 relabel 改写 __address__,否则采集整体失败
  • 跨机房部署时发现延迟与网络抖动被放大,注意 consul server 的地理分布
  • token 写进明文配置或权限过大,泄露后可读写整个服务目录
  • 服务注销后 Consul 侧仍有缓存,目标消失存在延迟,短时间会抓到已下线实例
  • 没给 discovered 目标加 job 或 service 标签,多个业务的序列混在一起无法按服务聚合

数据来源与参考

  • Prometheus 文档 · consul_sd_config
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌