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 WriteRemote 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 S3Google Cloud StorageAzure Blob StorageOpenStack 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 等。另外也有開源專案的選項,例如 MinIOCeph 等,這些服務都有提供 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 RunbookMonitor 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 - 指標長期儲存的大師兄
系列文
時光之鏡:透視過去、現在與未來的 Observability30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言