首页/云/可观测性速查/TSDB 存储结构与保留策略
Prometheus 与采集64 条

TSDB 存储结构与保留策略

Prometheus 自带时序存储:head 块在内存并同步写 WAL 保证崩溃恢复,默认每 2 小时落盘为持久块,后台压缩合并;保留期默认 15 天,可按时间或容量控制。

可观测性速查云更新于 2026-10-13

TSDB 存储结构是什么

Prometheus 自带时序存储:新样本先写入内存中的 head 块,并同步写入 WAL 以保证崩溃后可恢复;默认每 2 小时把 head 落盘成一个持久块,后台再把小块压缩成更大的块。保留策略默认 15 天,可按时间或容量控制,容量清理从最旧的块开始。

基本信息

数据目录通常 /var/lib/prometheus/data
WAL预写日志,崩溃后据此恢复未落盘数据
持久块默认每 2 小时切分,含 chunks、index、meta.json
后台任务压缩合并小块、按保留策略清理
保留参数retention.time 与 retention.size
巡检工具promtool tsdb list / analyze

典型使用场景

  • 规划磁盘容量时按采样量与保留期估算所需空间
  • 磁盘告急时先调整保留参数或容量上限,而不是手工删文件
  • 用 promtool tsdb analyze 查看标签基数与空间占用,定位高基数来源
  • 排查数据缺失时确认相关块是否仍在保留期内
  • 评估压缩状态,判断查询是否会命中过多小块
  • 迁移或备份前核对块的覆盖时间范围

数据目录结构

数据目录结构
data/
├── wal/          # 预写日志:崩溃后据此恢复未落盘数据
├── chunks_head/  # head 块的持久化映射文件
├── 01BKGV7J.../  # 持久块:chunks/ + index + meta.json + tombstones
└── queries.active

保留策略与巡检

保留策略与巡检
prometheus --storage.tsdb.retention.time=30d \
           --storage.tsdb.retention.size=50GB

promtool tsdb list /var/lib/prometheus/data     # 块清单与覆盖时间范围
promtool tsdb analyze /var/lib/prometheus/data  # 标签基数与空间占用分析

目录与文件

路径内容说明
wal/预写日志崩溃恢复的关键,勿手工删除
chunks_head/head 映射内存数据的落盘映射
<ULID>/持久块chunks + index + meta
queries.active运行中查询进程退出后清理
两个保留参数同时配置时先达到者生效;容量清理从旧块开始,不会触碰正在写入的 head 数据,因此磁盘占用不会瞬间降到阈值以下。
不要手动删 data 目录下的块文件:删除特定序列用管理 API,清理历史用保留参数,手工删除极易造成数据不一致。
磁盘写入延迟过高会让 WAL 积压,极端情况下丢数据;存储介质与保留期要一起评估,SSD 与慢盘的差距很明显。
标签基数直接决定索引与内存占用:promtool tsdb analyze 输出的高基数标签,是容量与性能问题的常见根源。

易错点

  • 不要手动删 data 目录下的块文件:删除特定序列用管理 API,清理历史用保留参数
  • 磁盘写入延迟过高会让 WAL 积压极端情况下丢数据,存储介质与保留期要一起评估
  • 容量保留到达阈值后清理是渐进的,磁盘不会立即释放,容量规划要留缓冲
  • 高基数标签会同时推高内存与索引体积,是查询变慢与 OOM 的常见原因
  • 备份时只拷部分块或忽略 WAL,恢复后会丢失最近一段时间的数据

数据来源与参考

  • Prometheus 文档 · Storage
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌