prometheus数据备份和恢复

prometheus将采集到的样本以时间序列的方式保存在内存(TSDB 时序数据库)中,并定时保存到硬盘中。

prometheus默认本地会存储15天的数据,如果超过15天会自动删除,如果需要调整这个时间,需要修改prometheus的配置参数storage.tsdb.retention.time

prometheus 分为三个部分,分别是:抓取数据、存储数据和查询数据。

prometheus按照block块的方式来存储数据,每2小时为一个时间单位,首先会存储到内存中,当到达2小时后,会自动写入磁盘中。block的目录结构如下:

chunks #是个目录、保存timeseries数据
meta.json #配置文件,包含起止时间、包含哪些block
index #通过metric名和labels查找时序数据在chunk文件中的位置
tombstones #删除操作会首先记录到这个文件

为防止程序异常而导致数据丢失,采用了WAL机制,即2小时内记录的数据存储在内存中的同时,还会记录一份日志,存储在block下的wal目录中。当程序再次启动时,会将wal目录中的数据写入对应的block中,从而达到恢复数据的效果。

当删除数据时,删除条目会记录在tombstones 中,而不是立刻删除。

prometheus采用的存储方式称为"时间分片",每个block都是一个独立的数据库。优势是可以提高查询效率,查哪个时间段的数据,只需要打开对应的block即可,无需打开多余数据。

prometheus的存储层使用了全文检索中的“倒排索引”概念,将每个时间序列视为一个小文档。而metric和label对应的是文档中的单词。

上面tsdb存储原理介绍完了,我们接下来介绍下备份的方法

备份prometheus的存储目录可以达到完全备份的目的,但效率较低,所以我们通常通过API的方式,快速备份数据

首先我们需要修改prometheus的启动参数,新增以下参数

--web.enable-admin-api

然后我们再启动prometheus,通过以下命令就可以进行备份了。

curl -X POST http://localhost:9090/api/v1/admin/tsdb/snapshot?skip_head=false

skip_head参数可以不带,默认就是false,如果设置为true,那么备份的时候就会跳过内存中的数据

此时数据将快速的备份到了prometheus存储目录下,snapshot目录就是备份的数据

微信截图_20240104185823.png

数据备份完了,那么接下来看看怎么还原数据

还原数据就比较简单,之前备份的snapshot中的文件直接覆盖到prometheus存储目录下

也就是/prometheus/snapshots/20240104T105645Z-1d11f86638a66ed1目录下的所有目录文件,直接拷贝到/prometheus/目录下

然后重启prometheus即可。

微信截图_20240104185836.png

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/957.html