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读取:
- 编写一个脚本(比如Bash或Python),定期解析
blackbox.test.local的SRV记录,输出类似以下格式的JSON文件(比如blackbox_targets.json):
[ { "targets": ["blackbox-instance-1:9115", "blackbox-instance-2:9115"], "labels": { "source": "srv-discovery" } } ]
- 在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
相关产品推荐
相关产品推荐

