目录
一、prometheus的服务发现
1、基于文件的服务发现
二、基于consul的服务发现
一、prometheus的服务发现
Prometheus默认是采用pull的方式拉取监控数据的,每一个被抓取的目标都要暴露一个HTTP接口,prometheus通过这个接口来获取相应的指标数据,这种方式需要由prometheus-server决定采集的目标服务器有哪些,通过配置在scrape_configs中的各种job来实现,无法动态感知新服务,如果后面新增了节点或组件,就需要手动修改prometheus配置,然后重启服务或重新加载配置,所以出现了动态服务发现。
每次增加exporter修改Prometheus.yml估计早就烦了
Prometheus配置文件Prometheus.yml里配置需要监听的服务是,是按照服务名写死的,如果后面增加了节点或者组件信息,就得手动修改配置,并重启Prometheus或热加载太麻烦,那么能否动态的监听服务呢?有多种
1、基于文件的服务发现
prometheus可以从指定的文件中动态发现监控目标,如果文件发生修改,prometheus会根据文件内容动态增加/删除target,无需重启服务。
基于文件的服务发现主要是通过prometheus job配置中的consul_file_configs字段来配置
演示:
1、先创建target文件
[root@rabbitmq_2 prometheus]# mkdir target
2、创建yml文件
-rw-r--r--. 1 prometheus prometheus 425 12月 25 15:05 targets.yml
- targets : ['localhost:9090']
labels:
job: prometheus
- targets: ["localhost:9100"]
labels:
job: Prometheus服务器
instance: Prometheus服务器
- targets: ["192.168.134.132:9100"]
labels:
job: node-exporter
instance: test主服务器
- targets: ["192.168.134.132:9104"]
labels:
job: mysql_exporter
instance: mysql服务
- targets: ["localhost:9091"]
labels:
job: pushgateway
3、编辑Prometheus配置,添加job,内容如下:
scrape_configs:
- job_name: "file-sd-test"
file_sd_configs:
- refresh_interval: 10s
files:
- "/opt/prometheus/prometheus/targets/targets.yml"
热加载一下 就好了
[root@rabbitmq_2 prometheus]# curl -X POST http://localhost:9090/-/reload
基于文件的服务发现和基于配置的服务发现的区别就是:不用重新加载prometheus,直接修改targets文件,prometheus会自动加载
二、基于consul的服务发现
官网:Consul by HashiCorp
只需要在consul中维护监控组件配置,prometheus就能够动态发现配置了。
Consul是一个分布式的服务发现和键/值存储系统
后续更新。