首页/云/可观测性速查/file_sd:用文件做服务发现
Prometheus 与采集64 条

file_sd:用文件做服务发现

file_sd_configs 从 JSON/YAML 文件读取目标列表并支持自动重载(默认 5 分钟检测变更);配合配置管理或脚本生成文件,适合无法动态发现的环境。

可观测性速查云更新于 2026-10-13

file_sd 是什么

file_sd_configs 让 Prometheus 从 JSON 或 YAML 文件读取目标列表,并自动检测文件变化重载(默认 5 分钟检查一次,可配 refresh_interval)。目标是「静态写法 + 自动更新」的折中:由配置管理或脚本生成文件,Prometheus 侧不需重启即可感知目标变化。

基本信息

配置键file_sd_configs
文件格式JSON 或 YAML
自动重载默认约 5 分钟检测一次
刷新间隔refresh_interval 可自定义
支持通配files 里可用 *.json
适用场景无法动态发现的中间件与自建服务

典型使用场景

  • 由 Ansible 或脚本生成目标文件,机器变更时自动更新采集范围
  • 自建系统没有服务发现接口,用定时任务刷新目标文件
  • 多团队各自维护一份目标文件,通过目录通配统一接入
  • 为中间件(MySQL、Redis、Kafka)集中维护采集清单
  • 测试环境按需增删目标文件,无需改动 Prometheus 主配置
  • 把目标清单纳入发布流水线,随服务一起更新

prometheus.yml 片段

prometheus.yml 片段
scrape_configs:
  - job_name: 'file-targets'
    file_sd_configs:
      - files:
          - /etc/prometheus/targets/*.json   # 通配目录下全部文件
        refresh_interval: 1m                 # 自定义刷新间隔

targets/app.json 内容

targets/app.json 内容
[
  {
    "targets": ["10.0.1.21:8080", "10.0.1.22:8080"],
    "labels": {"env": "prod", "team": "order"}
  }
]

字段说明

字段作用注意
files文件列表支持通配符
refresh_interval刷新间隔默认约 5 分钟
targets目标数组每条记录一组
labels标签映射附加到该组目标
文件里可写多个目标组,每组可带独立标签;Prometheus 会监视文件变化并自动重载,无需重启服务。
文件格式错误会导致整份目标列表被拒绝,生成脚本应先做 JSON 校验,避免一次笔误让整批目标消失。
多个 Prometheus 实例共享同一目录时要注意刷新与权限一致,写入方式应避免让读取方看到半写入的文件(如先写临时文件再原子改名)。
file_sd 只解决目标来源问题,其余抓取参数(间隔、路径)仍在任务层配置,两者不要混淆。
目标文件的写入建议采用「写临时文件再原子改名」:直接覆盖时,读取方可能正好读到写了一半的内容而报格式错误。

易错点

  • 文件格式错误会导致整份目标列表被拒绝,生成脚本应先做 JSON 校验
  • 多个 Prometheus 共享目录时注意刷新与权限一致,避免读到半写入的文件
  • 目标文件路径写错或权限不足时服务发现静默失败,Targets 页面看不到目标
  • refresh_interval 设置过长会让新增实例迟迟未被采集,与发布节奏脱节
  • 把高基数的机器名或路径写进 labels 会推高序列量,标签设计要克制
  • 文件由多个来源同时写入会产生内容竞争,目标清单应指定单一写入方

数据来源与参考

  • Prometheus 文档 · file_sd_config
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌