Prometheus 資料保留天數與資料量估算
| | | 0 | |
前年學會用 Grafana + Prometheus 長期監測 Docker CPU/RAM、主機溫度,陸續在我的迷你電腦加入插座用電量、路由器 CPU/溫度/網路流量監控,但每次都是設定完看到線圖就開香檳慶祝了事。前天遇到寬頻異常,興趣想查查這幾個月的路由器資訊,這才發現,資料怎麼只從 7/8 開始,之前的都不見了?
原以為是 Docker 沒設好或 Volume 出錯,追了一圈才發現是自己太菜,連 Prometheus 預設只會保留 15 天資料都不知道,登楞!

研究了一下,資料保存期限無法用 Prometheus 的 9090 Web 介面 及 prometheus.yml 修改,要在 docker-compose.yml 用 command 參數指定,可設定天數、月數、年數或限定資料大小:
prometheus:
container_name: prometheus
image: prom/prometheus:latest
network_mode: "host"
volumes:
- "./prometheus.yml:/etc/prometheus/prometheus.yml"
- "prometheus-data:/prometheus"
privileged: true
restart: unless-stopped
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--storage.tsdb.retention.time=90d" # 增加此行,指定保留 90 天
# - "--storage.tsdb.retention.size=50GB" # 亦可搭配上限容量限制
depends_on:
- cadvisor
過程踩到一個小雷,command 不能只加 "--storage.tsdb.retention.time=90d",原因是它會完全取代原有 Dockerfile 裡的 CMD,而非新增或複寫,而 Prometheus 的 Dockerfile 原有 CMD 有 config.file 及 storage.tsdb.path,少了會出錯。參考
# ... 略 ...
WORKDIR /prometheus
RUN chown -R nobody:nobody /etc/prometheus /prometheus && chmod g+w /prometheus
USER nobody
EXPOSE 9090
VOLUME [ "/prometheus" ]
ENTRYPOINT [ "/bin/prometheus" ]
CMD [ "--config.file=/etc/prometheus/prometheus.yml", \
"--storage.tsdb.path=/prometheus" ]
關於不能省略其他設定這點,只有 Gemini Flash 答對,Copilot GPT 5.6-sol 跟 Sonnect 4.6 都答錯。所以,使用 AI 還是得時時謹慎,沒有模型可以盡信。

若我想保存一年資料,需要準備多少空間?
我找到的簡單估算方式是用 docker compose exec prometheus /bin/sh 登入 Docker 下 du -hd1 /prometheus 統計目前 15 天的資料量,乘上 24 便接近一年 12 個月的大小。

如上圖,Prometheus 數據被分別存在多個 Block 資料夾,容量有大有小:
- 5–13 MB:通常是近期剛建立的 2 小時 Block
- 38 MB:可能是部分合併或時間範圍較短的 Block
- 112 MB:通常是 Compaction 後、涵蓋較長時間的 Block
- wal 約 65 MB:尚未寫入持久化 Block 的近期資料
若想看到每個 Block 精確的時間範圍跟資料筆數可用 promtool tsdb list /prometheus 取得精準數字:

粗估以我目前的監測量,一年不會超過 25GB,目前 128G SSD 還有 60GB 空間,應該頂得住,就先設 --storage.tsdb.retention.time=1y,後面再觀察。
Comments
Be the first to post a comment