官方地址:
    www.consul.io

    二进制部署:

    1. [root ~]# wget https://releases.hashicorp.com/consul/1.10.2/consul_1.10.2_linux_amd64.zip
    2. [root ~]# unzip consul_1.7.2_linux_amd64.zip
    3. [root ~]# mkdir /usr/local/consul
    4. [root ~]# mv consul /usr/local/consul/
    5. [root ~]# mkdir /var/consul/logs -p
    6. [root ~]# mkdir /var/consul/data -p

    配置文件:

    1. [root@centos7 consul]# cat consul.json
    2. {
    3. "datacenter": "consul",
    4. "data_dir": "/var/consul/data",
    5. "log_file": "/var/consul/logs/consul.log",
    6. "log_level": "INFO",
    7. "node_name": "consul",
    8. "server": true,
    9. "ui": true,
    10. "bootstrap_expect": 1,
    11. "bind_addr": "192.168.168.155", #本机ip
    12. "client_addr": "0.0.0.0",
    13. "raft_protocol": 3,
    14. "enable_debug": false,
    15. "rejoin_after_leave": true,
    16. "enable_syslog": false
    17. }

    systemctl启动

    1. [Unit]
    2. Description=Consul
    3. Documentation=https://www.consul.io/
    4. [Service]
    5. ExecStart=/usr/local/consul/consul agent -config-dir=/usr/local/consul
    6. ExecReload=/bin/kill -HUP $MAINPID
    7. KillSignal=SIGINT
    8. LimitNOFILE=65536
    9. [Install]
    10. WantedBy=multi-user.target

    参数解释: https://www.consul.io/docs/agent/options

    注册服务

    1. 使用json方式
    2. {
    3. "id":"node-exporter",
    4. "name":"prometheus-02",
    5. "address":"192.168.168.158",
    6. "port":9100,
    7. "tags":[
    8. "node-export"
    9. ],
    10. "meta":{
    11. "instance":"prometheus",
    12. "group":"demo"
    13. },
    14. "checks":[
    15. {
    16. "http":"http://192.168.168.158:9100/metrics",
    17. "interval":"5s"
    18. }
    19. ]
    20. }
    21. curl -x -X PUT -d @./node_exporter.json http://192.168.168.156:8500/v1/agent/service/register
    22. #curl方式
    23. 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

    注销掉某个注册的服务

    1. curl -X PUT http://192.168.168.155:8500/v1/agent/service/deregister/${consul services的名称}

    示例 prometheus.yaml配置

    1. - job_name: 'consul-node-export' #Targets
    2. consul_sd_configs: #使用consul 服务发现
    3. - server: '192.168.168.155:8500' #consul服务地址
    4. services: [] #
    5. refresh_interval: 3s # 刷新间隔
    6. relabel_configs: #自定义标签及分类
    7. - source_labels: [__meta_consul_tags] #会匹配json里注册的tags数据
    8. regex: .*node-export.* #匹配tagsnode-export
    9. action: keep # 丢弃没有匹配到 regex 正则表达式内容的 Target
    10. - source_labels: [__meta_consul_service_metadata_group] #匹配json注册的数据metadata keygroup
    11. target_label: 'group' #就使用jsongroupvalue

    relabel_configs 官方文档https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config

    示例 注册到consul的服务

    1. {
    2. "id":"prometheus-01", #唯一可以是ip地址也可以是主机名
    3. "name":"node-export", #最好是和prometheus.yaml 里的job_name 一致好区分
    4. "address":"192.168.168.156", #注册服务的IP地址
    5. "port":9100, #注册服务的端口 node-export的端口其他的export就写其他的端口
    6. "tags":[ #为了进行过滤
    7. "node-export"
    8. ],
    9. "meta":{ #自定义元数据
    10. "instance":"prometheus", #这里写了 但是peometheus没有写不会生效还是默认的
    11. "group":"demo" #对应上面的prometheus.yaml source_labels
    12. },
    13. "checks":[ #健康检查
    14. {
    15. "http":"http://192.168.168.156:9100/metrics", #就是export暴露的指标
    16. "interval":"5s"
    17. }
    18. ]
    19. }

    批量注册脚本(exporter的端口还需要完善)

    1. #!/bin/bash
    2. export=$1
    3. if [ $# -lt 1 ];then
    4. echo "please enter; please input [node=node-exporter] [memcached=memcached-exporter]"
    5. exit -1
    6. fi
    7. host=`hostname`
    8. machine_physics_net=$(ls /sys/class/net/ | grep -v "`ls /sys/devices/virtual/net/`")
    9. IP=$(ip addr | grep "$machine_physics_net" | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
    10. put_consul="http://192.168.168.155:8500/v1/agent/service/register"
    11. if [ "$export"x == "node"x ];then
    12. port='9100'
    13. elif [ "$expor"x == "memcached"x ]
    14. port='9150'
    15. fi
    16. curl -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"