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 输出的高基数标签,是容量与性能问题的常见根源。