如何延长 Prometheus 的数据保留时间(Retention)?

Prometheus 默认保留 15 天数据,通过启动参数 --storage.tsdb.retention.time 调整(如 90d),也可按磁盘占用用 retention.size 限制。长期存储建议远端方案。本文给出配置方法与容量估算。

最佳实践
如何延长 Prometheus 的数据保留时间(Retention)?封面

启动参数加 --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 上传块用于其查询/保留架构,仍需独立备份与保留设计。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台