Prometheus存储磁盘数据结构和存储参数
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
目录
一.Prometheus存储磁盘数据结构
1.prometheus数据目录说明
2.block数据目录
chunks:
保存该block内的所有时序数据。
index:
代表该block内的索引数据。
meta.json:
代表该block的元信息。
3.WAL作用说明
- 1.WAL目录中包含了多个连续编号且大小默认上限为128MB的文件,Prometheus称这样的文件为Segment,其中存放的就是对内存中series以及sample数据的备份。
- 2.另外,还包含一个以checkpoint为前缀的子目录,由于内存中的时序数据经常会做持久化处理,WAL中的数据也将因此出现冗余。
- 3.所以每次在对内存数据进行持久化之后,Prometheus都会对部分编号靠后的segment进行清理,但是我们并没有办法做到恰好将已经持久化的数据从Segment中剔除,也就是说被删除的segment中部分的数据依然可能是有用的。所以在清理segment时,我们会将肯定无效的数据删除,剩下的数据就存放在checkpoint中,而在Prometheus重启时,应该首先加载checkpoint中的内容,再按序加载各个segment的内容。
- 4.最后,series和samples以Record的形式被批量写入segment文件中,默认segment超过128MB时,会创建新的segment文件。若Prometheus因为各种原因崩溃了,WAL里的各个segment以及checkpoint里的的内容就是在崩溃时刻Prometheus内存的影响,Prometheus在重庆市只加载WAL中的内容就能完全"恢复现场"。
4.Prometheus对block进行定时压实(compaction)
Prometheus对block进行定时压实(compaction),compaction压实的作用如下:
- 1.将标记删除的数据清理;
- 2.compaction主要操作包括合并block,删除过期数据,重构chunk数据;
- 3.其中合并多个block成为更大的block,可以有效减少block个数,当查询覆盖的时间范围较长时,避免需要合并很多block的查询结果;
- 4.为提高删除效率,删除时序数据时,会记录删除的位置,只有block所有数据都需要删除时,才将block整个目录删除,因此block合并的大小也需要进行限制;
5.推荐阅读
5.1 Chunk格式
推荐阅读:
https://github.com/prometheus/prometheus/blob/main/tsdb/docs/format/chunks.md
5.2 head_chunks格式
推荐阅读:
https://github.com/prometheus/prometheus/blob/main/tsdb/docs/format/head_chunks.md
5.3 索引磁盘格式
索引磁盘格式:
https://github.com/prometheus/prometheus/blob/main/tsdb/docs/format/index.md
5.4 tombstones格式
推荐阅读:
https://github.com/prometheus/prometheus/blob/main/tsdb/docs/format/tombstones.md
5.5 wal磁盘格式
推荐阅读:
https://github.com/prometheus/prometheus/blob/main/tsdb/docs/format/wal.md
二.Prometheus存储参数说明
参数名 | 作用描述 | 参考值 | 补充说明 |
---|---|---|---|
--storage.remote.flush-deadline | 在关闭或配置重新加载时等待存储刷盘的时间 | 1m | 可以依据数据量做适当调整。 |
--storage.remote.read-concurrent-limit | 远程读取调用的并发QPS,0表示没有限制。 | 10 | 保护后端存储,避免被高并发打垮。 |
--storage.remote.read-max-bytes-in-frame | 远程读取流中,在解码数据前,单个帧中的最大字节数,默认1MB。 | 1048576 | 保护后端存储,避免被高并发打垮。 |
--storage.remote.read-sample-limit | 在单个查询中要通过远程接口返回的最大样本总数。 0表示没有限制,对于流式响应类型,将忽略此限制。 |
50000000 | 保护后端存储,避免被高并发打垮。 |
--storage.tsdb.allow-overlapping-blocks | 允许重叠的块,从而启用垂直压缩和垂直查询合并。 | true | |
--storage.tsdb.max-block-duration | 压实块的时间范围上线,用于测试,默认保留期的10%。 | 6d | |
--storage.tsdb.min-block-duration | 数据块在保留之前的最小持续时间,用于测试。 | ||
--storage.tsdb.no-lockfile | 不要在数据目录中创建锁文件。 | false | |
--storage.tsdb.path | 数据存储目录,若不指定默认为进程运行目录的data。 | ||
--storage.tsdb.retention.time | 保存数据的时间,默认值为15天,我配置的是2个月时间60天。 | 60d | |
--storage.tsdb.retention.size | 一个块最大能够存储的字节数。 | 512MiB | |
--storage.tsdb.wal-compression | 开启WAL压缩。 | true | |
--storage.tsdb.wal-compression-type | 指定压缩的类型。 | snappy | |
--storage.tsdb.wal-segment-size | WAL文件大小,默认为128M。 | 0B |
如上表所示,都是存储相关参数,我们可以根据实际情况做微调。
如下图所示,我们可以看到当前Prometheus系统的存储相关属性值。
http://10.0.0.31:9090/flags
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。
欢迎交流学习技术交流,个人微信: "JasonYin2020"(添加时请备注来源及意图备注)
作者: 尹正杰, 博客: https://www.cnblogs.com/yinzhengjie/p/18534198