跳至主要内容

除錯高記憶體使用量

Prometheus 中的每個時間序列都由其指標名稱和稱為標籤的選擇性鍵值對唯一標識。

標籤允許過濾和聚合時間序列資料,但它們也會增加 Prometheus 收集的資料量。

每個時間序列都有一組定義的標籤,Prometheus 會為標籤的所有唯一組合生成新的時間序列。如果一個指標附加了兩個標籤,則會為該指標生成兩個時間序列。變更任何標籤值,包括新增或移除標籤,都會建立新的時間序列。

Prometheus 被最佳化以儲存基於序列索引的資料。它設計用於相對一致數量的時間序列和需要隨時間從匯出器收集的相對大量樣本。

相反地,Prometheus 並未被最佳化以適應快速變化數量的時間序列。因此,當在大量建立和銷毀資源的叢集上安裝監控時,特別是在多租戶叢集上,可能會發生大量記憶體使用量爆增。

減少記憶體爆增​

要減少記憶體消耗,可以配置 Prometheus 儲存較少的時間序列,方法是擷取較少的指標或為時間序列附加較少的標籤。要查看哪些序列使用最多記憶體,你可以在 Prometheus UI 中檢查 TSDB (時間序列資料庫) 狀態頁面。

分散式 Prometheus 解決方案,例如 Thanos 和 Cortex,使用替代架構,其中部署了多個小型 Prometheus 實例。在 Thanos 的情況下,來自每個 Prometheus 的指標會聚合到通用的 Thanos 部署中,然後這些指標會匯出到持久儲存,例如 S3。這種更強健的架構避免了任何單一 Prometheus 實例承擔過多時間序列的負擔,同時也保留了在全域層級查詢指標的能力。