如何配置Prometheus relabel_configs将多采集目标合并为单个Job?
Prometheus合并多Job为单个Job的配置方案
核心思路
在单个myJob中定义所有环境的采集目标,通过自定义标签绑定每个环境对应的exporter主机,再利用relabel_configs替换__address__为对应主机的地址,实现统一Job名称下的精准采集。
静态配置示例(直接写在Prometheus配置里)
scrape_configs: - job_name: 'myJob' # 定义6个环境的目标,每个环境绑定对应的exporter主机标签 static_configs: - targets: ['env1', 'env2', 'env3'] labels: exporter_host: 'host1:9100' # 替换为你的host1 exporter实际地址+端口 - targets: ['env4', 'env5', 'env6'] labels: exporter_host: 'host2:9100' # 替换为你的host2 exporter实际地址+端口 # 重写标签规则 relabel_configs: # 把原__address__(环境名)转存为env_name标签,保留环境标识 - source_labels: [__address__] target_label: env_name # 替换__address__为绑定的exporter主机地址,让Prometheus去对应主机采集 - source_labels: [exporter_host] target_label: __address__ replacement: '$1' # 引用source_labels第一个值,即exporter_host的内容
动态文件配置示例(适合环境较多的场景)
如果环境数量较多,推荐用file_sd_configs管理目标:
- 新建目标配置文件
env_targets.json:
[ {"targets": ["env1"], "labels": {"exporter_host": "host1:9100"}}, {"targets": ["env2"], "labels": {"exporter_host": "host1:9100"}}, {"targets": ["env3"], "labels": {"exporter_host": "host1:9100"}}, {"targets": ["env4"], "labels": {"exporter_host": "host2:9100"}}, {"targets": ["env5"], "labels": {"exporter_host": "host2:9100"}}, {"targets": ["env6"], "labels": {"exporter_host": "host2:9100"}} ]
- 对应Prometheus配置:
scrape_configs: - job_name: 'myJob' file_sd_configs: - files: ['/path/to/env_targets.json'] # 替换为你的文件实际路径 relabel_configs: - source_labels: [__address__] target_label: env_name - source_labels: [exporter_host] target_label: __address__ replacement: '$1'
关键说明
replacement: '$1'的作用是直接引用source_labels里的第一个值(也就是exporter_host的内容),把它赋值给__address__,这样Prometheus就会去指定的exporter主机拉取数据。- 保留
env_name标签是为了在指标中区分不同环境,如果你不需要可以删掉这条relabel规则。 - 确保
exporter_host里的地址是Prometheus能正常访问的,包括正确的IP/域名和端口。 - 你的Prometheus 2.37.0版本完全支持这种配置,没有兼容性问题。
内容的提问来源于stack exchange,提问作者Luc De Graef
相关产品推荐
相关产品推荐

