- Thanos和 VictoriaMetrics都是用來作為 Prometheus 長期存盤的成熟方案,其中 VictoriaMetrics也開源了其集群版本,功能更加強大,
主要功能:
- 長期存盤,可以保留任意時間的監控資料,
- 對多個 Prometheus 實體采集的資料進行全域聚合查詢,
- 可水平擴展,
Thanos:
Thanos包含以下幾個核心組件:
Sidecar:
每個 Prometheus 實體都包含一個 Sidecar,它與 Prometheus 實體運行在同一個 Pod中,它有兩個作用:
- 將本地超過 2 小時的監控資料上傳到物件存盤,如 Amazon S3 或 Google 云存盤,
- 將本地監控資料(小于 2 小時)提供給 Thanos Query 查詢,
Store Gateway :
將物件存盤的資料提供給 Thanos Query 查詢,
Query:
實作了 Prometheus 的查詢 API,將 Sidecar和物件存盤提供的資料進行聚合最侄訓傳給查詢資料的客戶端,
Compact :
默認情況下,Sidecar 以 2 小時為單位將監控資料上傳到物件存盤中,Compactor會逐漸將這些資料塊合并成更大的資料塊,以提高查詢效率,減少所需的存盤大小,
Ruler :
通過查詢 Query獲取全域資料,然后對監控資料評估記錄規則[11]和告警規則,決定是否發起告警,還可以根據規則配置計算新指標并存盤,同時也通過 StoreAPI 將資料暴露給 Query,同樣還可以將資料上傳到物件存盤以供長期保存,由于 Query 和底層組件的可靠性較低,Ruler組件通常故障率較高,
Receiver :
這是一個實驗性組件,適配了 Prometheus 的 remote write API,也就是所有Prometheus 實體可以實時將資料 push 到 Receiver,在 Thanos v0.5.0 時,該組件還沒有正式發布,
架構圖:
Thanos 需要通過以下步驟來建立寫入程序:
禁用每個 Prometheus 實體的本地資料壓縮,具體做法是將 --storage.tsdb.min-block-duration 和 --storage.tsdb.max-block-duration 這兩個引數的值設定為相同的值,
Thanos 要求關閉壓縮是因為 Prometheus 默認會以 2, 25, 25*5 的周期進行壓縮,如果不關閉,可能會導致 Thanos 剛要上傳一個 block,這個 block 卻被壓縮中,導致上傳失敗,更多詳情請參考這個 issue[17],如果 --storage.tsdb.retainer.time 引數的值遠遠高于 2 小時,禁用資料壓縮可能會影響 Prometheus 的查詢性能,
在所有的 Prometheus 實體中插入 Sidecar,這樣 Sidecar 就可以將監控資料上傳到物件存盤,
設定 Sidecar 監控,
為每個物件存盤的 bucket 配置壓縮器,即 Compact 組件,
VictoriaMetrics:
VictoriaMetrics 集群版包含以下幾個核心組件:
- vmstorage : 存盤資料,
- vminsert : 通過 remote write API 接收來自 Prometheus 的資料并將其分布在可用的vmstorage 節點上,
- vmselect : 從 vmstorage 節點獲取并聚合所需資料,回傳給查詢資料的客戶端(如Grafana),每個組件可以使用最合適的硬體配置獨立擴展到多個節點,
架構圖:

- VictoriaMetrics 需要在 Prometheus 中添加遠程存盤的配置,以將采集到的樣本資料通過 Remote Write的方式寫入遠程存盤 VictoriaMetrics 中,不需要在 Prometheus 中插入 Sidecar,也不需要禁用本地資料壓縮,
總結:
Thanos 和 VictoriaMetrics 分別使用了不同的方法來提供長期存盤、聚合查詢和水平擴展性,
VictoriaMetrics通過標準的 remote_write API[40] 接收來自 Prometheus 實體寫入的資料,然后將其持久化(如 GCE HDD磁盤、Amazon EBS[42] 或其他磁盤),而 Thanos 則需要禁用每個 Prometheus實體的本地資料壓縮,并使用非標準的 Sidecar 將資料上傳至 S3 或 GCS,同時還需要設定 Compactor,用于將物件存盤bucket 上的小資料塊合并成大資料塊,
VictoriaMetrics 開箱即實作了全域查詢視圖的 Prometheus queryAPI,由于 Prometheus會實時將抓取到的資料復制到遠程存盤,所以它不需要在集群外建立任何外部連接來實作全域查詢,Thanos 需要設定 StoreGateway、SIdecar 和 Query 組件才能實作全域查詢,對于大型的 Thanos 集群來說,在 Query組件和位于不同資料中心(可用區域)的 Sidecar 之間提供可靠安全的連接是相當困難的,Query 組件的性能會受到性能最差的Sidecar 或 Store Gateway 的影響,
VictoriaMetrics 集群可以快速部署到 Kubernetes中,因為它的架構非常簡單[44],而 Thanos 在 Kubernetes 中的部署和配置非常復雜,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/53804.html
標籤:其他
下一篇:CAP定理[布魯爾定理]
