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的配置文件了
就可以實現動態的服務的發現。
