Prometheus 如何为每个 Target 配置不同的抓取 URL?
Prometheus 的 static_configs 支持按 target 分组,每组可写自己的 metrics_path、params 与标签。本文演示一个 job 内多个 target 使用不同抓取路径与参数的写法,以及用 file_sd 管理大量目标的技巧。
可以——在 static_configs 里把目标分成多个组,每组独立配置 labels;而 metrics_path、params 这类抓取参数属于 job 级,若每个目标路径不同,更推荐拆成多个 job 或用 relabel 动态改写。
写法一:分组 static_configs(推荐)
scrape_configs:
- job_name: 'my-app'
metrics_path: /metrics
static_configs:
- targets: ['server1:9090']
labels: {env: prod, team: order}
- targets: ['server2:9090']
labels: {env: staging, team: order}
每个 targets 块可以挂自己的标签,这是最常用的"每个 target 不同配置"。
写法二:路径/参数也不同——拆 job 或 relabel
metrics_path、scheme、params 是 job 级配置,同组内所有 target 共用。路径不同时:
- 目标少:直接拆成多个 job,各自写
metrics_path; - 目标多:用
relabel_configs按__address__匹配改写__metrics_path__:
relabel_configs:
- source_labels: [__address__]
regex: 'server1:.*'
target_label: __metrics_path__
replacement: /custom/metrics
以 __ 开头的是抓取期的内部标签,改写后不会出现在最终指标里。
大量目标:file_sd
目标几十上百个时,用 file_sd_configs 把目标清单放到 JSON/YAML 文件里,Prometheus 自动热加载,改目标不用重启。
观测云对照
观测云 DataKit 的 prom 采集器同样支持为每个采集实例配置独立 URL、指标名前缀与自定义标签,配置即 TOML 片段,改完热生效;采集到的指标直接进观测云,自带标签检索与看板能力。
常见问题(FAQ)
Q:relabel 改写的标签会保留在指标里吗? __ 前缀的内部标签不会;要保留请写入普通标签名。
Q:params 里的参数会冲突吗? params 是 job 级,同 job 内所有 target 一致;每个 target 不同参数请拆 job。