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的目录结构如下:  

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的启动参数,新增以下两个参数:

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

  重启prometheus

  调用API

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

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

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

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

完整的调用方式为:

# 不跳过内存中的数据,即同时备份内存中的数据
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点备份)

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

最新文章

  1. js字符串转为日期格式
  2. Git学习笔记(一)
  3. /MT /MD /ML /MTd /MDd /MLd 的区别
  4. updatepanel的用法之triggers
  5. iOS 开发之EXC_BAD_ACCESS异常分析
  6. hdu 1102 Constructing Roads(最小生成树 Prim)
  7. C#操作Kentico cms
  8. openstack私有云布署实践【9.2 Glance镜像管理(办公网环境)】
  9. 小团队git开发模式
  10. php基础语法(20161021)
  11. Linux之uniq命令
  12. 序列化之对象,字符串,byte数组,XML之间的转换(一)
  13. Java基础学习笔记六 Java基础语法之类和ArrayList
  14. Windows10文件目录下添加 Shift+右键打开管理员Powershell窗口
  15. Dynamics CRM 日常使用JS整理(二)
  16. Resource Agent:LSB和OCF
  17. asp.net core下的如何给网站做安全设置
  18. Day 08 文件操作模式,文件复制,游标
  19. 关于一个常用的CheckBox样式
  20. geoserver 数据图层输出格式

热门文章

  1. H5 端 rem 适配方案与 viewport 适配
  2. Java(215-231)【Object类、常用API】
  3. 黑马架构师v2.5.1 (codeUtil)使用注意事项
  4. 并发编程之ThreadLocal
  5. C/C++ 构建系统,我用 xmake
  6. 软件篇-03-基于ORB_SLAM2手写SLAM稠密地图构建实现
  7. 【Scrapy(二)】Scrapy 中的 Pipline,Item,Shell组件
  8. hdu 4891 模拟
  9. hdu4888 最大流(构造矩阵)
  10. Flask 实现分页