運(yùn)維監(jiān)控系統(tǒng)之Prometheus consul服務(wù)自動(dòng)發(fā)現(xiàn)
簡(jiǎn)介
prometheus支持從consul發(fā)現(xiàn)監(jiān)控目標(biāo)。
安裝consul
- sudo yum install -y yum-utils
- sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
- sudo yum -y install consul
配置consul
- vim /etc/consul.d/consul.hcl
可以根據(jù)自己的需要進(jìn)行配置,如果只是本地訪問的話,只需要監(jiān)聽127.0.0.1就可以了。然后就可以啟動(dòng)服務(wù)了
- systemctl enable consul
- systemctl start consul
consul測(cè)試導(dǎo)入數(shù)據(jù)
- package main
- import (
- "log"
- "strconv"
- "github.com/hashicorp/consul/api"
- )
- type Server struct {
- ID int
- IP string
- MetaTags map[string]string
- }
- func main() {
- config := api.DefaultConfig()
- config.Address = "127.0.0.1:8500"
- config.Token = ""
- client, err := api.NewClient(config)
- if err != nil {
- return
- }
- servers := []Server{
- {ID: 1, IP: "192.168.122.100", MetaTags: map[string]string{"idc": "idc1", "use_for": "testing1"}},
- {ID: 2, IP: "192.168.122.101", MetaTags: map[string]string{"idc": "idc1", "use_for": "testing2"}},
- {ID: 3, IP: "192.168.122.102", MetaTags: map[string]string{"idc": "idc1", "use_for": "testing3"}},
- }
- for i := range servers {
- err = client.Agent().ServiceRegister(&api.AgentServiceRegistration{
- ID: strconv.Itoa(servers[i].ID),
- Name: servers[i].IP,
- Port: 9100,
- Address: servers[i].IP,
- Meta: servers[i].MetaTags,
- Check: nil,
- Checks: nil,
- })
- if err != nil {
- log.Println(err)
- }
- }
- log.Println("End...")
- }
prometheus配置添加配置
在重新標(biāo)記標(biāo)簽的時(shí)候,提供以下數(shù)據(jù)元標(biāo)簽:
- __meta_consul_address:目標(biāo)地址
- __meta_consul_dc:目標(biāo)的數(shù)據(jù)中心名稱
- __meta_consul_health:服務(wù)的健康狀況
- __meta_consul_metadata_
:目標(biāo)的每個(gè)節(jié)點(diǎn)數(shù)據(jù)元的key - __meta_consul_node:為consul的節(jié)點(diǎn)名稱
- __meta_consul_service_address:目標(biāo)的服務(wù)地址
- __meta_consul_service_id:目標(biāo)的服務(wù)ID
- __meta_consul_service_metadata_
:目標(biāo)的每個(gè)服務(wù)數(shù)據(jù)元的key - __meta_consul_service_port:目標(biāo)的服務(wù)端口
- __meta_consul_service:目標(biāo)所屬的服務(wù)名稱
- __meta_consul_tagged_address_
:每個(gè)節(jié)點(diǎn)標(biāo)記目標(biāo)的關(guān)鍵值 - __meta_consul_tags:標(biāo)簽根據(jù)分隔符拼接的結(jié)果,默認(rèn)分隔符是,
- ...
- - job_name: 'node_exporter'
- consul_sd_configs:
- # consule 地址
- - server: '127.0.0.1:8500'
- services: []
- relabel_configs:
- # 通過元數(shù)據(jù)標(biāo)簽過濾需要的數(shù)據(jù)
- - source_labels: [__meta_consul_service_metadata_IDC]
- # 如果匹配
- regex: idc1
- # 執(zhí)行動(dòng)作,keep表示如果不匹配就丟棄數(shù)據(jù)
- action: keep
- # 通過元數(shù)據(jù)貼標(biāo)簽
- - regex: __meta_consul_service_metadata_(.+)
- action: labelmap
- ...
添加配置之后,就可以reload一下prometheus服務(wù),就可以在target頁面獲取到我們需要的監(jiān)控目標(biāo)了。
總結(jié)
prometheus使用consul作為服務(wù)配置發(fā)現(xiàn)比較靈活,可以跨機(jī)器進(jìn)行部署,也發(fā)便cmdb下發(fā)配置。