【教學】如何計算 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 做查詢
留言