【Prometheus】存储
原文:https://prometheus.io/docs/prometheus/latest/storage/
文章目錄
- 本地存儲
- 磁盤上的布局
- 壓實
- 運營方面
- 遠程存儲集成
- 總覽
- 現有集成
Prometheus包括本地磁盤時間序列數據庫,但也可以選擇與遠程存儲系統集成。
本地存儲
Prometheus的本地時間序列數據庫以自定義格式在磁盤上存儲時間序列數據。
磁盤上的布局
攝入的樣品分為兩個小時。每個兩個小時的時間段包含一個目錄,該目錄包含一個或多個塊文件,該文件包含該時間窗口的所有時間序列樣本,以及元數據文件和索引文件(該索引文件將度量標準名稱和標簽索引到塊文件中的時間序列) )。通過API刪除系列時,刪除記錄存儲在單獨的邏輯刪除文件中(而不是立即從塊文件中刪除數據)。
當前傳入樣本的塊保留在內存中,尚未完全保留。它通過預寫日志(WAL)防止崩潰,當Prometheus服務器在崩潰后重新啟動時可以重放該日志。預寫日志文件wal以128MB的段存儲在目錄中。這些文件包含尚未壓縮的原始數據,因此它們比常規的塊文件大得多。
Prometheus將至少保留3個預寫日志文件,但是高流量服務器可能會看到三個以上的WAL文件,因為它需要保留至少兩個小時的原始數據。
Prometheus服務器的數據目錄的目錄結構如下所示:
./data ├── 01BKGV7JBM69T2G1BGBGM6KB12 │ └── meta.json ├── 01BKGTZQ1SYQJTR4PB43C8PD98 │ ├── chunks │ │ └── 000001 │ ├── tombstones │ ├── index │ └── meta.json ├── 01BKGTZQ1HHWHV8FBJXW1Y3W0K │ └── meta.json ├── 01BKGV7JC0RY8A6MACW02A2PJD │ ├── chunks │ │ └── 000001 │ ├── tombstones │ ├── index │ └── meta.json ├── chunks_head │ └── 000001 └── wal├── 000000002└── checkpoint.00000001└── 00000000請注意,本地存儲的局限性在于它不是集群或復制的。因此,面對磁盤或節點中斷,它不是任意可伸縮的或持久的,應該像對待任何其他類型的單節點數據庫一樣對待它。建議使用RAID來提高磁盤可用性,使用快照進行備份,容量規劃等,以提高耐用性。通過適當的存儲耐久性和計劃,可以在本地存儲中存儲多年的數據。
或者,可以通過遠程讀/寫API使用外部存儲。這些系統在耐用性,性能和效率上差異很大,因此需要仔細評估。
有關文件格式的更多詳細信息,請參見TSDB format。
壓實
最初的兩個小時的塊最終會在后臺壓縮為更長的塊。
壓縮將創建較大的塊,最多保留時間的10%,即31天,以較小者為準。
運營方面
Prometheus具有幾個允許配置本地存儲的標志。最重要的是:
--storage.tsdb.path:這確定Prometheus在何處寫入其數據庫。默認為data/。 --storage.tsdb.retention.time:這確定何時刪除舊數據。默認為15d。storage.tsdb.retention如果此標志設置為默認值以外的其他值,則覆蓋。 --storage.tsdb.retention.size:[EXPERIMENTAL]這確定存儲塊可以使用的最大字節數(請注意,這不包括WAL大小,這可能是很大的)。最舊的數據將首先被刪除。默認為0或禁用。該標志是實驗性的,可以在將來的版本中進行更改。支持的單位:B,KB,MB,GB,TB,PB,EB。例如:“ 512MB” --storage.tsdb.retention:已棄用該標志,而推薦使用storage.tsdb.retention.time。 --storage.tsdb.wal-compression:此標志啟用預寫日志(WAL)的壓縮。根據您的數據,您可以預期WAL大小將減少一半,而額外的CPU負載卻很少。此標志在2.11.0中引入,默認情況下在2.20.0中啟用。請注意,一旦啟用,將Prometheus降級到2.11.0以下的版本將需要刪除WAL。平均而言,普羅米修斯每個樣本僅使用大約1-2個字節。因此,要計劃Prometheus服務器的容量,可以使用以下粗略公式:
needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample要調整每秒攝取的樣本的速率,可以減少抓取的時間序列數(每個目標更少的目標或更少的序列),或者可以增加抓取間隔。但是,由于壓縮序列中的樣本,減少序列數可能更有效。
如果您的本地存儲由于某種原因而損壞,最好的選擇是關閉Prometheus并刪除整個存儲目錄。您可以嘗試刪除單個塊目錄或WAL目錄來解決該問題,這意味著每個塊目錄損失的時間窗口約為兩個小時。同樣,Prometheus的本地存儲并不意味著持久的長期存儲。
注意: Prometheus的本地存儲不支持不兼容POSIX的文件系統,因為可能會發生不可恢復的損壞。不支持NFS文件系統(包括AWS的EFS)。NFS可能符合POSIX,但大多數實現均不符合。強烈建議使用本地文件系統以提高可靠性。
如果同時指定了時間和大小保留策略,則在那一刻將使用第一個觸發的策略。
過期的塊清除將在后臺計劃中進行。刪除過期的塊可能最多需要兩個小時。過期的塊在清除之前必須完全過期。
遠程存儲集成
Prometheus的本地存儲在可伸縮性和持久性方面受到單個節點的限制。Prometheus并沒有嘗試解決Prometheus本身中的群集存儲,而是提供了一組允許與遠程存儲系統集成的接口。
總覽
Prometheus通過兩種方式與遠程存儲系統集成:
Prometheus可以將提取的樣本以標準格式寫入遠程URL。
Prometheus可以以標準化格式從遠程URL讀取(返回)樣本數據。
遠程讀寫架構
讀取和寫入協議都使用基于HTTP的快速壓縮協議緩沖區編碼。該協議尚未被認為是穩定的API,當可以安全地假定Prometheus和遠程存儲之間的所有躍點都支持HTTP / 2時,該協議將來可能會更改為在HTTP / 2上使用gRPC。
有關在Prometheus中配置遠程存儲集成的詳細信息,請參閱Prometheus配置文檔的“ 遠程寫入”和“ 遠程讀取”部分。
有關請求和響應消息的詳細信息,請參閱遠程存儲協議緩沖區定義。
請注意,在讀取路徑上,Prometheus僅從遠端獲取一組標簽選擇器和時間范圍的原始系列數據。PromQL對原始數據的所有評估仍在Prometheus本身中進行。這意味著遠程讀取查詢具有一定的可伸縮性限制,因為所有必需的數據都需要先加載到查詢的Prometheus服務器中,然后再在其中進行處理。但是,暫時認為支持PromQL的完全分布式評估是不可行的。
現有集成
要了解有關與遠程存儲系統的現有集成的更多信息,請參閱集成文檔。
總結
以上是生活随笔為你收集整理的【Prometheus】存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Nginx】优化
- 下一篇: 【easysnmp】python snm