iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
DevOps

時間序列資料庫探討 - Prometheus系列 第 16

Prometheus - 時間序列資料儲存檔案的分合

  • 分享至 

  • xImage
  •  

前篇提問

  • Prometheus 什麼時候會重寫檔案。
  • wal 檔的生命週期?
  • Prometheus 的索引格式是什麼?
  • 允許 OOO 的情況下,怎麼分檔案呢?

本篇要來回答檔案分割和合併的問題。

檔案資料夾產生

上篇提到 data 資料夾下的 26 個英數字母長的資料夾,是用來存放資料的。如:

./data
├── 01BKGTZQ1SYQJTR4PB43C8PD98
│   ├── chunks
│   │   └── 000001
│   ├── tombstones
│   ├── index
│   └── meta.json
├── chunks_head
│   └── 000001
└── wal
    ├── 000000002
    └── checkpoint.00000001
        └── 00000000

而這些資料夾的來源有兩種。

  1. 從其他資料夾合併而來
  2. 從資料來源產生

從資料來源產生檔案資料夾

新的檔案資料有兩個來源:

  1. 新拉到,沒有 OOO 的資料
  2. 來自 promtool tsdb 寫入或其他 Prometheus,有 OOO 的資料

對於新拉到的資料,新資料 wal 積滿兩個小時,就會產生一個新的檔案資料夾。時間區間會覆蓋 wal 裡的所有樣本時戳、和目前最後一個時間區間的上限。當新資料夾產生後,wal 裡的資料會被刪除。

至於 promtool tsdb 搬入的資料,則會自成一個檔案資料夾。這個檔案資料夾的時間區間會是搬入資料的時間區間。時間區間可能跟其他檔案資料夾重疊。

從其他資料夾合併而來

合併資料夾的動作稱為 Compact。Prometheus 每分鐘都會檢查是否有需要合併的資料夾,若有則執行合併。合併的條件可以是:

  1. 多個檔案資料夾的時間區間有重疊
  2. 合併後的時間區段長度小於總長度上限的 10%
  3. 有超過 5% 的時間序列被刪除

合併後產生新的資料夾,meta.json 會記錄合併的來源資料夾。合併後的資料夾會有新的 index 和 chunks 資料夾,而原本的資料夾會被刪除。
新的 index 和 chuck 會減少資料重複,所以總空間會變小。


上一篇
Prometheus - 時間序列資料儲存格式
下一篇
Prometheus - 各模組的啓動和運行
系列文
時間序列資料庫探討 - Prometheus30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言