基于文件的服务发现

  • 在Prometheus支持的众多服务发现的实现方式中,基于文件的服务发现是最通用的方式。这种方式不需要依赖于任何的平台或者第三方服务。对于Prometheus而言也不可能支持所有的平台或者环境。
  • 通过基于文件的服务发现方式下,Prometheus会自动从文件中读取最新的Target信息,因此,你可以通过任意的方式将监控Target的信息写入即可。
  • 用户通过JSON或者YAML格式的文件,定义所有的监控目标。

基于文件的服务发现

在prometheus根目录下创建file_sd.yml文件(与prometheus.yml处于同一目录),文件内容如下:

- targets:
  - localhost:9100
  labels:
    team: "advertisement"
    region: "SZX"

更新prometheus.yml文件node_exporter的对应部分为:

  - job_name: node_exporter
    file_sd_configs:
    - files:
      - file_sd.yml

image-20210516212631215 重新启动prometheus服务。并访问targets页面,node_exporter服务成功被发现,且抓取到了文件中的相关label:

image-20210516212809197

测试自动更新

Prometheus会自动应用文件更新后的内容。当文件中定义的内容发生变化时,不需要对Prometheus进行任何的重启操作。

修改file_sd.yml文件,添加新的target:

- targets:
  - localhost:9100
  labels:
    team: "advertisement"
    region: "SZX"
    
- targets:
  - localhost111:9100 # 添加job
  labels:
    team: "another"
    region: "BJS"

刷新prometheus浏览器页面,会自动应用文件中新添加的target:

image-20210516213643294

总结

通过文件进行服务发现的方式衍生了很多不同的玩法,比如与自动化配置管理工具(Ansible)结合、与Cron Job结合等等。

对于一些Prometheus还不支持的云环境,比如国内的阿里云、腾讯云等也可以使用这种方式通过一些自定义程序与平台进行交互自动生成监控Target文件,从而实现对这些云环境中基础设施的自动化监控支持:

image-20210516213946457