• 欢迎来到小爱博客,一个分享互联网IT技术的网站,喜欢就收藏吧!

prometheus存储原理及数据备份还原

prometheus 小爱 2个月前 (08-14) 44次浏览 已收录 0个评论 扫描二维码

prometheus将采集到的样本以时间序列的方式保存在内存(TSDB 时序数据库)中,并定时保存到硬盘中。与zabbix不同,zabbix会保存所有的数据,而prometheus本地存储会保存15天,超过15天以上的数据将会被删除,若要永久存储数据,有两种方式,方式一:修改prometheus的配置参数“storage.tsdb.retention.time=10000d”;方式二:将数据引入存储到Influcdb中。为保证数据安全性,本文主要介绍的是promethues本地存储备份数据的方法。


一、存储原理

prometheus 提供了本地存储(TSDB)时序型数据库的存储方式,在2.0版本之后,压缩数据的能力得到了大大的提升,单节点情况下可以满足大部分用户的需求,但本地存储阻碍了prometheus集群化的实现,因此在集群中应当采用 其他时序性数据来替代,比如influxdb。
prometheus 分为三个部分,分别是:抓取数据存储数据查询数据

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

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

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

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

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

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

二、数据备份

1、完全备份

备份prometheus的data目录可以达到完全备份的目的,但效率较低。

2、快照备份

prometheus提供了一个功能,是通过API的方式,快速备份数据。

实现方式:

  首先,修改prometheus的启动参数,新增以下两个参数:

1
2
--storage.tsdb.path=/usr/local/share/prometheus/data \
--web.enable-admin-api       

重启prometheus

调用API

1
2
3
curl -XPOST http://prometheusIP:端口/api/v1/admin/tsdb/snapshot
返回结果:  
{"status":"success","data":{"name":"20191220T012427Z-21e0e532e8ca3423"}}

此时,数据将快速的备份到 data/snapshots下。

【注意】上述API还有一个参数

1
2
skip_head=<bool>                        默认是false
作用:是否跳过存留在内存中还未写入磁盘中的数据,仍在block块中的数据

完整的调用方式为:

1
2
3
4
# 不跳过内存中的数据,即同时备份内存中的数据
curl -XPOST http://127.0.0.1:9090/api/v2/admin/tsdb/snapshot?skip_head=false
# 跳过内存中的数据
curl -XPOST http://127.0.0.1:9090/api/v2/admin/tsdb/snapshot?skip_head=true

 三、数据还原

利用api方式制作成snapshot后,还原时将snapshot中的文件覆盖到data目录下,重启prometheus即可!

  添加定时备份任务(每周日3点备份)

1
2
3
crontable -e                              #注意时区,修改完时区后,需要重启 crontab    systemctl  restart cron
0 3 * * 7 sudo /usr/bin/curl -XPOST -I http://127.0.0.1:9090/api/v1/admin/tsdb/snapshot >> /home/bill/prometheusbackup.log

小爱博客 , 版权所有
转载请注明原文链接:prometheus存储原理及数据备份还原
喜欢 (0)
【你的支持, 我的动力】
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址