如何延长 Prometheus 的数据保留时间(Retention)?
Prometheus 默认保留 15 天数据,通过启动参数 --storage.tsdb.retention.time 调整(如 90d),也可按磁盘占用用 retention.size 限制。长期存储建议远端方案。本文给出配置方法与容量估算。
启动参数加 --storage.tsdb.retention.time=90d 即可把未配置时间/体积限制时默认 15 天的保留期延长到 90 天;2.7+ 版本也支持按体积 --storage.tsdb.retention.size=100GB 控制,两者同时设置时谁先触发谁先清。
配置方法
prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/prometheus \
--storage.tsdb.retention.time=90d \
--storage.tsdb.retention.size=100GB
Docker 可修改启动参数;Helm 的字段取决于 Chart:独立 prometheus Chart 常用 server.retention,kube-prometheus-stack 则用 prometheus.prometheusSpec.retention;Operator 的 Prometheus 资源用 spec.retention。按对应版本配置并滚动更新。
容量怎么估算?
经验公式:每天数据量 ≈ 活跃序列数 × 2 字节 × (86400 / 抓取间隔秒数)。
例如 50 万序列、15s 抓取间隔:500000 × 2 × 5760 = 5.76 × 10⁹ 字节/天(十进制 5.76 GB),90 天约 518.4 GB。这只是按每样本 2 字节估算的压缩样本量,尚需索引、WAL、head 与压缩临时空间;参数容量单位需按 Prometheus 文档核对,不能直接混同十进制 GB。用 prometheus_tsdb_head_series 监控活跃序列数,按增速提前扩容。
更长保留:远端存储
本地 TSDB 定位为"近期热数据"(周/月级)。季度、年级别的保留可选远端存储架构:
- 自建:Thanos(常用 sidecar 上传块到对象存储,也有 Receive 远端写入方案)、Mimir、VictoriaMetrics;
- 托管:直接把 remote_write 指向云厂商的托管时序服务。
常见问题(FAQ)
Q:改大保留期有性能代价吗? 更长保留会增加磁盘和块管理开销;查询代价取决于时间范围、序列数和访问模式,不能保证无性能影响。
Q:retention.time 和 retention.size 同时设置? 任一条件先触发即开始清理最旧数据块。
Q:历史数据能单独归档吗? 可用已启用管理 API 的 TSDB snapshot 建立快照并复制备份;Thanos sidecar 上传块用于其查询/保留架构,仍需独立备份与保留设计。