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.16master2的ip:192.168.124.26node1的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