Prometheus服务发现Consul
consul的集群介绍可以查看这篇博客:https://www.cnblogs.com/dalianpai/p/12269024.html
docker搭建consul集群
- 启动第一个consul服务:consul1
docker run --name consul1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul:1.2.2 agent -server -bootstrap-expect 2 -ui -bind=0.0.0.0 -client=0.0.0.0
8500 http 端口,用于 http 接口和 web ui
8300 server rpc 端口,同一数据中心 consul server 之间通过该端口通信
8301 serf lan 端口,同一数据中心 consul client 通过该端口通信
8302 serf wan 端口,不同数据中心 consul server 通过该端口通信
8600 dns 端口,用于服务发现
-bbostrap-expect 2: 集群至少两台服务器,才能选举集群leader
-ui:运行 web 控制台
-bind: 监听网口,0.0.0.0 表示所有网口,如果不指定默认为127.0.0.1,则无法和容器通信
-client : 限制某些网口可以访问
- 获取 consul server1 的 ip 地址
docker inspect --format '{{ .NetworkSettings.IPAddress }}' consul1
- 启动第二个consul服务:consul2, 并加入consul1(使用join命令)
docker run --name consul2 -d -p 8501:8500 consul agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.5
- 启动第三个consul服务:consul3,并加入consul1
docker run --name consul3 -d -p 8502:8500 consul agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.5
- 查看运行的容器(consul集群状态)
[root@localhost targets]# docker exec -it consul1 consul members
Node Address Status Type Build Protocol DC Segment
2fa2b95d31d5 172.17.0.5:8301 alive server 1.2.2 2 dc1 <all>
4b8b097f95c9 172.17.0.7:8301 alive server 1.8.4 2 dc1 <all>
d383118f1ffb 172.17.0.6:8301 alive server 1.8.4 2 dc1 <all>
进行服务注册和剔除
接下来,我们要注册服务到 Consul 中,可以通过其提供的 API 标准接口来添加。那么先注册一个测试服务,该测试数据为本机 node-exporter
服务信息,服务地址及端口为 node-exporter
默认提供指标数据的地址,执行如下命令:
[root@localhost targets]# curl -X PUT -d '{"id": "node-exporter","name": "node-exporter-192.168.1.124","address": "192.168.1.124","port": 9100,"tags": ["prometheus"],"checks": [{"http": "http://192.168.1.124:9100/metrics", "interval": "5s"}]}' http://192.168.1.124:8500/v1/agent/service/register
[root@localhost targets]# ll
提一下,如果要注销掉某个服务,可以通过如下 API 命令操作,例如注销上边添加的 node-exporter
服务
curl -X PUT http://192.168.1.124:8500/v1/agent/service/deregister/node-exporter
配置 Prometheus 实现自动服务发现
现在 Consul 服务已经启动完毕,并成功注册了一个服务,接下来,我们需要配置 Prometheus 来使用 Consul 自动服务发现,目的就是能够将上边添加的服务自动发现到 Prometheus 的 Targets 中,增加 prometheus.yml
配置如下:
Prometheus 配置consul 服务发现
consul 可以使用的元标签:
__meta_consul_address:目标的地址
__meta_consul_dc:目标的数据中心名称
__meta_consul_tagged_address_<key>:每个节点标记目标的地址键值
__meta_consul_metadata_<key>:目标的每个节点元数据键值
__meta_consul_node:为目标定义的节点名称
__meta_consul_service_address:目标的服务地址
__meta_consul_service_id:目标的服务ID
__meta_consul_service_metadata_<key>:目标的每个服务元数据键值
__meta_consul_service_port:目标的服务端口
__meta_consul_service:目标所属服务的名称
__meta_consul_tags:标记分隔符连接的目标的标记列表