Prometheus基于consul服务发现

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


上一篇:Consul——在Windows10上配置开发环境


下一篇:《专题五 容器化微服务》之《第一章【补充资料】-SpringCloud》之《第五节 Springcloud生态》