4.Prometheus之存储及WAL
- 一、整体介绍
- 二、block
- 2.1 head block
- 三、WAL(Write-ahead logging, 预写日志)
- 3.1 数据流向
- 四、和存储相关的启动参数
- 五、总结
一、整体介绍
Prometheus 2.x 采用自定义的存储格式将样本数据保存在本地磁盘当中。如下所示,按照两个小时(最少时间)为一个时间窗口,将两小时内产生的数据存储在一个块(Block)中,每一个块中包含该时间窗口内的所有样本数据(chunks),元数据文件(meta.json)以及索引文件(index)。
[mingming.chen@m162p65 data]$ tree |
二、block
TSDB将存储的监控数据按照时间分成多个block存储,默认最小的block保存时间为2h,后台程序还会将小块合并成大块,减少内存中block的数量,便于索引查找数据,可以通过meta.json查看,可以看到01E2MA5GDWMP69GVBVY1W5AF1X被压缩1次,source有3个block,那么2*3=6小时的数据量。

关于block压缩:
- 最初的两个小时的块最终会在后台压缩为更长时间的块;
- 压缩的最大时间块为数据保留时间的10%或者31天,取两者的较小者。
2.1 head block
1.head block中的数据是被存储在内存中的并且可以被任意修改;
2.head block和后续的block初始设定保存2h数据,当head block超过3h时,会被拆分为2h+1h,2h block会变成只读块写入磁盘.(通过观察服务器上prometheus存储目录,每次压缩合并小块时间都比块内部时间多三个小时,为head block),如下所示:

三、WAL(Write-ahead logging, 预写日志)

3.1 数据流向
prometheus将周期性采集到的数据通过Add接口添加到head block,但是这些数据暂时没有持久化,TSDB通过WAL将数据保存到磁盘上(保存的数据没有压缩,占用内存较大),当出现宕机,启动多协程读取WAL,恢复数据。
四、和存储相关的启动参数
--storage.tsdb.path: This determines where Prometheus writes its database. Defaults to data/. |
PS: 以上有两个参数storage.tsdb.retention.size和storage.tsdb.retention.time,两个同时设置时,两者无优先级,谁先触发就执行删除操作。(其它启动参数参考promethes#promethes 第五章节启动参数部分)
五、总结
需要解决的几个问题:
1.远程存储节点长时间挂掉(默认blocK大小为2小时,实际大于六小时,prometheus2.15经测试验证非官方文档说的两个小时),刷盘到prometheus的数据库中的数据还能不能同步到远程?
2.WAL的缓存数据的时间可不可以调整?
解答:
1.根据以上内容和3.远程写参数优化可知,prometheus本地存储和远程存储并无影响。因为远程存储是通过将WAL中的数据缓存到多个内存队列(shards)中,然后写到远程存储设备,其直接与WAL打交道。而prometheus只是用WAL来防止数据丢失,其存储的一系列动作都与WAL没关系。所以当内存中缓存的数据达到刷盘的阈值,WAL中没有写到远程存储的数据就会丢失,当重新启动远程存储服务,原来那部分没有写入远程存储服务的数据已经丢失,只能从最新的数据开始写入远程存储,这部分可参考3.远程写参数优化2.2部分结论。
2. 可以调整,准确来说是间接调整。wal保留数据的长短与prometheus最小压缩block大小有关系,由于wal中至少保留当前时间正在写入的文件之外的三个文件(每个文件保存一个block大小的数据量),所以当增大block大小的时候就会相应的增大wal保存的数据量,但是,block的大小调整会直接影响内存的使用,需要根据现有的环境进行相应的调优。
如下图所示,当我设置--storage.tsdb.min-block-duration=4h(prometheus的启动参数)时,wal中当前保留的文件(存在的数据时间范围:2020.03.20 20:00:00–2020.03.21 13.52),其中每个文件保留4个小时的数据量。

4.Prometheus之存储及WAL的更多相关文章
- Prometheus TSDB存储原理
Prometheus 包含一个存储在本地磁盘的时间序列数据库,同时也支持与远程存储系统集成,比如grafana cloud 提供的免费云存储API,只需将remote_write接口信息填写在Prom ...
- Prometheus学习系列(九)之Prometheus 存储
前言 本文来自Prometheus官网手册 和 Prometheus简介 存储 Prometheus是一个本地磁盘时间序列数据库,但也可选择与远程存储系统集成,其本地时间序列数据库以自定义格式在磁盘上 ...
- Prometheus存储模型分析
Prometheus是时下最为流行的开源监控解决方案,我们可以很轻松地以Prometheus为核心快速构建一套包含监控指标的抓取,存储,查询以及告警的完整监控系统.单个的Prometheus实例就能实 ...
- Prometheus存储原理及数据备份还原
prometheus将采集到的样本以时间序列的方式保存在内存(TSDB 时序数据库)中,并定时保存到硬盘中.与zabbix不同,zabbix会保存所有的数据,而prometheus本地存储会保存15天 ...
- Prometheus时序数据库-内存中的存储结构
Prometheus时序数据库-内存中的存储结构 前言 笔者最近担起了公司监控的重任,而当前监控最流行的数据库即是Prometheus.按照笔者打破砂锅问到底的精神,自然要把这个开源组件源码搞明白才行 ...
- 如何精简 Prometheus 的指标和存储占用
前言 随着 Prometheus 监控的组件.数量.指标越来越多,Prometheus 对计算性能的要求会越来越高,存储占用也会越来越多. 在这种情况下,要优化 Prometheus 性能, 优化存储 ...
- Prometheus运⾏框架介绍
框架结构的展⽰图 • 我们先来看下这个部分 这⾥是 prometheus的服务端也就是核⼼ prometheus本⾝是⼀个以进程⽅式启动,之后以多进程和多线程实现监控数据收集 计算 查询 更新 存储 ...
- 时序数据库连载系列:指标届的独角兽Prometheus
简介 Prometheus是SoundCloud公司开发的一站式监控告警平台,依赖少,功能齐全.于2016年加入CNCF,广泛用于 Kubernetes集群的监控系统中,2018.8月成为继K8S之后 ...
- Prometheus TSDB分析
Prometheus TSDB分析 概述 Prometheus是著名开源监控项目,其监控任务调度给具体的服务器,该服务器到目标上抓取监控数据,然后保存在本地的TSDB中.自定义强大的PromQL语言查 ...
- Kubernetes容器集群管理环境 - Prometheus监控篇
一.Prometheus介绍之前已经详细介绍了Kubernetes集群部署篇,今天这里重点说下Kubernetes监控方案-Prometheus+Grafana.Prometheus(普罗米修斯)是一 ...
随机推荐
- 牛客小白月赛2 D题虚虚实实
题目链接:https://www.nowcoder.com/acm/contest/86/D 解题思路:这题目就是判断是否存在欧拉路径.由无向图存在欧拉路径的充分必要条件可知先判断是否联通,再判断是否 ...
- 现代 CPU 技术发展
介绍 这篇文章主要是介绍CPU技术的发展,包括最近几十年CPU性能提升和半导体工艺发展,当前技术发展方向.希望可以帮助软件开发者理解CPU指令集和组成运行原理.CPU性能提升的现状和瓶颈.CPU技术发 ...
- Scrapyd、scrapyd-client部署爬虫项目
命令参考:https://github.com/scrapy/scrapyd-client https://scrapyd.readthedocs.io 安装组件 pip install scrapy ...
- C++ Qt开发:QSqlDatabase数据库组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QSqlDat ...
- 测试member和coupon的远程调用
测试member和coupon的远程调用 想要获取当前会员领取到的所有优惠券.先去注册中心找优惠券服务, 注册中心调一台优惠券服务器给会员,会员服务器发送请求给这台优 惠券服务器,然后对方响应. Fe ...
- reboot详解
linux下reboot命令详解 linux reboot 命令详解 功能说明:重新开机. 语 法:dreboot [-dfinw] 补充说明:执行reboot指令可让系统停止运作,并重新开机. 参 ...
- ubuntu 之 go+/goplus 安装
目前情况是要安装 goplus/go+ 之前 必须先安装 golang golang下载地址:https://golang.google.cn/dl/ 或者 https://studygolang.c ...
- CSS 基础 3 - 定位 Postion 属性
CSS 基础 3 - 定位 Postion 属性 static position 属性的默认值,元素随 HTML 流移动 top/left/right/bottom 属性无效 relative 和 s ...
- Flume快速入门
Flume快速入门 一.简介 高可用.高可靠,分布式的海量日志采集.聚合和传输系统,基于流式架构,灵活简单. event:事件 source:数据源 sink:目标 channel:数据管道 通过获取 ...
- Llama2-Chinese项目:6-模型评测
测试问题筛选自AtomBulb[1],共95个测试问题,包含:通用知识.语言理解.创作能力.逻辑推理.代码编程.工作技能.使用工具.人格特征八个大的类别. 1.测试中的Prompt 例如对于问 ...