consul是什么?
Consul是一个分布式的,高可用的服务注册系统,由server端和client端组成,每个server和client都是consul的一个节点,consul客户端不保存数据,客户端将接收到的请求转发给响应的Server端。Server之间通过局域网或广域网通信实现数据一致性。
Prometheus基于consul服务发现简介
prometheus基于consul的服务发现流程如下:
(1)在consul注册服务或注销服务(监控targets)
(2)Prometheus一直监视consul服务,当发现consul中符合要求的服务有新变化就会更新Prometheus监控对象
安装consul集群
创建三个虚拟机,每台机器可以配置成4核CPU,6G内存,60G硬盘,主机名分别定义成master1、master2、master3,我的实验环境ip规划如下:
master1的ip:192.168.124.16 master2的ip:192.168.124.26 node1的ip:192.168.124.56
在master1、master2、node1三个节点部署consul
master1是consul的server,master2是consul的client,node1是consul的client
1.下载consul二进制包,在各个节点操作
mkdir /opt/consul/data-p && cd /opt/consul
wget https://releases.hashicorp.com/consul/1.7.1/consul_1.7.1_linux_amd64.zip
unzip consul_1.7.1_linux_amd64.zip
注:在https://releases.hashicorp.com/consul处可下载各个版本的consul,1.7.1是最新版本
2.启动consul
1)在master1上:
cd /opt/consul
./consul agent -server -bootstrap -bind=192.168.124.16 -client=192.168.124.16 -data-dir=data -ui -node=192.168.124.16
这样就启动了master1上的consul
2)在master2上:
cd /opt/consul
./consul agent -bind=192.168.124.26 -client=192.168.124.26 -data-dir=data -node=192.168124.26 -join=192.168.124.16
3)在node1上:
cd /opt/consul
./consul agent-bind=192.168.124.56 -client=192.168.124.56 -data-dir=data -node=192.168.124.56 -join=192.168.124.16
各个节点都启动完之后
在浏览器访问http://192.168.124.16:8500/
可看到consul的管理界面
3.服务注册到consul
使用HTT PAPI方式注册node-exporter服务到Consul,可以在master1上测试,前提是master1节点需要部署node-exporter,这里不做说明,想学习详细内容可参考https://edu.51cto.com/sd/76993
在master1节点执行如下:
curl -X PUT -d '{"id":"node-exporter","name":"node-exporter","address":"192.168.124.16","port":9100,"tags":["node-exporter"],"checks":[{"http":"http://192.168.124.16:9100/","interval":"5s"}]}' http://192.168.124.16:8500/v1/agent/service/register
注:上面看到的192.168.124.16,是consul的master1节点ip
4.把consul中注册的服务移除:
curl --request PUT http://192.168.124.16:8500/v1/agent/service/deregister/192.168.124.16
5.prometheus基于consul服务发现的配置
前提是需要有prometheus,在部署prometheus的机器上执行如下,
找到prometheus配置文件
cat prometheus.yaml
配置内容如下:
scrape_configs: - job_name: consul metrics_path: /metrics scheme: http consul_sd_configs: - server: 192.168.124.16:8500 services: [] relabel_configs: - source_labels: ['__meta_consul_tags'] target_label: 'product' - source_labels: ['__meta_consul_dc'] target_label: 'idc' - source_labels: ['__meta_consul_service'] regex: "consul" #匹配为"consul" 的service action: drop # 执行的动作 - source_labels: ['job'] target_label: 'environment' regex: '(.*)job' replacement: '${1}'
如果是docker部署的prometheus,可用如下方法重启prometheus
docker restart prometheus
docker restart node-exporter
6.在prometheus web ui界面查看
http://192.168.124.16:9090/targets#job-prometheus
可看到如下,说明prometheus已经把consul作为数据源:
7.prometheus基于consul服务发现的配置说明:
- source_labels:['__meta_consul_tags'] target_label: 'product' - source_labels: ['__meta_consul_dc'] target_label: 'idc' - source_labels: ['__meta_consul_service'] regex: "consul" #匹配为"consul" 的service action: drop # 执行的动作 - source_labels: ['job'] target_label: 'environment' regex: '(.*)job' replacement: '${1}' __meta_consul_tags:标记分隔符连接的目标的标记列表 __meta_consul_dc:目标的数据中心名称 __meta_consul_service:目标所属服务的名称 job':目标服务器的job __meta_consul_service_port:目标的服务端口 static_configs: 配置数据源 consul_sd_configs: 基于consul服务发现的配置 rebel_configs:重新标记 consul_sd_configs: - server: 192.168.124.16:8500 #这个ip:port是consul的master1节点的ip