通过调用agent的api向consul注册service(node export),并通过prometheus获取node export地址
1、概述
我们使用consul的主要的目标是将需要的export信息注册到consul中,然后通过prometheus来从consul中动态的去发现这些exporter的地址信息,然后进行数据的采集。
OK,本文就简单介绍,如何通过调用api的方式,向consul中注册service。
2、通过api向consul中注册
2.1、注册service
通过 /agent/service/register 这个endpoint来向agent中注册一个service.
通过以下的示例,向agent中来注册serivice
curl \
--request PUT \
--data \
'
{
"ID": "node_export-172.20.58.18-8088",
"Name": "node_export",
"Tags": ["primary"],
"Address": "172.20.58.18",
"Port": 8088
}' \
http://127.0.0.1:8500/v1/agent/service/register?replace-existing-checks=true
参数释义:
- ID:可以是任意指定的名字,不过要唯一,可以使用多个
- name:service的名字,相同的service不同id就是不同实例
- Address: 具体的node export的地址
- port:端口
最后的那个url:consul的地址和服务注册路径
2.2、查看注册信息
OK,注册之后,我们可以登录consul的页面,看下具体的信息
OK,ID就是这里面的instance实例信息。因为一个service下面可以有很多的实例。可以看到对应的网络的信息。
2.3、再增加service实例
OK,那么我们来测试下,在这个service下增加一个实例
通过下面的命令进行增加service实例
curl \
--request PUT \
--data \
'
{
"ID": "node_export-172.20.58.18-8089",
"Name": "node_export",
"Tags": ["primary"],
"Address": "172.20.58.18",
"Port": 8089
}' \
http://127.0.0.1:8500/v1/agent/service/register?replace-existing-checks=true
查看service
已经是2个实例了
查看实例,已经是2个,各自分别有自己的IP地址和端口。
3、通过prometheus获取consul中的export信息
在prometheus.yml中增加如下的配置
- job_name: 'node resources'
scrape_interval: 25s
consul_sd_configs:
- server: "172.20.58.18:8500"
datacenter: "dc1"
scheme: "http"
services:
- node_export
重启,prometheus-server
登录prometheus的web界面,status-target
可以看到已经获取了2个node exporter的终端地址。
这样,prometheus就会自动对这个2个节点进行监控了。
那么,后续从consul中注销节点,会如何呢?
4、从consul中注销service
通过以下的api,从consul中注销service
curl \
--request PUT \
http://127.0.0.1:8500/v1/agent/service/deregister/node_export-172.20.58.18-8088
最后的参数是service的id.
ok,8088的实例已经下线。
再看prometheus
只剩下一个节点了。
这样,每次增加,减少node exporter,就不需要手动的更新prometheus的配置文件了
就可以实现动态的服务的发现。