阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Prometheus TSDB分析

466次阅读
没有评论

共计 2344 个字符,预计需要花费 6 分钟才能阅读完成。

概述

Prometheus 是著名开源监控项目,其监控任务调度给具体的服务器,该服务器到目标上抓取监控数据,然后保存在本地的 TSDB 中。自定义强大的 PromQL 语言查询实时和历史时序数据,支持丰富的查询组合。
Prometheus 1.0 版本的 TSDB(V2 存储引擎)基于 LevelDB,并且使用了和 Facebook Gorilla 一样的压缩算法,能够将 16 个字节的数据点压缩到平均 1.37 个字节。
Prometheus 2.0 版本引入了全新的 V3 存储引擎,提供了更高的写入和查询性能。本文主要分析该存储引擎设计思路。

设计思路

Prometheus 将 Timeseries 数据按 2 小时一个 block 进行存储。每个 block 由一个目录组成,该目录里包含:一个或者多个 chunk 文件(保存 timeseries 数据)、一个 metadata 文件、一个 index 文件(通过 metric name 和 labels 查找 timeseries 数据在 chunk 文件的位置)。最新写入的数据保存在内存 block 中,达到 2 小时后写入磁盘。为了防止程序崩溃导致数据丢失,实现了 WAL(write-ahead-log)机制,将 timeseries 原始数据追加写入 log 中进行持久化。删除 timeseries 时,删除条目会记录在独立的 tombstone 文件中,而不是立即从 chunk 文件删除。
这些 2 小时的 block 会在后台压缩成更大的 block,数据压缩合并成更高 level 的 block 文件后删除低 level 的 block 文件。这个和 leveldb、rocksdb 等 LSM 树的思路一致。
这些设计和 Gorilla 的设计高度相似,所以 Prometheus 几乎就是等于一个缓存 TSDB。它本地存储的特点决定了它不能用于 long-term 数据存储,只能用于短期窗口的 timeseries 数据保存和查询,并且不具有高可用性(宕机会导致历史数据无法读取)。
Prometheus 本地存储的局限性,所以它提供了 API 接口用于和 long-term 存储集成,将数据保存到远程 TSDB 上。该 API 接口使用自定义的 protocol buffer over HTTP 并且并不稳定,后续考虑切换为 gRPC。

磁盘文件结构

内存中的 block

内存中的 block 数据未刷盘时,block 目录下面主要保存 wal 文件。

./data/01BKGV7JBM69T2G1BGBGM6KB12
./data/01BKGV7JBM69T2G1BGBGM6KB12/meta.json
./data/01BKGV7JBM69T2G1BGBGM6KB12/wal/000002
./data/01BKGV7JBM69T2G1BGBGM6KB12/wal/000001

持久化的 block

持久化的 block 目录下 wal 文件被删除,timeseries 数据保存在 chunk 文件里。index 用于索引 timeseries 在 wal 文件里的位置。

./data/01BKGV7JC0RY8A6MACW02A2PJD
./data/01BKGV7JC0RY8A6MACW02A2PJD/meta.json
./data/01BKGV7JC0RY8A6MACW02A2PJD/index
./data/01BKGV7JC0RY8A6MACW02A2PJD/chunks
./data/01BKGV7JC0RY8A6MACW02A2PJD/chunks/000001
./data/01BKGV7JC0RY8A6MACW02A2PJD/tombstones

mmap

使用 mmap 读取压缩合并后的大文件(不占用太多句柄),建立进程虚拟地址和文件偏移的映射关系,只有在查询读取对应的位置时才将数据真正读到物理内存。绕过文件系统 page cache,减少了一次数据拷贝。查询结束后,对应内存由 Linux 系统根据内存压力情况自动进行回收,在回收之前可用于下一次查询命中。因此使用 mmap 自动管理查询所需的的内存缓存,具有管理简单,处理高效的优势。
从这里也可以看出,它并不是完全基于内存的 TSDB,和 Gorilla 的区别在于查询历史数据需要读取磁盘文件。

Compaction

Compaction 主要操作包括合并 block、删除过期数据、重构 chunk 数据。其中合并多个 block 成为更大的 block,可以有效减少 block 个数,当查询覆盖的时间范围较长时,避免需要合并很多 block 的查询结果。
为提高删除效率,删除时序数据时,会记录删除的位置,只有 block 所有数据都需要删除时,才将 block 整个目录删除。因此 block 合并的大小也需要进行限制,避免保留了过多已删除空间(额外的空间占用)。比较好的方法是根据数据保留时长,按百分比(如 10%)计算 block 的最大时长。

Inverted Index

Inverted Index(倒排索引)基于其内容的子集提供数据项的快速查找。简而言之,我可以查看所有标签为 app=“nginx”的数据,而不必遍历每一个 timeseries,并检查是否包含该标签。
为此,每个时间序列 key 被分配一个唯一的 ID,通过它可以在恒定的时间内检索,在这种情况下,ID 就是正向索引。
举个栗子:如 ID 为 9,10,29 的 series 包含 label app=”nginx”,则 lable “nginx” 的倒排索引为 [9,10,29] 用于快速查询包含该 label 的 series。

性能

在文章 Writing a Time Series Database from Scratch 里,作者给出了 benchmark 测试结果为 Macbook Pro 上写入达到 2000 万每秒。这个数据比 Gorilla 论文中的目标 7 亿次写入每分钟(1000 千多万每秒)提供了更高的单机性能。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2344字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7993621
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的 3D 玩偶了 前些日子参加某网站活动,获得一次实物 3D 打印的机会,于是从众多...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...