【教學】如何計算 Prometheus 硬碟所需空間





Prometheus 如果要上到生產環境,一定會面臨的一個問題,那就是要給 Prometheus 多少使用空間做存儲。

這個問題,在新版 Prometheus 中,有兩個解法,一個是Prometheus啟動時,帶入 --storage.tsdb.retention.size 參數,設定 Prometheus 能使用空間的上限, Prometheus 會在到達上限時,優先刪除最舊的資料。

那另外一種,就是根據你設的 --storage.tsdb.retention.time 資料保存時間,套入官方公式去計算所需空間

needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample

官方公式連結


retention_time_seconds

這個是你設定 --storage.tsdb.retention.time 的值換算成秒數,以我設定的180天為例,這個值就是 15552000

ingested_samples_per_second

每秒獲取的樣本數,可以用以下公式計算

rate(prometheus_tsdb_head_samples_appended_total[2h])


bytes_per_sample

樣板數的平均大小,用以下公式計算

rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[2h]) / rate(prometheus_tsdb_compaction_chunk_samples_sum[2h])

有了這些公式,我們可以將這公式寫入 Prometheus 的 Rules 中,好方便我們以後做查詢。


首先,我們先修改 prometheus.yml,在 rule_files 下加入一個新 yaml 的位置

rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
- "prometheus_needed_disk_space.yaml"


然後我們新增剛剛指定的yaml檔,貼上以下內容。 我邊先假設我們 --storage.tsdb.retention.time 是設 180d 也就是 15552000 秒。

groups:
- name: prometheus_needed_disk_space
  rules:
  - record: prometheus_needed_disk_space
    expr: 15552000 * rate(prometheus_tsdb_head_samples_appended_total[2h]) * (rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[2h]) / rate(prometheus_tsdb_compaction_chunk_samples_sum[2h]))


Reload Prometheus

service prometheus reload

進 webUI 做查詢



算出所需是 13966157849.78427 bytes ,換算成GB約等於 13.007 GB ,也就是說,以目前的監控主機數量,並且要保存 180 天,那大概需要 13 GB 。




留言