文章目录
- 清理数据
-
- 存储原理
-
- 数据写入流程
- Block(块)的概念
- 数据压缩过程
- 压缩原理
- 为什么要这样设计
- 压缩时间的影响
- 实际应用建议
- 介绍
-
- 目录结构
- 标记要删除的数据(delete_series)
- 删除所有标签
- 清理标记的数据(clean_tombstones)
- 最后整理为脚本可用
清理数据
通过查看官网的 查询 http api 文档里有写点我跳转
存储原理
数据写入流程
新收集的指标数据首先写入内存中的 WAL(Write-Ahead Log,预写日志)
同时数据会被保存在内存中的 Head Block(头块)中
WAL 用于在 Prometheus 崩溃后恢复数据
Block(块)的概念
Block 是 Prometheus 存储的基本单位
每个 Block 包含:
-
指标数据(chunks)
-
索引文件(index)
-
元数据文件(meta.json)
-
Block 是不可变的,一旦写入就不能修改
数据压缩过程
内存中的数据 ┌─── Head Block(2小时)───┐
│ 实时写入的最新数据 │
└──────────┬──────────────┘
压缩
↓
磁盘中的数据 ┌─── 2小时块 ─┬─ 2小时块 ──┐
│ │ │
└────────────┴───────────┘
压缩
↓
最终的大块 ┌────── 24小时块 ───────────┐
│ │
└──────────────────────────┘
压缩原理
当 Head Block 中的数据超过 `min-block-duration`(默认2小时)
这部分数据会被压缩并写入磁盘成为一个新的 Block
多个小的 Block 会被进一步压缩成更大的 Block,最大不超过 `max-block-duration`(默认24小时)