本篇要來回答檔案分割和合併的問題。
上篇提到 data
資料夾下的 26 個英數字母長的資料夾,是用來存放資料的。如:
./data
├── 01BKGTZQ1SYQJTR4PB43C8PD98
│ ├── chunks
│ │ └── 000001
│ ├── tombstones
│ ├── index
│ └── meta.json
├── chunks_head
│ └── 000001
└── wal
├── 000000002
└── checkpoint.00000001
└── 00000000
而這些資料夾的來源有兩種。
新的檔案資料有兩個來源:
對於新拉到的資料,新資料 wal 積滿兩個小時,就會產生一個新的檔案資料夾。時間區間會覆蓋 wal 裡的所有樣本時戳、和目前最後一個時間區間的上限。當新資料夾產生後,wal 裡的資料會被刪除。
至於 promtool tsdb 搬入的資料,則會自成一個檔案資料夾。這個檔案資料夾的時間區間會是搬入資料的時間區間。時間區間可能跟其他檔案資料夾重疊。
合併資料夾的動作稱為 Compact。Prometheus 每分鐘都會檢查是否有需要合併的資料夾,若有則執行合併。合併的條件可以是:
合併後產生新的資料夾,meta.json 會記錄合併的來源資料夾。合併後的資料夾會有新的 index 和 chunks 資料夾,而原本的資料夾會被刪除。
新的 index 和 chuck 會減少資料重複,所以總空間會變小。