Grafana 顯示 consul_up指標(biāo)顯示leader節(jié)點(diǎn)在18:00后發(fā)生down現(xiàn)象

源碼分析
consul exporter 暴露的 consul_up指標(biāo),實(shí)際上是通過Http向各個(gè)endpoint發(fā)起請(qǐng)求,只要任意一個(gè)endpoint請(qǐng)求超時(shí)或者server端內(nèi)部異常,則標(biāo)識(shí)consul_down。

API映射
ok = e.collectPeersMetric(ch) r := s.c.newRequest("GET", "/v1/status/peers") 查詢consul server 列表 (status.go)
ok = e.collectLeaderMetric(ch) r := s.c.newRequest("GET", "/v1/status/leader") 查詢consul server leader (status.go)
ok = e.collectNodesMetric(ch) r := c.c.newRequest("GET", "/v1/catalog/nodes") 查詢consul node 列表 (catalog.go)
ok = e.collectMembersMetric(ch) r := a.c.newRequest("GET", "/v1/agent/members") 查詢gossip members (agent.go)
ok = e.collectServicesMetric(ch) r := c.c.newRequest("GET", "/v1/catalog/services") 查詢所有service列表 (catalog.go)
ok = e.collectHealthStateMetric(ch) r := h.c.newRequest("GET", "/v1/health/state/any) 查詢所有狀態(tài)的service (health.go)
ok = e.collectKeyValues(ch)
Consul exporter LEVEL=ERROR日志

結(jié)論
consul down原因:consul exporter 向consul server leader GET "/v1/status/peers請(qǐng)求超時(shí),導(dǎo)致失敗, 因此consul down并不意味著consul server leader 掛掉。
目前,exporter 請(qǐng)求consul server 的默認(rèn)consul.timeout=500ms,至于為何超時(shí),可能由于某個(gè)時(shí)刻 consul server leader cpu 負(fù)載較大,未能及時(shí)響應(yīng)請(qǐng)求。


consul 的性能瓶頸主要體現(xiàn)為:read受cpu約束 ,write 受i/o約束。
服務(wù)型建議選擇高CPU,ESSD磁盤,內(nèi)存要求不是很高