一、現(xiàn)實(shí)可用的小規(guī)模高可用方案
??關(guān)于Prometheus的高可用,官方文檔中只提供了一個(gè)解決方案,具體實(shí)現(xiàn)方式如下:

??使用兩個(gè)Prometheus主機(jī)監(jiān)控同樣的目標(biāo),然后有告警出現(xiàn),也會(huì)發(fā)送同樣的告警給Alertmanager,然后使用Alertmanager自身的去重告警功能,只發(fā)出一條告警出來(lái)。從而實(shí)現(xiàn)了prometheus高可用的一個(gè)架構(gòu)。
??基于此架構(gòu),我們還可以使用keepalived做雙機(jī)熱備,通過(guò)VIP與grafana相連。實(shí)現(xiàn)一個(gè)完整的帶web界面展示告警的高可用Prometheus監(jiān)控架構(gòu)。

??根據(jù)查找的資料,可知Prometheus的監(jiān)控?cái)?shù)量和Prometheus主機(jī)的內(nèi)存和磁盤大小的關(guān)系表。


??根據(jù)表格中數(shù)據(jù),我們可以用兩臺(tái)8G內(nèi)存,磁盤大小為100G的Prometheus主機(jī)做主備架構(gòu),進(jìn)行500個(gè)節(jié)點(diǎn)以下的基礎(chǔ)架構(gòu)的監(jiān)控,然后由于抓取間隔和數(shù)據(jù)留存時(shí)間的設(shè)定是直接關(guān)乎內(nèi)存和磁盤空間的使用率,所以我們可以通過(guò)調(diào)整這兩點(diǎn),來(lái)調(diào)整內(nèi)存和磁盤空間到合適的值。
二、大規(guī)模監(jiān)控的高可用方案
??根據(jù)官方文檔,Prometheus有一個(gè)面向于大規(guī)模目標(biāo)監(jiān)控的功能FEDERATION聯(lián)邦機(jī)制,是指從其它Prometheus主機(jī)上抓取特定的數(shù)據(jù)到一個(gè)匯總的Prometheus主機(jī)中,既然是從其它Prometheus主機(jī)匯總而來(lái),那么數(shù)據(jù)量會(huì)很大,難以長(zhǎng)久儲(chǔ)存在主機(jī)本地,所以我們需要使用Prometheus的遠(yuǎn)程讀寫數(shù)據(jù)庫(kù)的功能,來(lái)遠(yuǎn)程保存至第三方數(shù)據(jù)庫(kù)。
??而這個(gè)用于匯總的Prometheus主機(jī),我們也使用主備兩臺(tái)主機(jī)做高可用處理,不過(guò)與第三方數(shù)據(jù)庫(kù)之間需要用一個(gè)adapter工具,來(lái)做主備數(shù)據(jù)庫(kù)傳輸切換。如下圖所示。

??在這里第三方存儲(chǔ)是使用的PostgreSQL + TimescaleDB,而adapter是用的官方開發(fā)的Prometheus-postgresql-adpter自帶leader切換的功能,當(dāng)設(shè)置好Prometheus和adapter后,如果adapter長(zhǎng)時(shí)間沒有收到對(duì)應(yīng)的Prometheus的數(shù)據(jù),那么它會(huì)自動(dòng)鎖定然后切換到備用adapter,備用adpter會(huì)將自己所對(duì)應(yīng)的Prometheus主機(jī)的數(shù)據(jù)發(fā)往第三方存儲(chǔ)。
??也就是說(shuō),這兩臺(tái)Prometheus主機(jī)都是會(huì)實(shí)時(shí)接收其它相同Prometheus主機(jī)的數(shù)據(jù),然后只有其中一方的數(shù)據(jù)會(huì)被標(biāo)識(shí)為leader的adapter發(fā)送到第三方存儲(chǔ)中。完整架構(gòu)圖如下。

三、總結(jié)
??不管是第一章的小規(guī)模監(jiān)控高可用方案還是第二章的大規(guī)模監(jiān)控高可以方案,主要應(yīng)用的還是Prometheus官方文檔提到高可用方法和Prometheus的聯(lián)邦機(jī)制機(jī)遠(yuǎn)程讀寫存儲(chǔ)的功能。而主備切換的工具keepalive和Prometheus-postgresql-adpter,以及遠(yuǎn)程數(shù)據(jù)庫(kù)PostgreSQL+TimescaleDB,這些都可以替換成Nginx proxy、服務(wù)注冊(cè)工具consul,遠(yuǎn)程存儲(chǔ)Thanos,我們可以根據(jù)實(shí)際需求做測(cè)試,再?zèng)Q定使用哪些第三方工具。
遠(yuǎn)程存儲(chǔ)相關(guān)參考資料:https://blog.timescale.com/blog/prometheus-ha-postgresql-8de68d19b6f5/