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

posted @ 2024-11-07 23:14  尹正杰  阅读(26)  评论(0编辑  收藏  举报