部署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、健康檢查