1. 程式人生 > >部署consul,用於prometheus動態服務發現

部署consul,用於prometheus動態服務發現

在一臺主機上部署node-exporter探針, 如果要通過prometheus實現監控,需要修改配置檔案,新增一個target。如果每次新增target都去變更伺服器上的配置檔案會非常麻煩。Prometheus 提供了多種動態服務發現的功能,這裡以consul為例。consul是一個服務發現和註冊的工具。

客戶端的一個介面,需要呼叫服務A-N。客戶端必須要知道所有服務的網路位置的,在服務很多時配置十分麻煩。***在加入服務發現模組之後,服務發現模組定時的輪詢檢視這些服務能不能訪問。***客戶端在呼叫服務A-N的時候,就跑去服務發現模組問下它們的網路位置,然後再呼叫它們的服務。客戶端完全不需要記錄這些服務網路位置,實現了客戶端與服務端的解耦。

在這裡插入圖片描述

在這裡插入圖片描述

在prometheus的configmap.yaml檔案中進行配置:

-job_name: 'consul-prometheus'
        consul_sd_configs:    
          - server: '10.4.41.161:8500'
            services: []
        relabel_configs:
          - source_labels: ['__meta_consul_service']
            regex: .*Node.*
            action: keep

regex 是正則表示式,這裡表示的是動態發現consul中所有註冊的服務中,名中帶有Node的服務(__meta_consul_service表示的是服務名,也可以是其他的引數,如__meta_consul_tags表示的是服務的tag)。如果要表示無篩選條件的發現,可以將.*Node.* 更改為(.+)

二進位制安裝:

./consul agent -dev -ui -node=consul-dev  -client=10.4.54.31 

映象安裝(推薦):

sudo docker run --name consul -d -p 8500:8500 consul

在consul所在的主機執行如下程式碼,可以進行註冊(HTTP API 方式):

curl -X PUT -d '{"id": "NodeTest","name": "NodeTest","address": "10.4.**.**","port": 9100,"tags": ["dev"],"checks": [{"http": "http://10.4.**.**:9100/","interval": "5s"}]}'     http://10.4.**.**:8500/v1/agent/service/register

consul的web端的訪問地址:http://ip:8500/ui/dc1/services

也可以將註冊的內容寫成一個json檔案,參考文件:https://blog.csdn.net/poorcoder_/article/details/79120218

==================================================

待研究:
1、如果是虛擬機器執行,要想在主機上開啟網頁,需要關閉SELinux和防火牆。

2、如果因為防火牆的問題,8500埠沒有開啟,則執行以下命令:

firewall-cmd --zone=public --add-port=8500/tcp --permanent  
systemctl stop firewalld.service 
systemctl start firewalld.service 

這樣再啟動consul,就可以訪問了

3、健康檢查