官方地址:
www.consul.io
二进制部署:
[root ~]# wget https://releases.hashicorp.com/consul/1.10.2/consul_1.10.2_linux_amd64.zip[root ~]# unzip consul_1.7.2_linux_amd64.zip[root ~]# mkdir /usr/local/consul[root ~]# mv consul /usr/local/consul/[root ~]# mkdir /var/consul/logs -p[root ~]# mkdir /var/consul/data -p
配置文件:
[root@centos7 consul]# cat consul.json{"datacenter": "consul","data_dir": "/var/consul/data","log_file": "/var/consul/logs/consul.log","log_level": "INFO","node_name": "consul","server": true,"ui": true,"bootstrap_expect": 1,"bind_addr": "192.168.168.155", #本机ip"client_addr": "0.0.0.0","raft_protocol": 3,"enable_debug": false,"rejoin_after_leave": true,"enable_syslog": false}
systemctl启动
[Unit]Description=ConsulDocumentation=https://www.consul.io/[Service]ExecStart=/usr/local/consul/consul agent -config-dir=/usr/local/consulExecReload=/bin/kill -HUP $MAINPIDKillSignal=SIGINTLimitNOFILE=65536[Install]WantedBy=multi-user.target
注册服务
使用json方式{"id":"node-exporter","name":"prometheus-02","address":"192.168.168.158","port":9100,"tags":["node-export"],"meta":{"instance":"prometheus","group":"demo"},"checks":[{"http":"http://192.168.168.158:9100/metrics","interval":"5s"}]}curl -x -X PUT -d @./node_exporter.json http://192.168.168.156:8500/v1/agent/service/register#curl方式curl -X PUT -d '{"id": "node-exporter","name": "prometheus-01","address": "192.168.168.156","port": 9100,"tags": ["node-export"],"meta": {"instance": "prometheus", "group": "demo"}, "checks": [{"http": "http://192.168.168.156:9100/metrics", "interval": "5s"}]}' http://192.168.168.155:8500/v1/agent/service/register
注销掉某个注册的服务
curl -X PUT http://192.168.168.155:8500/v1/agent/service/deregister/${consul 上 services的名称}
示例 prometheus.yaml配置
- job_name: 'consul-node-export' #Targetsconsul_sd_configs: #使用consul 服务发现- server: '192.168.168.155:8500' #consul服务地址services: [] #refresh_interval: 3s # 刷新间隔relabel_configs: #自定义标签及分类- source_labels: [__meta_consul_tags] #会匹配json里注册的tags数据regex: .*node-export.* #匹配tags为node-export的action: keep # 丢弃没有匹配到 regex 正则表达式内容的 Target- source_labels: [__meta_consul_service_metadata_group] #匹配json注册的数据metadata 下key为grouptarget_label: 'group' #就使用json里group的value
relabel_configs 官方文档https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
示例 注册到consul的服务
{"id":"prometheus-01", #唯一可以是ip地址也可以是主机名"name":"node-export", #最好是和prometheus.yaml 里的job_name 一致好区分"address":"192.168.168.156", #注册服务的IP地址"port":9100, #注册服务的端口 node-export的端口其他的export就写其他的端口"tags":[ #为了进行过滤"node-export"],"meta":{ #自定义元数据"instance":"prometheus", #这里写了 但是peometheus没有写不会生效还是默认的"group":"demo" #对应上面的prometheus.yaml的 source_labels},"checks":[ #健康检查{"http":"http://192.168.168.156:9100/metrics", #就是export暴露的指标"interval":"5s"}]}
批量注册脚本(exporter的端口还需要完善)
#!/bin/bashexport=$1if [ $# -lt 1 ];thenecho "please enter; please input [node=node-exporter] [memcached=memcached-exporter]"exit -1fihost=`hostname`machine_physics_net=$(ls /sys/class/net/ | grep -v "`ls /sys/devices/virtual/net/`")IP=$(ip addr | grep "$machine_physics_net" | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')put_consul="http://192.168.168.155:8500/v1/agent/service/register"if [ "$export"x == "node"x ];thenport='9100'elif [ "$expor"x == "memcached"x ]port='9150'ficurl -X PUT -d '{"id": "'${host}'","name": "'${export}'","address": "'${IP}'","port": '${port}',"tags": ["'${export}'"],"meta": {"node": "nginx-server", "group": "manager"}, "checks": [{"http": "http://'${export}':'${port}'/metrics", "interval": "5s"}]}' ${put_consul} > /dev/null 2>&1 && echo -e "\033[92m $IP 注册成功 \033[0m"
