單節(jié)點壓力
早期我使用的是 Prometheus + Grafana 這一套經(jīng)典的監(jiān)控系統(tǒng)落蝙,部署便利拷况,配置簡單且有獨立風(fēng)格 PromQL 查詢語句。
隨著時間的推移掘殴,在保存一年監(jiān)控數(shù)據(jù)的情況下:
-
max_over_time(prometheus_tsdb_head_series[1d])
= 17M 赚瘦,在 內(nèi)存計算器 預(yù)估內(nèi)存使用是 60G,然而實際使用在 80G 以上奏寨。 - Wal 文件夾達(dá)到 60GB 大小起意,重啟等待 replay 需要 20 分鐘才能恢復(fù)監(jiān)控。
嘗試使用 --storage.tsdb.wal-compression
參數(shù)壓縮 wal 文件病瞳,但將 wal 文件夾大小縮小到 40GB揽咕,重啟時間并無顯著加快。
考慮方案
1. 多實例 Prometheus
該方案吃力不討好L撞恕G咨啤!
- 由于 Prometheus 不支持負(fù)載均衡逗柴,那么多實例部署時需要將采集配置分散到多個實例上蛹头,需要大量工作將現(xiàn)有的抓取配置進(jìn)行拆分。
- 數(shù)據(jù)源拆分到多實例上戏溺,我們的 grafana 監(jiān)控面板需要重新定向數(shù)據(jù)源渣蜗。
- 報警規(guī)則可能不止依賴一個 metrics,那么如何拆分?jǐn)?shù)據(jù)源才能支持原有的報警規(guī)則旷祸?
2. Victoria
image
特點
- 組件劃分:
- Vmagent, vmselect, vminsert, vmstorage ......
- 支持 Remote_write耕拷, 但不支持 Remote_read
- 基于 PromQL 獨家實現(xiàn)的 VMQL
- 可使用 prometheus-operator crd,用 vmagent, vmrule, vmalert 將 proemtheus 的采集和報警也替換托享,徹底告別 prometheus
酷
- 使用了 remote_write 導(dǎo)入數(shù)據(jù)骚烧,Prometheus 換節(jié)點重啟損失數(shù)據(jù)非常少
- 數(shù)據(jù)流像瀑布流,架構(gòu)清晰容易理解闰围,組件可以橫向拓展
- group_left 表達(dá)式會自動將 multi-multi 情況轉(zhuǎn)成 one-multi赃绊,簡化 PromQL
不酷
- 一個 WebUI 都不提供,我懷疑他們招不起前端辫诅!Grafana 的 explore 查詢?nèi)肟跊]有 prometheus 的好用凭戴,而且 targets 和 rules 展示節(jié)點和報警實在是太方便了。
3. Thanos
image
特點
- 組件劃分:
- Sidecar, Query, Store Gateway, Compact, Ruler
- Thanos 管理的最小單位是 tsdb 的本地 block炕矮,每 2 小時 Prometheus 會生成一個 block 文件么夫,Thanos Sidecar 負(fù)責(zé)將其上傳到存儲端者冤。
- 最近 2h 的數(shù)據(jù)存儲于 prometheus,2h 以前的數(shù)據(jù)存儲于 thanos档痪。
酷
- 解決了 Prometheus 單點存儲的蛋疼問題涉枫,優(yōu)化了重啟時間
- 數(shù)據(jù)長期存儲單獨管理,還支持?jǐn)?shù)據(jù)降采樣
- Query 提供和 prometheus 相同的 WebUI腐螟,照顧到用戶 debug 和用戶習(xí)慣
- 組件可以橫向拓展
不酷
- Prometheus 2h 才打包一次塊并上傳愿汰,只使用本地文件系統(tǒng)的話,節(jié)點損壞會損失最多 2h 數(shù)據(jù)乐纸。因此衬廷,緊急換節(jié)點重啟服務(wù)失效的數(shù)據(jù)時長還是比較難接受的
- Prometheus 有 remote_write,為什么要提供一個 sidecar汽绢?使用 remote_write 的話吗跋,query 只需要請求 store gateway
- Compactor 是獨立組件,個人覺得放在 storage-gateway 一起就行了
- 這種結(jié)構(gòu)導(dǎo)致了相同的文件塊會在組件間傳輸多次
最終方案
嘗試搭建了 Thanos 和 Victoria宁昭,發(fā)現(xiàn) Thanos 架構(gòu)導(dǎo)致部分?jǐn)?shù)據(jù)在各組件之間存在不必要的重復(fù)傳輸跌宛,所以選擇了更輕量的 Victoria。