如何精簡 Prometheus 的指標和儲存佔用

2022-12-29 12:02:00

前言

隨著 Prometheus 監控的元件、數量、指標越來越多,Prometheus 對計算效能的要求會越來越高,儲存佔用也會越來越多。

在這種情況下,要優化 Prometheus 效能, 優化儲存佔用. 第一時間想到的可能是各種 Prometheus 的相容儲存方案, 如 Thanos 或 VM、Mimir 等。但是實際上雖然集中儲存、長期儲存、儲存降取樣及儲存壓縮可以一定程度解決相關問題,但是治標不治本。

  • 真正的本,還是在於指標量(series)過於龐大。
  • 治本之法,應該是減少指標量。有 2 種辦法:

本次重點介紹第二種辦法:如何根據實際的使用情況精簡 Prometheus 的指標和儲存佔用?

思路

  1. 分析當前 Prometheus 中儲存的所有的 metric name(指標項);
  2. 分析展示環節用到的所有 metric name,即 Grafana 的 Dashboards 用到的所有指標;
  3. 分析告警環節用到的所有 metric name,即 Prometheus Rule 設定中用到的所有指標;
  4. (可選)分析診斷環境用到的所有 metric name,即經常在 Prometheus UI 上 query 的指標;
  5. 通過 relabelmetric_relabel_configswrite_relabel_configskeep 2-4 中的指標, 以此大幅減少 Prometheus 需要儲存的指標量.

要具體實現這個思路, 可以通過 Grafana Labs 出品的 mimirtool 來搞定.

我這裡有個前後的對比效果, 可供參考這樣做效果有多驚人:

  1. 精簡前: 270336 活動 series
  2. 精簡後: 61055 活動 series
  3. 精簡效果: 將近 5 倍的精簡率!

Grafana Mimirtool

Grafana Mimir 是一款以物件儲存為儲存方式的 Prometheus 長期儲存解決方案, 從 Cortex 演化而來. 官方號稱支援億級別的 series 寫入儲存和查詢.

Grafana Mimirtool 是 Mimir 釋出的一個實用工具, 可單獨使用.

Grafana Mimirtool 支援從以下方面提取指標:

  • Grafana 範例中的Grafana Dashboards(通過 Grafana API)
  • Mimir 範例中的 Prometheus alerting 和 recording rules
  • Grafana Dashboards JSON檔案
  • Prometheus記alerting 和 recording rules 的 YAML檔案

然後,Grafana Mimirtool可以將這些提取的指標與Prometheus或Cloud Prometheus範例中的活動 series 進行比較,並輸出一個 used 指標和 unused 指標的列表。

Prometheus 精簡指標實戰

假設

假定:

  • 通過kube-prometheus-stack 安裝 Prometheus
  • 已安裝 Grafana 且作為展示端
  • 已設定相應的 告警規則
  • 除此之外, 無其他需要額外保留的指標

前提

  1. Grafana Mimirtool 從 releases 中找到 mimirtool 對應平臺的版本下載即可使用;
  2. 建立 Grafana API token
  3. Prometheus已安裝和設定.

第一步: 分析 Grafana Dashboards 用到的指標

通過 Grafana API

具體如下:

# 通過 Grafana API分析 Grafana 用到的指標
# 前提是現在 Grafana上建立 API Keys
mimirtool analyze grafana --address http://172.16.0.20:32651 --key=eyJrIjoiYjBWMGVoTHZTY3BnM3V5UzNVem9iWDBDSG5sdFRxRVoiLCJuIjoibWltaXJ0b29sIiwiaWQiOjF9