服务发现的常见类别说明
- 静态配置: static_configs
	每次修改配置后,都需要重新加载配置或者重启服务。
- 动态配置
	每次修改后,无需重新加载配置或者重启服务。
	
	常见的动态配置:
		<file_sd_config>
			基于文件的服务发现。
			https://prometheus.io/docs/prometheus/2.53/configuration/configuration/#file_sd_config
			
		<consul_sd_config>
			基于consul的服务发现。
			https://prometheus.io/docs/prometheus/2.53/configuration/configuration/#consul_sd_config
			
		<kubernetes_sd_config>
			基于K8S实现的服务发现
			https://prometheus.io/docs/prometheus/2.53/configuration/configuration/#kubernetes_sd_config
			
		<dns_sd_config>:
			基于DNS实现服务发现。
			https://prometheus.io/docs/prometheus/2.53/configuration/configuration/#dns_sd_config
		<docker_sd_config>:
			基于docker engine的服务发现
			https://prometheus.io/docs/prometheus/2.53/configuration/configuration/#docker_sd_config
		<http_sd_config>:
			基于http的服务发现。
			https://prometheus.io/docs/prometheus/2.53/configuration/configuration/#http_sd_config
基于文件的服务发现
1.修改Prometheus的配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
   | [root@elk01:5 ~]# vim /softwares/prometheus-2.53.2.linux-amd64/prometheus.yml  ...   - job_name: "linux-file-sd-config"     file_sd_configs:      - files:         -  /softwares/prometheus-2.53.2.linux-amd64/test.yaml         -  /softwares/prometheus-2.53.2.linux-amd64/test.json
 
  [root@elk01:0 ~]# /softwares/prometheus-2.53.2.linux-amd64/promtool check config /softwares/prometheus-2.53.2.linux-amd64/prometheus.yml 
 
  [root@elk01:0 ~]# curl -X POST http://10.0.0.211:9090/-/reload
  此时访问Prometheus的webui,发现没有显示新的服务 http://10.0.0.211:9090/targets
   | 
 
2.编辑服务发现文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   | `yaml格式:` [root@elk01:5 ~]# vim /softwares/prometheus-2.53.2.linux-amd64/test.yaml - targets:     - 10.0.0.213:9100     - 10.0.0.211:9100     - 10.0.0.212:3000      `json格式` [root@elk01:5 ~]# vim /softwares/prometheus-2.53.2.linux-amd64/test.json [   {     "targets": [ "10.0.0.211:9100","10.0.0.212:9100" ]   } ]
   | 
 
3.测试验证
1 2
   | 文件保存后直接访问webUI,即可发现就可以显示了,不需要热加载Prometheus http://10.0.0.211:9090/targets
   | 
 

基于文件发现和基于consul对比
基于文件的服务发现是在Prometheus本地基于某个文件读取要监控的节点;
基于consul服务发现是需要单独部署一套consul集群,Prometheus-server去对应的consul集群获取需要监控的节点。
部署基于console的服务发现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
   | 1 下载consul wget https://releases.hashicorp.com/consul/1.19.2/consul_1.19.2_linux_amd64.zip
  2 解压consul unzip consul_1.19.2_linux_amd64.zip -d /usr/local/bin/
  3 运行consul 集群 服务端211: consul agent -server -bootstrap -bind=10.0.0.211 -data-dir=/data/consul -client=10.0.0.211 -ui
  客户端212: consul agent  -bind=10.0.0.212 -data-dir=/data/consul -client=10.0.0.212 -ui -retry-join=10.0.0.211
  客户端213: consul agent -server -bind=10.0.0.213 -data-dir=/data/consul -client=10.0.0.213 -ui -retry-join=10.0.0.211
  4 查看各节点的监听端口 ss -ntl | grep 8500
  5 访问console服务的WebUI http://10.0.0.213:8500/ui/dc1/nodes
   | 
 

基于consul的服务发现应用
1 修改prometheus的配置文件并重新加载配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
   | [root@elk01:1 ~]# vim /softwares/prometheus-2.53.2.linux-amd64/prometheus.yml    ...   - job_name: "Linux-consul-seriver-discovery"          consul_sd_configs:                - server: 10.0.0.213:8500       - server: 10.0.0.212:8500       - server: 10.0.0.211:8500     relabel_configs:                - source_labels: [__meta_consul_service]                  regex: consul                           action: drop         
  [root@elk01:0 ~]# /softwares/prometheus-2.53.2.linux-amd64/promtool check config /softwares/prometheus-2.53.2.linux-amd64/prometheus.yml 
 
  [root@elk01:0 ~]# curl -X POST http://10.0.0.211:9090/-/reload
   | 
 
2.被监控节点注册到console集群
1 2 3 4 5 6 7 8 9 10 11 12
   | [root@elk01 ~]# curl -X PUT -d '{"id":"elk211","name":"elk01","address":"10.0.0.211","port":9100,"tags":["node-exporter"],"checks": [{"http":"http://10.0.0.211:9100","interval":"5m"}]}' http://10.0.0.213:8500/v1/agent/service/register
  [root@elk02 ~]# curl -X PUT -d '{"id":"elk212","name":"elk212","address":"10.0.0.212","port":9100,"tags":["node-exporter"],"checks": [{"http":"http://10.0.0.212:9100","interval":"5m"}]}' http://10.0.0.213:8500/v1/agent/service/register
  [root@elk03 ~]# curl -X PUT -d '{"id":"elk213","name":"elk213","address":"10.0.0.213","port":9100,"tags":["node-exporter"],"checks": [{"http":"http://10.0.0.213:9100","interval":"5m"}]}' http://10.0.0.213:8500/v1/agent/service/register
 
  `详解` "id":"elk211","name":"elk01","address":"10.0.0.211","port":9100 监控211节点,地址和端口 checks": [{"http":"http://10.0.0.211:9100","interval":"5m"}]}'  检查节点,和间隔时间 http://10.0.0.213:8500/v1/agent/service/register                注册到console集群(写211,212,213都可以)
 
  | 
 
3.检查consul的WebUI
1
   | http://10.0.0.212:8500/ui/dc1/services
   | 
 

4 检查Prometheus的WebUI
1
   | http://10.0.0.211:9090/targets?search=
   | 
 

5.注销节点
1 2 3
   | curl -X PUT http://10.0.0.213:8500/v1/agent/service/deregister/elk213
  elk213  `这里写的是id,而不是name`
   | 
 
注意,也可以使用POSTMAN直接进行如下操作,需要使用PUT方法。
PUT http://10.0.0.213:8500/v1/agent/service/deregister/elk213
Prometheus监控console集群
Prometheus监控consul集群
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
   | 1.下载consul exporter [root@elk02:5 ~]# wget https://github.com/prometheus/consul_exporter/releases/download/v0.12.1/consul_exporter-0.12.1.linux-amd64.tar.gz
  2.解压软件包  [root@elk02:5 ~]# tar xf consul_exporter-0.12.1.linux-amd64.tar.gz  -C /usr/local/bin/ consul_exporter-0.12.1.linux-amd64/consul_exporter --strip-components=1
  3.启动console exporter  [root@elk02:5 ~]# consul_exporter --consul.server="http://10.0.0.213:8500" --web.telemetry-path="/metrics" --web.listen-address=:9107 
  4.访问consul exporter的WebUI http://10.0.0.212:9107/metrics
  5.向consul注册(或者修改Prometheus配置文件,静态发现需要热加载Prometheus) [root@elk02:5 ~]# curl -X PUT -d '{"id":"elk212-consul","name":"consul-cluster","address":"10.0.0.212","port":9107,"tags":["node-exporter"],"checks": [{"http":"http://10.0.0.212:9107","interval":"5m"}]}' http://10.0.0.213:8500/v1/agent/service/register
  6.访问consul的WebUI http://10.0.0.212:8500/ui/dc1/services/consul-cluster/instances
  7.访问prometheus的WebUI http://10.0.0.211:9090/targets
  8.grafana导入模板ID  12049
   |