Thanos 的目標#
Thanos 是 Prometheus 長期儲存(Long-Term Storage)三大選項中的最後一位。最初由遊戲後端平台 Improbable 為應對自家大量基礎設施與服務的監控需求而開發,2017 年 11 月開源,2019 年加入 CNCF,目前為 Incubating Project。
Thanos 主要瞄準四個目標:
- 單一資料源:整合多個 Prometheus 的資料,讓使用者透過單一資料源查詢所有 Prometheus。
- 無限長期儲存:以 Object Storage 作為長期儲存後端,支援 AWS S3、Google Cloud Storage、Azure Blob Storage、OpenStack Swift。
- 完全相容 Prometheus:支援 Prometheus Query API,Grafana 等既有工具都能照常使用。
- 降取樣(Downsampling)與壓縮(Compaction):歷史資料降取樣以加速查詢、壓縮以節省儲存空間。
Improbable 自我定位為「Metaverse Technology Company」,主要產品 SpatialOS 是大型多人遊戲的雲端開發平台;他們需要對大量遊戲後端做穩定監控,這正是 Thanos 誕生的背景。
架構#
Thanos 有兩種主要部署模式:Sidecar 與 Receive。
主要元件:
- Sidecar:跑在 Prometheus 旁邊,負責讀取 Prometheus 的資料並上傳到 Object Storage。
- Receiver:直接接收 Prometheus 的 Remote Write,再上傳到 Object Storage(不需 Sidecar)。
- Store Gateway:當 Sidecar 或 Receiver 已經沒有舊資料時,從 Object Storage 取出資料供查詢。
- Compactor:對 Object Storage 中的資料做壓縮、降取樣,並清除過舊資料。
- Rule:執行 Recording / Alerting Rule,並將結果上傳 Object Storage。
- Querier:對外提供 Prometheus API 查詢,從 Store Gateway、Sidecar 或 Receiver 收集資料。
- Query Frontend:在 Querier 之前再加一層,提供查詢切分與結果快取,加速大範圍查詢。
使用 Sidecar 模式時,搭配的 Prometheus 必須將
--storage.tsdb.min-block-duration與--storage.tsdb.max-block-duration設成相同值,等於關閉 Prometheus 自身的 Compaction,把這項工作交給 Thanos Compactor。實務值建議為2h;Lab 為了快速驗證會用5m。
Downsampling 細節#
Cortex 與 Mimir 沒有的招牌功能在 Thanos 上出現了:Downsampling。
Prometheus Metrics 的採樣頻率常常是每 15 秒一次,一年下來單一條 Series 就會有 200 多萬個資料點。即便 Prometheus 的 Range Query 已經會用 Step 參數降低回傳資料量,但這種臨時抽樣有兩個問題:
- 抽到的單點不一定能代表周圍的資料趨勢。
- 查詢時還要花時間計算要回哪些點。
Thanos 採用的 Downsampling 策略是事前把較舊的資料用統計方式(Sum、Count、Min、Max 等)歸納成一個代表值,存成新的 Block。如此一來,長範圍查詢可以直接命中已經算好的代表值,查詢速度會明顯提升。
Downsampling 並不會節省儲存空間。Thanos 不會刪除原始資料,反而每個原始 Block 會多衍生兩個 Block,整體儲存量會略為增加。保留原始資料的好處是,當你在長範圍查詢中發現異常時,仍可回頭看原始資料做更細緻的分析。
Lab 摘要#
範例 10-thanos 提供兩種啟動方式。
Sidecar 模式#
docker-compose up -d服務:
- Prometheus:
http://localhost:9090 - Thanos Query Frontend:
http://localhost:9091 - Grafana:
http://localhost:3000,預設admin/admin
關閉:
docker-compose downReceive 模式#
docker-compose -f docker-compose.receive.yaml up -d關閉:
docker-compose -f docker-compose.receive.yaml downLab 達成的目標:
- 建立 Thanos 供 Grafana 查詢。
- Sidecar 範例:以 Sidecar 讀取 Prometheus 資料並寫入 Object Storage。
- Receive 範例:以 Receiver 接收 Prometheus 的 Remote Write 寫入 Object Storage。
- Grafana 把 Thanos Query Frontend 當成 Metrics Data Source。
小結#
Thanos 是專為解決 Prometheus 長期儲存與大規模查詢需求而生,除了長期儲存、多來源整合、查詢加速之外,Downsampling 是它最具識別度的特色。它在 Red Hat 等大型廠商的 Monitoring Stack(OKD / OpenShift)中都有蹤跡。
Cortex、Mimir、Thanos 三家就此介紹完畢。實務選擇要回到「需求是什麼」——觀察工具誕生背景、核心開發者目前任職方向,也是判斷工具未來走勢的有趣切入點。
原文出處#
- 原書/iThome:https://ithelp.ithome.com.tw/articles/10326593