Service Discovery

Prometheus是基于pull形式进行数据采集的,可以通过静态配置更新监控的目标,但这样势必带来巨大的运维开销,那么此时就需要用到服务自动发现了,这也是Prometheus的一个组件——Service Discovery

实现服务的自动发现,就需要引入中间人(服务注册中心)

Prometheus组件—Service Discovery - 图1

基于文件的服务发现

当我们需要增加修改或者删除监控目标的时候,就需要去更改Prometheus主配置文件,然后再重启Prometheus服务,虽说可以采用热加载配置的方式,但是仍然很繁琐

基于文件的Service Discovery主要是创建一个YAML格式或者JSON格式的文件,然后将其导入到Prometheus的主配置文件中,Prometheus会自动的周期性读取文件中的内容,之后的一切更新操作都只需要在那个文件中进行修改就可以了,不需要更改Prometheus主配置文件再重启服务

  • 首先需要创建YAML格式文件,用以在主配置文件中导入
  1. [root@server1 ~]# cd /data/prometheus
  2. [root@server1 prometheus]# mkdir targets
  3. [root@server1 prometheus]# vim targets/targets.yml
  4. - targets:
  5. - "192.168.80.152:9100"
  • 修改主配置文件,如下所示:
  1. [root@server1 prometheus]# vim prometheus.yml
  2. scrape_configs:
  3. # 新添加的部分
  4. - job_name: 'service_discovery'
  5. file_sd_configs:
  6. - files:
  7. - targets/targets.yml # 上一步中的文件目录
  8. refresh_interval: 10s # 指定了定时读取target.yaml的时间间隔
  9. [root@server1 prometheus]# ./prometheus
  • 查看Targets

Prometheus组件—Service Discovery - 图2

  • 如果需要增删改监控目标的话,只需要修改之前创建的targets.yaml文件就可以了,修改完后也不需要重启Prometheus服务
  1. [root@server1 prometheus]# vim targets/targets.yml
  2. - targets:
  3. - "192.168.31.20:9104" # server2的mysqld_exporter
  4. - "192.168.31.20:9100" # server2的ndoe_exporter
  5. - "192.168.31.10:9090" # server1的prometheus自带监控

Prometheus组件—Service Discovery - 图3

当然不仅可以创建YAML格式文件来实现自动发现服务,也可以使用JSON格式的文件来实现

基于Consul的服务发现

Consul是由HashiCorp开发的一个支持多数据中心的分布式服务发现和键值对存储服务的开源软件,被大量应用于基于微服务的软件架构当中

Consul是一个通用的服务发现和注册中心,记录并且管理了环境中所有服务的信息,Prometheus通过与Consul的交互可以获取到相应Exporter实例的访问信息

在Prometheus的配置文件中可以通过以下方式与Consul进行集成

  1. - job_name: node_exporter
  2. metrics_path: /metrics
  3. scheme: http
  4. consul_sd_configs:
  5. - server: localhost:8500 #指定了consul的访问地址
  6. services: #为注册到consul中的实例信息
  7. - node_exporter
  8. - cadvisor

参考博客:https://blog.csdn.net/aixiaoyang168/article/details/103022342