prometheus存储

1、本地存储

磁盘布局:

这些目录叫做2小时块

每个目录包含一个chunks子目录(包含那个时间窗口里的所有时间序列)、元数据文件meta.json索引文件index

索引文件将度量名称和标签索引到chunks目录中的时间序列上。

chunks目录中的样例被分组到一个或多个段文件中,每个段文件默认最大上限是512M。

 

 

段文件的格式如图所示。000001

 

当通过API删除序列时,不会立即删除块段(chunk segment)中的数据,而是会将这一次删除动作保存在墓碑(tombstone)文件中。

 

 

 

用于incoming samples的当前块是保存在内存中的,并没有完全持久化。

如果prometheus服务器挂了,那岂不是少了数据?

不会的,因为prometheus有一个预写日志(WAL),每一次动作都会记录到预写日志中。

当prometheus重启时,就会重放这些日志,因此就能恢复数据。

 

预写日志文件被保存在wal目录中,以128MB的形式存在。

 

 

这些预写日志文件包含尚未压缩的原始数据,因此它们比常规的块文件大得多。

prometheus至少保留3个预写日志文件(如上图)。

高流量的服务器可能会保留多于3个的预写日志文件,以至少保留2个小时的原始数据。

 

请注意,本地存储的一个限制是:它不是群集或复制的

因此,它在驱动器或节点中断时不具有任意的可扩展性或持久性,应该像任何其他单节点数据库一样进行管理。

建议使用RAID以提高存储可用性,建议使用快照进行备份。通过适当的体系结构,可以在本地存储中保留数年的数据

 

可以通过远程读写API来使用外部存储

 

2、压缩

2小时块 最终 在后台会被压缩成更长的块

 

prometheus通过以下选项来配置本地存储。

--storage.tsdb.path:数据存储位置,默认是data目录。

--storage.tsdb.retention.time:保留时间,默认是15天,过15天之后,就删除。该配置会覆盖--storage.tsdb.retention的值。

--storage.tsdb.retention.size:要保留的块的最大字节数。最早的数据会首先被删除。默认为0或禁用。

磁盘的最小尺寸取决于:wal目录(wal和checkpoint)chunks_head目录(m-mapped head chunks)的峰值空间(每2小时会达到一次峰值)。

 

--storage.tsdb.wal-compression:开启预写日志的压缩。

 

needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample

 

3、远程存储

prometheus的本地存储受限于单节点的扩展性和耐久性。

 

prometheus集成远程存储的三种方式:

(1)prometheus会将它接收的样本数据标准格式写入远程的URL

(2)prometheus能从其他prometheus服务器以标准格式接收样本数据。

(3)prometheus以标准格式从远程URL读取样本数据

 

 

https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write

https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_read

 

内置的远程写入接收器,通过以下选项开启:--enable-feature=remote-write-receiver

开启后,远程写入接收器的端点是:/api/v1/write

https://github.com/prometheus/prometheus/blob/main/prompb/remote.proto

 

更多集成:

https://prometheus.io/docs/operating/integrations/#remote-endpoints-and-storage

 

openmetrics format格式的数据写入到TSDB中。以blocks的形式存放。

典型的用例是将度量数据从不同的监控系统或时间序列数据库迁移到Prometheus。

迁移的前提是:需要首先将这些数据转换成openmetrics format,然后才能迁移。

 

回填

通过promtool命令行工具完成回填。

promtool会将块写入到目录中。默认情况下,是写入到 ./data/ 目录。

promtool tsdb create-blocks-from openmetrics <input file> [<output directory>]

 

当创建完 块 之后,再将这些块移动到prometheus的数据目录中。

如果prometheus的数据目录中已经有这些块了,那就会发生重叠。因此需要设置

--storage.tsdb.allow-overlapping-blocks

以允许重叠。

 

请注意,任何回填的数据都要遵守为Prometheus服务器配置的保留(时间层面或大小层面的保留)。

--storage.tsdb.retention.size

 

posted @ 2021-11-19 14:20  道霖  阅读(1421)  评论(0编辑  收藏  举报