[系统设计 - 可观测设计] Promethues存储机制
编辑2026-07-13
Prometheus 存储机制
Prometheus 默认使用 TSDB(时序数据库) 存储,v2.x 全新自研块状时序存储,核心分为四大模块:Head Block、持久化 Block、WAL 预写日志、mmap 内存映射。
1. WAL 预写日志(Write-Ahead Log)
- 所有采集指标写入内存前,先落地 WAL 文件;
- 作用:进程崩溃、机器重启后,从 WAL 恢复内存时序数据,避免指标丢失;
- 存储路径:
./data/wal,固定分片文件,循环复用; - 过期逻辑:数据写入持久化 Block 后,对应 WAL 段可被清理。
2. Head Block(内存活跃块)
- 默认保存最近 2 小时所有时序数据,完全驻留内存;
- 所有实时查询、告警计算直接读 Head,查询性能最高;
- 存储结构:时序 ID + 标签索引 + 采样点数组;
- 时序过多会直接拉高 Prometheus 内存占用,是内存瓶颈核心来源。
3. 持久化 Block(磁盘冷数据块)
每 2 小时生成一个独立 Block 目录,目录内分为多类文件:
meta.json:块元信息(起止时间、标签索引、采样总数)index:标签倒排索引(标签名、标签值、时序 ID 映射,快速按标签筛选)chunks:采样点压缩存储,时序数值 + 时间戳做高压缩编码tombstones:标记已删除时序(延迟删除,不立即清理磁盘)
压缩特性
Prometheus 对时序采样采用专用压缩算法:
- 时间戳:差分编码,相邻时间只存差值;
- 浮点数值:XOR 异或压缩,连续近似值压缩率极高; 同一条时序连续采样压缩后磁盘占用极低。
4. mmap 内存映射访问
冷 Block 不完整加载内存,操作系统通过 mmap 按需加载磁盘文件,降低常驻内存开销;大量并发查询冷数据时会产生磁盘 IO 抖动。
5. 生命周期与数据删除
- 保留时长由
--storage.tsdb.retention.time控制,过期 Block 直接删除; - 删除时序不会立刻删文件,写入 tombstone,块过期统一回收磁盘;
- 不支持单条指标精准删除,最小删除粒度是 2h Block。
6. 远程读写(Remote Read / Remote Write)
本地磁盘仅做短期热数据存储,长期海量时序推送远端存储(Thanos、M3DB、VictoriaMetrics),解决单机磁盘、容量、查询性能上限问题,企业级标准方案。
- 0
- 0
-
分享