資訊處理流程 | 生成 | 收集 | 儲存 | 使用 |
---|---|---|---|---|
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 於 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 查詢的功能在意義上算是相當符合。
在「戰神」中設定被奧丁囚禁在樹中的 Mimir,圖片來源:wall.alphacoders.com
如前所述,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 甚至還提供冷熱資料分層的選項,能進一步降低儲存成本,並可以按用量付費,不像永久磁碟需要預先確定容量,並且在使用時無法調整。
將 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 的運行狀態。
範例程式碼:08-mimir
此範例僅建立單一 Mimir,並將資料儲存於 Local Disk 中,若要建立多實體的 Mimir 並搭配 MinIO 的版本,可以參考官方提供的範例 Play with Mimir。
啟動所有服務
docker-compose up -d
檢視服務
admin/admin
關閉所有服務
docker-compose down
etc/prometheus/prometheus.yml
設定檔,透過 remote write 的方式將資料寫入 MimirMimir 主要專注於儲存 Prometheus Metrics,並提供高可用、高可擴展性和低成本等多項優勢。這些優點不僅源於精巧的架構設計,也得益於採用 Object Storage 作為資料儲存方式。儘管 Mimir 在維運方面提供了 Runbook 和 Monitor Mimir 等工具,但由於相關文件內容尚不完善,例如各類參數說明不全,因此維運上可能會遇到一定程度的困難。