如何延长 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 部署时在启动参数或 values 的 server.retention 中修改,改完重启生效。
容量怎么估算?
经验公式:每天数据量 ≈ 活跃序列数 × 2 字节 × (86400 / 抓取间隔秒数)。
例如 50 万序列、15s 抓取间隔:500000 × 2 × 5760 ≈ 5.8GB/天,90 天约 520GB。用 prometheus_tsdb_head_series 监控活跃序列数,按增速提前扩容。
更长保留:远端存储
本地 TSDB 定位为"近期热数据"(周/月级)。季度、年级别的保留走远端写:
- 自建:Thanos(对象存储 + 降采样)、Mimir、VictoriaMetrics;
- 托管:直接把 remote_write 指向云厂商的托管时序服务。
观测云对照
观测云的指标存储在云端,数据保留策略按工作空间套餐配置、随时调整,不受本地磁盘约束;DataKit 采集即入云,没有"本地保留期 + 远端写"的双层架构要维护。
常见问题(FAQ)
Q:改大保留期有性能代价吗? 保留期本身不拖慢查询,但磁盘占用线性增长;跨长区间的大查询会更重。
Q:retention.time 和 retention.size 同时设置? 任一条件先触发即开始清理最旧数据块。
Q:历史数据能单独归档吗? 用 tsdb snapshot 或 Thanos sidecar 上传到对象存储做冷备。