Grafana Mimir:支持乱序的指标采集

Grafana Mimir:支持乱序的指标采集

很早之前在使用thanos和多实例的Prometheus时经常会在thanos日志中看到时序数据乱序的问题。当时唯一的办法就是从对象存储中手动删除这部分数据,非常不方便。Grafana Mimir中对乱序数据的支持是一个很大的改进。

传统的Prometheus TSDB仅支持接收1小时内的有序采样,然后丢弃其他样本。这种方式可以让Prometheus高效地存储样本。但在实际中,Prometheus的拉取模式(以一定节奏从被观察的目标中提取数据)也给用户的使用带来了很多限制。

在一些使用场景下可能会存在乱序数据,如:

  • 异步启动并写入指标的IoT设备
  • 使用消息总线(如使用随机分片的Kafka)的复杂传递架构,可能存在拥塞延迟。
  • 某些情况下受网络连接而孤立的Prometheus实例会尝试推送老的样本。

Prometheus TSDB有一个内存区域,称为head block。我们通过共享该head block来避免产生重复的内存索引,同时可以减低内存消耗。对于head block中的每个时序,我们在内存中保存了过去30个未压缩的乱序样本,并将其与有序样本完全隔离开来。当内存chunk中的乱序样本达到30个之后,它将会被压缩并刷新到磁盘,并从head block开始内存映射。

这一点类似head block处理有序样本的方式:内存中的有序样本会保存在一个压缩的chunk中,最大可以保存120个样本。由于需要保存到内存中,且乱序的chunk是未压缩的,因此我们将样本数限制为30,防止消耗过多的内存。

我们还引入了一个新的方式,称为 Write-Behind-Log (WBL)。WBL类似Prometheus TSDB中的 Write-Ahead-Log (WAL)。在WBL中,当在TSDB中添加样本之后才会写数据,而WAL是在TSDB数据变更前写数据。我们使用WBL来记录摄取的乱序样本,因为在摄取样本前,我们并不知道样本是有序的还是乱序的。

下图展示了该过程。注意乱序chunk之前可能会重叠(下图中:OOO = Out of Order)。

白色表示内存映射的乱序chunk,黄色表示活动状态(表示新来的样本,活动状态的样本可能会被合并)的乱序Head Chunk,而蓝色表示有序的Head Chunk,可以看到上述过程如下:

Prometheus TSDB有一个有用的抽象-查询器,它将head block和磁盘的持久块上的所有内容视为”块读取器”。TSDB使用一个head block包装器来读取固定时间范围内的有序数据。类似地,我们实现了另一个围绕head block且仅读取乱序chunk的包装器。这样,head block可以体现为两种块读取器:仅读取有序数据的,和仅读取乱序数据的。

现有的查询逻辑可以无缝地处理块读取器和其他持久块数据的合并结果。但查询器要求块读取器按排序提供非重叠的块。这样,head block的乱序块读取器需要在查询时合并重叠的chunks(如下图)。当访问样本时,会发生合并,但不会重新创建块。

TSDB中的持久块会与2小时Unix时间戳对齐。对于有序数据,每过2小时,我们会获取head block中的2小时内的老数据,并将其转变为持久块,这个称为head block的压缩过程。在压缩完有序数据后,也会对乱序数据进行压缩。

由于乱序数据的特点,其可能包含跨2个小时块的样本。因此,根据需要,我们在单次乱序数据的压缩过程中会生成多个持久块,如下所示。该持久块与其他持久块类似。在压缩之后,会根据需要清理WBL和其他内容。这些块可能会与磁盘中已有的块或head block中的有序数据重叠。

一旦产生了这些块,就完成了乱序代码的处理。TSDB能够从重叠的块中请求数据,并在需要时合并重叠的块。

我们引入了一个名为 out_of_order_time_window的配置参数来指定可以支持多老的乱序样本。默认为0,即不支持乱序样本。如果设置为1小时,则Grafana Mimir 会摄取过去1小时内的所有乱序样本。

性能取决于:

  • 摄取乱序样本的模式
  • 乱序样本的数目
  • 摄取的乱序样本率

在很多情况下,所有上述条件都会导致摄取器的CPU使用率增加。在有限验证的条件下,我们发现除处理乱序样本的摄取器(摄取和查询)上的CPU利用率为50%外,其他组件没有看到CPU变动。

在我们的环境中,内存的增加并不明显。但当时间序列的很大比率为乱序样本时会导致内存变化,但总体增长应该仍然很小。

Original: https://www.cnblogs.com/charlieroro/p/16678430.html
Author: charlieroro
Title: Grafana Mimir:支持乱序的指标采集

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/802960/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 运维开发-python自动化-bottle库

    是什么 前言:是什么,意在描述该事物的含义。Bottle 是一个快速,简单,轻量级的 Python WSGI Web 框架。单一文件,只依赖 Python 标准库 。bottle很…

    Python 2023年8月5日
    071
  • python pygame字体设置_《Python和Pygame游戏开发指南》——2.20 字体

    本节书摘来自异步社区《Python和Pygame游戏开发指南》一书中的第2章,第2.20节,作者[美]Al Sweigart(斯维加特), 李强 译,更多章节内容可以访问云栖社区&…

    Python 2023年9月23日
    034
  • 【python笔记】第十节 闭包与装饰器

    💕💕💕 博主昵称:摆烂阳💕💕💕🥰博主主页跳转链接👩‍💻博主研究方向:web渗透测试 、python编程📃 博主寄语:希望本篇文章能给大家带来帮助,有不足的地方,希望友友们给予指导 …

    Python 2023年8月3日
    052
  • Python 基础测试题(含答案)

    一、 选择题:每小题 2 分,共 40 分。 1、 下列标识符命名中, 符合规范的是( )。 A、 1_a B、 for C、 年龄 D、 a#b 2、 下列标识符中,不是 Pyt…

    Python 2023年8月1日
    082
  • fig,ax = plt.subplots()

    它是用来创建 总画布/figure”窗口”的,有figure就可以在上边(或其中一个子网格/subplot上)作图了,(fig:是figure的缩写)。 f…

    Python 2023年9月3日
    084
  • Python 使用 pip 安装第三方库

    第三方库 Python 最强大的功能之一是能够十分方便地使用性能优异的第三方库,这些库涵盖了大量的不同领域,从专门用于执行数值运算的 Numpy 库到用于机器学习的 PyTorch…

    Python 2023年8月24日
    058
  • 【无标题】

    【数据分析】——pandas 一、生成pandas生成pandas 作用pd.Series() 生成pandas,一维数组pd.DataFrame() 生成pandas,二维的,有…

    Python 2023年8月16日
    041
  • python 爬取数据还要下载scrapy吗_在Python3.5下安装和测试Scrapy爬网站

    本帖最后由 xandy 于 2017-3-2 16:13 编辑 引言 Scrapy框架结构清晰,基于twisted的异步架构可以充分利用计算机资源,是爬虫做大的必备基础。本文将讲解…

    Python 2023年10月6日
    035
  • flask两种登录的方式

    (1)自己实现,登陆后,将用户数据塞入到session中,在请求钩子before_request之前,可以将session中的数据放入到请求上下文g(全局变量)中去,然后实现全页面…

    Python 2023年8月9日
    047
  • Python+pytest+request+allure+yaml接口自动化

    Python+pytest+request+allure接口自动化 一、脚本结构 ; 二、配置文件 ​ pytest.ini这个文件他是pytest的单元测试框架的核心配置文件 ​…

    Python 2023年9月10日
    065
  • python数据分析三剑客之numpy

    抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。 Original: https://blo…

    Python 2023年8月30日
    046
  • 封装一个丝滑的聊天框组件

    需求背景 应公司业务要求,需要做个聊天机器人,要适应不同的业务场景,大概就跟淘宝客服类似,发送消息,机器人自动回复。 话不多说,直接开撸 技术栈: react(hooks写法) +…

    Python 2023年9月15日
    048
  • PyTorch初学者指南:数据预处理

    PyTorch初学者指南:数据预处理 我们为了运用深度学习来解决一些实际问题,经常要从预处理原始数据开始,而不是那些处理好的张量格式数据开始,原始数据一般都很大,所以人为的去检查效…

    Python 2023年11月7日
    055
  • python气象可视化第二弹-黄河流域白化

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 * 在学习了气象家园平流层的萝卜首发、晋陵小生优化的 maskout 模块白化功能之后。利用九大流…

    Python 2023年8月31日
    0112
  • python dataframe调整列顺序_Python pandas.DataFrame调整列顺序及修改index名的方法

    从字典创建DataFrame import pandas dict_a = {‘user_id’:[‘webbang’,&#8217…

    Python 2023年8月19日
    072
  • 鹅厂微服务发现与治理巨作PolarisMesh实践-上

    @ 概述 定义 核心功能 组件和生态 特色亮点 解决哪些问题 官方性能数据 架构原理 资源模型 服务治理 基本原理 服务注册 服务发现 安装 部署架构 集群安装 SpringClo…

    Python 2023年10月17日
    047
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球