Prometheus 的儲存定位#
Prometheus 文件中明確指出,本地儲存並非設計來作為長期儲存(Long-Term Storage)的方案;要保留更長時間、提高耐用度,需要搭配外部儲存服務。Prometheus 透過 Remote Write 與 Remote Read 機制,可將指標推送或讀取到其他儲存系統。官網列出了多種支援的方案,本章先介紹由 Grafana Labs 開發的 Mimir。
Mimir 是什麼#
Mimir 並不是要取代 Prometheus,而是補強它在規模、可用性與保存期限上的不足。它的主打能力包括:
- 儲存超過 10 億筆 Prometheus Metrics。
- 高可用(High Availability)。
- 多租戶(Multi-tenancy)。
- 快速查詢。
使用方式:把 Prometheus 設定為 Remote Write 到 Mimir,Grafana 改為查詢 Mimir。由於 Mimir 對外提供與 Prometheus 相同的 API、查詢語言仍是 PromQL,Grafana 端只要在 Data Source 把 URL 換成 Mimir 即可,型別仍為 Prometheus。
一段身世背景#
Mimir 在 2022 年 3 月公開發表並開源,雖然看起來年輕,但它其實是 2020 年就推出的 Grafana Enterprise Metrics(GEM)的開源版本,第一個公開版本即為 2.0.0,背後設計與架構已經在企業環境驗證過很長一段時間。
Mimir 是北歐神話中的智慧巨人,被斬首後其首級在奧丁施法下繼續存活、傳遞智慧——這個「保存知識」的形象,與「儲存與提供 Metrics 查詢」的角色頗為呼應。
Features#
- 高可擴展性:Mimir 可以水平擴展,需要更大容量時加機器即可。
- 單一資料源:當有多個 Prometheus 時,可全部 Remote Write 到同一個 Mimir,不必再透過 Prometheus Federation 串查詢。
- 儲存成本低:使用 Object Storage 作為長期儲存,可選 AWS S3、Google Cloud Storage、Azure Blob Storage、OpenStack Swift 等,或 S3 相容的服務(例如 MinIO)。
- 高可用性:多實例組成 Cluster 時,資料會被複製到不同節點,確保節點故障不會遺失資料,並支援不停機升級。
為什麼選 Object Storage#
Mimir 之所以同時兼具低成本與高可用,很大程度仰賴 Object Storage 的設計理念。和傳統 Block Storage 比較:
- Block Storage 把資料切成固定大小的區塊,依區塊編號定位。
- Object Storage 以物件為單位儲存,搭配名稱與 Metadata(建立日期、大小等)來定位資料。
這帶來幾個好處:
- 物件可以分散在不同機器上,天然支援高可用。
- 不用切固定區塊,較不易浪費磁碟空間。
- 雲廠商(AWS、GCP、Azure)都提供 Object Storage 服務;地端則可選 MinIO、Ceph 等開源方案,多數都有 S3 相容 API。
- 計費上多以實際使用量計算,比 Block Storage 便宜,且常提供冷熱分層更進一步降低成本。
不僅 Mimir,後續會介紹的 Cortex、Thanos、以及 Loki、Tempo 等工具,幾乎都選擇以 Object Storage 為長期儲存後端。
Remote Write 設定#
要把 Prometheus 的資料寫到 Mimir,只需在 Prometheus 設定檔加上 Remote Write:
# prometheus.yml
remote_write:
- url: http://mimir:9009/api/v1/push寫出之後,原本的 Prometheus 仍會保留資料,可繼續用 PromQL 查詢,也可繼續看抓取設定與 Targets 狀態。
維運#
Grafana 提供了:
- Mimir Runbook:對應各種告警與錯誤訊息的處理流程。
- Monitor Mimir:一系列觀察 Mimir 自身狀態的 Grafana Dashboard 與 Alert。
實務上仍需注意各參數說明還不夠完整,部署時要對 Mimir 的元件分工有基本認識。
Lab 摘要#
範例 08-mimir 為單一 Mimir + 本地磁碟的最小範例;若要試多實例搭配 MinIO,可參考官方的 Play with Mimir 教學。
啟動:
docker-compose up -d服務:
- Prometheus:
http://localhost:9090 - Mimir:
http://localhost:9009,可看到各 Component 的狀態。 - Grafana:
http://localhost:3000,預設admin/admin,內建 Provisioning Dashboard:Grafana Stats、Mimir / Overview。
關閉:
docker-compose downLab 達成的目標:
- 建立 Mimir,作為 Grafana 的查詢端與 Prometheus 的寫入端。
- Prometheus 透過 Remote Write 把資料寫進 Mimir。
- Grafana 將 Mimir 當成 Prometheus 類型的 Data Source 使用。
小結#
Mimir 專注於 Prometheus Metrics 的長期儲存,提供高可用、可擴展與低成本的儲存方案;這些優點來自精巧的元件分工,也來自 Object Storage 後端。維運上文件仍有不夠完整之處,較深入的調校仍需要花時間摸索。
原文出處#
- 原書/iThome:https://ithelp.ithome.com.tw/articles/10325151