iT邦幫忙

2023 iThome 鐵人賽

DAY 8
1

Mimir Logo

資訊處理流程 生成 收集 儲存 使用
Mimir ✓ ✓

在 Prometheus 的文件中有提到:

Prometheus's local storage is not intended to be durable long-term storage; external solutions offer extended retention and data durability.

說明了 Prometheus 並非設計用於長期儲存,但透過 Remote Write 和 Remote Read 的方式,能夠利用其他服務儲存指標資料。官網也有列出一份支援清單,本篇將先介紹其中的 Mimir。

Mimir 是由 Grafana 開發的。官方介紹影片就先強調,Mimir 並非用以取代 Prometheus,而是為了增強其周邊功能。主打功能包括儲存超過 10 億筆的 Prometheus Metrics、高可用性、支援多租戶,以及快速查詢。使用 Mimir 時,必須讓 Prometheus 將資料寫入 Mimir,Grafana 改為對 Mimir 進行查詢。由於 Mimir 提供了與 Prometheus 相同的 API,因此在操作上無需額外調整,查詢語言仍為 PromQL。在 Grafana 的 Data Source 類型也是選擇 Prometheus,只是 URL 要改成 Mimir 的 URL。

Mimir Pipeline

Mimir 於 2022 年 3 月公開發表並開源。儘管相對其他 Prometheus Metrics 儲存服務來說是相當新的專案,但 Mimir 其實是 2020 年就推出的 Grafana Enterprise Metrics(GEM)的開源版本。可以看到公開發表的第一個版本就是從 2.0.0 開始,因此儘管正式公開的時間並不長,Mimir 的設計與架構也已經經過了很長一段時間的驗證。例如,Adobe 在 Observability Con 2022 中分享了他們對 Mimir 的正面評價(Observability strategy at Adobe, with OpenTelemetry, Grafana, Mimir, and Tempo),並提到已嘗試將一些小型的 Cortex 替換為 Mimir,效果頗佳,未來會再持續觀察是否要進行更大規模的替換。

Mimir 是北歐神化中的智慧巨人,因故被斬首後首級被送回奧丁身邊,奧丁為了保留其智慧,便施法使其僅剩一顆頭顱仍可以繼續存活。在 2018 年發行的「戰神」與 2022 年發行的「戰神:諸神的黃昏」都可以看到 Mimir 掛在戰神克雷多斯的腰間,扮演著講述各種遠古故事與吐槽的角色。擁有無窮的知識這個設定,跟負責儲存與提供 Metrics 查詢的功能在意義上算是相當符合。

God of War Mimir
在「戰神」中設定被奧丁囚禁在樹中的 Mimir,圖片來源:wall.alphacoders.com

Concepts

Features

  1. 高可擴展性:Mimir 可以輕易進行水平擴展,並且可以在多台機器上運行,當需要儲存或處理更多的資料時,只需要增加機器即可。
  2. 單一資料源:當有多個 Prometheus 時,可透過 Remote Write 的方式將資料寫入 Mimir。如此一來,所有 Prometheus 的資料都能在 Mimir 中查詢,無需透過 Prometheus Federation 進行查詢。
  3. 儲存成本低:Mimir 使用 Object Storage 進行長期儲存,有儲存成本低廉的優勢,可以使用 AWS S3、Google Cloud Storage、Azure Blob Storage、OpenStack Swift 等服務,或是使用兼容 S3 的 Object Storage 服務,例如 MinIO。
  4. 高可用性:當 Mimir 由多個實體組成 Cluster 時,會將資料複製到其他 Mimir 中,確保在機器故障時不會遺失資料,並且可以在不停機的情況下進行升級。

Object Storage

如前所述,Mimir 之所以具有低成本和高可用的優勢,主要是因為它採用了 Object Storage 作為資料儲存方式。不僅 Mimir,後續章節會介紹的工具,如 Cortex、Thanos、Loki、Tempo 等,也多選擇使用 Object Storage,主要優點同樣是成本低和高可用性。但為何 Object Storage 能有這些優勢呢?這主要源於其與傳統 Block Storage 的不同設計理念。傳統 Block Storage 會將資料分割成固定大小的區塊,並透過區塊編號來定位資料;而 Object Storage 則是將資料儲存為物件,並用物件名稱與 Meta Data(例如:建立日期、物件大小等)來定位資料。這讓 Object Storage 可以將資料分散儲存在不同機器上,實現高可用性。另外,因不需將資料切割成固定大小的區塊,也降低了浪費硬碟空間的機率。

此外,多家雲端服務供應商都提供了 Object Storage 服務,包括 AWS S3、Google Cloud Storage 和 Azure Blob Storage 等。另外也有開源專案的選項,例如 MinIO、Ceph 等,這些服務都有提供 S3 的 API,在操作上跟 AWS S3 幾乎沒有差異。因此如果有資料無法儲存在雲端的需求,也可以考慮使用這些專案於地端環境自建 Object Storage 服務。

從成本角度看,Object Storage 通常比 Block Storage 來得更便宜。以 GCP 的 Cloud Storage 和永久磁碟為例,前者最貴的等級的價格為 0.020 USD/GB/month(2023/09/21 asia-east1 Standard Storage 價格),後者最便宜的等級則為 0.040 USD/GB/month(2023/09/21 asia-east1 Standard provisioned space 價格),價格相差一倍。而 Cloud Storage 甚至還提供冷熱資料分層的選項,能進一步降低儲存成本,並可以按用量付費,不像永久磁碟需要預先確定容量,並且在使用時無法調整。

Remote Write

將 Prometheus 的資料儲存到 Mimir 時,需要在 Prometheus 的設定檔中加入 Remote Write 的設定,並指定 Mimir 的 URL,例如:

# prometheus.yml
remote_write:
  - url: http://mimir:9009/api/v1/push

資料寫入後,原有的 Prometheus 仍會保留資料,並可以繼續用 PromQL 進行查詢,也可以繼續檢視 Prometheus 爬取 Metrics 的設定與狀態等。

維運

Grafana 提供了 Mimir Runbook 與 Monitor Mimir ,以協助維運 Mimir。Runbook 中詳述了對應各種告警和錯誤訊息的處理方式,而 Monitor Mimir 則提供了一系列的 Grafana Dashboard 和 Alert,用於監控 Mimir 的運行狀態。

Lab

範例程式碼:08-mimir

此範例僅建立單一 Mimir,並將資料儲存於 Local Disk 中,若要建立多實體的 Mimir 並搭配 MinIO 的版本,可以參考官方提供的範例 Play with Mimir。

Quick Start

  1. 啟動所有服務

    docker-compose up -d
    
  2. 檢視服務

    1. Prometheus: http://localhost:9090
    2. Mimir: http://localhost:9009
      1. 可檢視 Mimir 各 Component 的狀態
    3. Grafana: http://localhost:3000,登入帳號密碼為 admin/admin
      1. 點擊左上 Menu > Dashboards,即可看到透過 Provisioning 建立的 Dashboard(Grafana Stats、Mimir / Overview)
  3. 關閉所有服務

    docker-compose down
    

Goals

  1. 建立 Mimir,供 Grafana 查詢與 Prometheus 寫入
  2. 建立 Prometheus,並根據 etc/prometheus/prometheus.yml 設定檔,透過 remote write 的方式將資料寫入 Mimir
  3. Grafana 使用 Mimir 當作 Prometheus Data Source

小結

Mimir 主要專注於儲存 Prometheus Metrics,並提供高可用、高可擴展性和低成本等多項優勢。這些優點不僅源於精巧的架構設計,也得益於採用 Object Storage 作為資料儲存方式。儘管 Mimir 在維運方面提供了 Runbook 和 Monitor Mimir 等工具,但由於相關文件內容尚不完善,例如各類參數說明不全,因此維運上可能會遇到一定程度的困難。

參考資料

  1. Object Storage vs Block Storage
  2. Announcing Grafana Mimir, the most scalable open source TSDB in the world
  3. Grafana Mimir: Maintainers tell all

上一篇
Monitoring Best Practices - 監控的黃金法則
下一篇
Cortex - 指標長期儲存的大師兄
系列文
時光之鏡:透視過去、現在與未來的 Observability 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言