實驗一 C語言開發程式設計初體驗
https://www.cnblogs.com/t-road/p/15577057.html
1、本地儲存
磁碟佈局:
這些目錄叫做2小時塊。
每個目錄包含一個chunks子目錄(包含那個時間窗口裡的所有時間序列)、元資料檔案meta.json、索引檔案index。
索引檔案將度量名稱和標籤索引到chunks目錄中的時間序列上。
chunks目錄中的樣例被分組到一個或多個段檔案中,每個段檔案預設最大上限是512M。
段檔案的格式如圖所示。000001
當通過API刪除序列時,不會立即刪除塊段(chunk segment)中的資料,而是會將這一次刪除動作儲存在墓碑(tombstone)檔案中。
用於incoming samples的當前塊是儲存在記憶體中的,並沒有完全持久化。
如果prometheus伺服器掛了,那豈不是少了資料?
不會的,因為prometheus有一個預寫日誌(WAL),每一次動作都會記錄到預寫日誌中。
當prometheus重啟時,就會重放這些日誌,因此就能恢復資料。
預寫日誌檔案被儲存在wal目錄中,以128MB的段形式存在。
這些預寫日誌檔案包含尚未壓縮的原始資料,因此它們比常規的塊檔案大得多。
prometheus至少保留3個預寫日誌檔案(如上圖)。
高流量的伺服器可能會保留多於3個的預寫日誌檔案,以至少保留2個小時的原始資料。
請注意,本地儲存的一個限制是:它不是群集或複製的。
因此,它在驅動器或節點中斷時不具有任意的可擴充套件性或永續性,應該像任何其他單節點資料庫一樣進行管理。
建議使用RAID以提高儲存可用性,建議使用快照進行備份。通過適當的體系結構,可以在本地儲存中保留數年的資料。
可以通過遠端讀寫API來使用外部儲存。
2、壓縮
2小時塊 最終 在後臺會被壓縮成更長的塊。
prometheus通過以下選項來配置本地儲存。
--storage.tsdb.path:資料儲存位置,預設是data目錄。
--storage.tsdb.retention.time:保留時間,預設是15天,過15天之後,就刪除。該配置會覆蓋--storage.tsdb.retention的值。
--storage.tsdb.retention.size:要保留的塊的最大位元組數。最早的資料會首先被刪除。預設為0或禁用。
磁碟的最小尺寸取決於:wal目錄(wal和checkpoint)和chunks_head目錄(m-mapped head chunks)的峰值空間(每2小時會達到一次峰值)。
--storage.tsdb.wal-compression:開啟預寫日誌的壓縮。
needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample
3、遠端儲存
prometheus的本地儲存受限於單節點的擴充套件性和耐久性。
prometheus整合遠端儲存的三種方式:
(1)prometheus會將它接收的樣本資料以標準格式寫入遠端的URL。
(2)prometheus能從其他prometheus伺服器以標準格式接收樣本資料。
(3)prometheus以標準格式從遠端URL讀取樣本資料。
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_read
內建的遠端寫入接收器,通過以下選項開啟:--enable-feature=remote-write-receiver
開啟後,遠端寫入接收器的端點是:/api/v1/write
https://github.com/prometheus/prometheus/blob/main/prompb/remote.proto
更多整合:
https://prometheus.io/docs/operating/integrations/#remote-endpoints-and-storage
將openmetrics format格式的資料寫入到TSDB中。以blocks的形式存放。
典型的用例是將度量資料從不同的監控系統或時間序列資料庫遷移到Prometheus。
遷移的前提是:需要首先將這些資料轉換成openmetrics format,然後才能遷移。
回填
通過promtool命令列工具完成回填。
promtool會將塊寫入到目錄中。預設情況下,是寫入到 ./data/ 目錄。
promtool tsdb create-blocks-from openmetrics <input file> [<output directory>]
當建立完 塊 之後,再將這些塊移動到prometheus的資料目錄中。
如果prometheus的資料目錄中已經有這些塊了,那就會發生重疊。因此需要設定
--storage.tsdb.allow-overlapping-blocks
以允許重疊。
請注意,任何回填的資料都要遵守為Prometheus伺服器配置的保留(時間層面或大小層面的保留)。
--storage.tsdb.retention.size