通过调用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的配置文件了

就可以实现动态的服务的发现。

posted @ 2022-03-14 17:21  Zhai_David  阅读(1072)  评论(0编辑  收藏  举报