配置方式如下:
scrape_configs:
- job_name: 'file_sd' file_sd_configs:- files: - targets.jsonrelabel_configs:- source_labels: [__address__]regex: (http://)([^:]+)target_label: __address__ replacement: http://${2}- source_labels: [__port__] regex: (\d+)target_label: __port__replacement: ':${1}' - source_labels: [__module__] regex: ([a-z0-9-]+) target_label: __module__replacement: /${1}- source_labels: [__module__]target_label: metrics_path
这里:
- 通过前 3 个 relabel_config 从 address 和 port 标签生成 host 和 port
- module 标签的值通过最后一个 relabel_config 直接作为 metrics_path
- 所以 module 标签的值会覆盖通过 regex 生成的默认路径
例如,targets.json 中有以下目标:
[{"targets": ["http://host1:9090"],"labels": {"__module__": "app1" }},{"targets": ["http://host2:9091"],"labels": {"__module__": "app2"}}
]
那么 Prometheus 最终会使用以下 metrics_path:
- /app1
- /app2
因为 module 标签的值会直接作为 metrics_path,覆盖 regex 生成的默认值。
具体我的配置示例:
JSON文件中:
[{"targets": ["127.0.0.1:8080"],"labels": {"module": "customer"}},{"targets": ["127.0.0.1:8081"],"labels": {"module": "web"}}]
Prometheus中scrape_configs中配置file_sd_config:
scrape_configs:- job_name: 'App-service_job'file_sd_configs:- files:- /xxx/targets.jsonrelabel_configs:- target_label: __metrics_path__source_labels: [module]replacement: /${1}/actuator/prometheus
source_labels: 源标签名称 [module]是用于获取JSON文件中配置目标的标签“target”
target_label:目标标签名称
replacement:替换值