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

Prometheus结合Blackbox Exporter使用SRV记录时的配置问题及解决方案咨询

解决AWS ECS桥接模式下Prometheus Blackbox Exporter的SRV服务发现复用问题

没问题,你可以通过两种实用的方式来实现将SRV查询结果复用在其他监控目标上。先帮你理清当前配置失效的核心原因:

你的配置里dns_sd_configs和static_configs会生成两个完全独立的目标组:

  • 从dns_sd_configs生成的目标带有__meta_dns_srv_*标签,但没有要监控的网站地址;
  • 从static_configs生成的目标带有要监控的网站地址,但没有__meta_dns_srv_*标签,导致最后一条relabel规则无法把__address__替换成blackbox exporter的真实地址,自然无法正常抓取。

下面是两种可行的解决方案:

方案一:单Job内通过Relabel规则复用SRV结果(无需额外工具)

这种方法直接在同一个Job里通过relabel规则,为每个blackbox exporter实例生成对应所有监控目标的抓取任务:

- job_name: 'blackbox-monitor'
  metrics_path: /probe
  params:
    module: [http_2xx]
  # 通过SRV发现blackbox exporter的所有实例
  dns_sd_configs:
  - names:
    - blackbox.test.local
    type: SRV
  relabel_configs:
    # 临时保存从SRV解析到的blackbox地址
    - source_labels: [__meta_dns_srv_record_target, __meta_dns_srv_record_port]
      separator: ":"
      target_label: __tmp_blackbox_addr
    # 为第一个监控目标生成抓取任务
    - target_label: __param_target
      replacement: https://www.google.com/
    - source_labels: [__tmp_blackbox_addr]
      target_label: __address__
    - source_labels: [__param_target]
      target_label: instance
    # (可选)为第二个监控目标生成抓取任务,有多个就重复这几行
    - source_labels: [__tmp_blackbox_addr]
      target_label: __address__
    - target_label: __param_target
      replacement: https://www.example.com/
    - source_labels: [__param_target]
      target_label: instance

工作原理:先通过SRV获取blackbox的地址并临时存储,然后通过多次relabel操作,为每个要监控的网站复制出一个带有正确__param_target(要监控的地址)和__address__(blackbox地址)的抓取任务。

方案二:使用File SD作为中间存储(适合多Job复用)

如果需要在多个Prometheus Job里复用SRV解析的结果,可以用简单的外部脚本定期把SRV记录解析结果写入文件,再通过file_sd_configs读取:

  1. 编写一个脚本(比如Bash或Python),定期解析blackbox.test.local的SRV记录,输出类似以下格式的JSON文件(比如blackbox_targets.json):
[
  {
    "targets": ["blackbox-instance-1:9115", "blackbox-instance-2:9115"],
    "labels": {
      "source": "srv-discovery"
    }
  }
]
  1. 在Prometheus配置中,用file_sd_configs读取这个文件,同时结合静态监控目标:
- job_name: 'blackbox-google'
  metrics_path: /probe
  params:
    module: [http_2xx]
  file_sd_configs:
  - files:
    - ./blackbox_targets.json
  static_configs:
  - targets:
    - 'dummy'  # 占位符,仅用于注入监控目标标签
    labels:
      __target: https://www.google.com/
  relabel_configs:
    - source_labels: [__target]
      target_label: __param_target
    - source_labels: [__param_target]
      target_label: instance
    - source_labels: [__address__]
      regex: 'dummy'
      action: drop  # 移除占位符目标

工作原理:外部脚本负责维护SRV解析结果到文件,Prometheus通过File SD获取blackbox的地址,再通过relabel把静态监控目标注入到抓取任务中,这样多个Job都可以读取同一个文件复用SRV结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:32:35