consul学习笔记
consul
默认的服务端口是8500
consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。服务部署简单,只有一个可运行的二进制的包。
背景
Prometheus用到它服务发现的功能,以往prometheus.yml配置一台服务的node-exporter,需要配置一段配置,直连客户端的服务,如图一,如果服务的数量变大,整个prometheus.yml配置就会变得很复杂,大的配置文件不方便做管理维护。这个时候把consul作为注册中心,作为所有客户端的汇聚点,prometheus直接调用consul的接口即可管理所有客户端。
原理
过程:服务A-N把当前自己的网络位置注册到服务发现模块(这里注册的意思就是告诉),服务发现就以K-V的方式记录下,K一般是服务名,V就是IP:PORT。服务发现模块定时的轮询查看这些服务能不能访问的了(这就是健康检查)。客户端在调用服务A-N的时候,就跑去服务发现模块问下它们的网络位置,然后再调用它们的服务。Prometheus完全不需要记录这些服务的网络位置,客户端和服务端完全解耦。
安装
安装包:consul_1.8.6_linux_amd64.zip
运行条件:go环境
安装go:
yum install -y epel-release
yum install -y golang
部署:解压重命名consul_1.8.6_linux_amd64.zip文件夹后,配置consul.service,就能用。
vim /usr/lib/systemd/system/consul.service
[Unit]
Description=Consul
After=network-online.target
[Service]
Type=simple
User=root
Group=root
Restart=on-failure
ExecStart=/usr/local/consul/consul agent \
-ui \
-server \
-bootstrap-expect 1 \
-data-dir /usr/local/consul/data \
-node=s1 \
-bind=XXX.XXX.XXX.XXX \
-rejoin \
-config-dir=/etc/consul.d/ \
-client 0.0.0.0
[Install]
WantedBy=multi-user.target
加入prometheus
vim /etc/prometheus/prometheus.yml
- job_name: 'consul'
consul_sd_configs:
- server: 'xxx.xxx.xxx.xxx:8500' //{consul-ip地址}
services: []
relabel_configs:
- source_labels: [__meta_consul_service]
regex: "consul"
action: drop
- source_labels: [__meta_consul_service]
target_label: job
- source_labels: [__meta_consul_service_id]
target_label: instance
- source_labels: [__meta_consul_tags]
separator: ;
regex: ',(.*),.*'
target_label: tags
replacement: ${1}
action: replace
注册节点:
curl -X PUT -d '{"id": "prod9-nginx1-xxx.xxx.xxx.xxx","name": "node-exporter","address": "xxx.xxx.xxx.xxx","port": 9100,"tags": ["prod-nginx"],"checks": [{"http": "http://xxx.xxx.xxx.xxx:9100/metrics", "interval": "5s"}]}' http://{consul-ip}:8500/v1/agent/service/register
id 是后续用于删除节点用的,是唯一表示
Name 这里用于表示收集node-exporter这个服务的信息
Address 服务器ip
Port 服务端口
Tags 该服务器标签,用于grafana页面展现的分组
删除节点:
curl --request PUT http://{consul-ip}:8500/v1/agent/service/deregister/prod13-nginx2-59.197.185.170
思考:
如果有几百台服务器需要配置node_exporter监控,用consul来汇聚怎么办。写个shell解决问题。
1.读ip.txt 三个变量。id tags ip
2.get-do.sh脚本,读ip.txt,生成命令行文件do.sh。
3.直接执行do.sh
ip.txt
get-do.sh
#!/bin/bash
while read line;do
echo $line
ipadd=`echo $line | awk '{print $3}'`
tags=`echo $line | awk '{print $2}'`
id=`echo $line | awk '{print $1}'`
echo "$ipadd"
echo "$tags"
echo "$id"
echo "curl -X PUT -d '{\"id\": \"${id}\",\"name\": \"node-exporter\",\"address\": \"${ipadd}\",\"port\": 9100,\"tags\": [\"${tags}\"],\"checks\": [{\"http\": \"http://${ipadd}:9100/metrics\", \"interval\": \"5s\"}]}' http://xxx.xxx.xxx.xxx:8500/v1/agent/service/register" >> do.sh
#curl --request PUT http://xxx.xxx.xxx.xxx:8500/v1/agent/service/deregister/\$\\{id\\}
#echo "curl --request PUT http://xxx.xxx.xxx.xxx:8500/v1/agent/service/deregister/\$\{id\}"
done < ip.list
生成do.sh
bash do.sh
一键加入监控