prometheus TSDB和外部存儲系統


一、TSDB

prometheus可以以自定義格式在磁盤上的本地時序數據庫TSDB存儲時間序列數據。
./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
存儲相關啟動參數:
--storage.tsdb.path:這決定了Prometheus寫入數據庫的位置。 默認為/data。
--storage.tsdb.retention.time:這決定了何時刪除舊數據。 默認為15d,不包括head block和最新生成的block
--storage.tsdb.retention.size:存儲塊可以使用的最大字節數,最早的數據將被刪除。 默認為0或禁用。
--storage.tsdb.wal-compression:啟用預寫日志(WAL)的壓縮,略微消耗CPU負載以大幅減少WAL大小。
 
文件塊block
采集的樣本按每兩個小時的時間段保存到一個目錄,該目錄就是一個block
當其保存了3小時數據時會被重新分為2個block(2h+1h)
每個block的名稱按照ULID原理生成,共128位(16字節),前48位是時間戳,后80位是隨機數,經過base32算法轉換成26字節可排序字符串
包含
  • chunks:保存壓縮后的時序數據,每個chunk大小為512MB
  • index:用於將度量名稱和標簽索引到塊文件中的時間序列
TOC表:index的入口,記錄index文件中其它表的位置。寫入其它表的數據前要先將8字節的當前偏移量作為該表的地址記錄。
              總大小=8*6張表+4字節CRC校驗和
符號表:每個標簽只在磁盤存儲一份,使用標簽時直接使用其在符號表中的索引
時序列表:記錄該block中每個時序的標簽以及這些時序在該block中關聯的chunk塊
標簽索引表:將具有相同標簽名稱(key)的標簽組合到一起,從而形成標簽索引,然后根據標簽索引查找這些索引
postings表:posting的索引表。每個posting代表一個標簽和時序的關聯關系
  • meta.json
記錄block的元數據信息,用於對block進行維護(如刪除過期block、合並歷史block)
主要包括數據塊記錄樣本的起始時間、截至時間、樣本數、時序數、數據源
  • tombstones
用於對數據進行軟刪除
TSDB在刪除block數據塊時會將整個目錄刪除
但如果只刪除一部分數據塊的工作則通過tombstones進行刪除
 
尋找時序的邏輯:
(1)首先根據時間段找到所有block,並加載每個block的index文件
(2)直接讀取index文件最后52字節的TOC表,找到其它表
(3)先訪問符號表,確定指標標簽的名稱和值在索引表中的索引ID
(4)通過標簽索引表,找到標簽在postings表中的位置,從而找到具體的posting,
(5)找到標簽對應的時序后,根據時序表查找它在block中的具體位置
 
預寫日志WAL
第一個block(head block)存儲在內存中並且允許修改
通過預寫日志(WAL)防止崩潰,可以在崩潰后重新啟動Prometheus服務器時恢復。
 
預寫日志文件以128MB段存儲在wal目錄中。文件段以數字命名。
寫入單位是32KB的頁,一次性寫入的頁不會被跨段存儲
 

二、外部存儲

為支持支持外部存儲系統,引入了Adapter適配器,將prometheus讀寫請求轉化為第三方存儲遠端接口
目前支持的外部存儲系統包括:
通過HTTP POST請求+protobuf編碼方式調用Adapter的讀寫接口


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM