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

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
简介: Grafana Mimir:支持乱序的指标采集

译自:New in Grafana Mimir: Introducing out-of-order sample ingestion

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

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

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

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

支持乱序的设计方案

我们和Dieter Plaetinck编写了一个设计文档来解决乱序问题。

数据的摄取

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,可以看到上述过程如下:

  1. 一开始内存中没有任何时序数据
  2. 此时来了两个样本,一个是时序为600的样本,另一个是时序为750的样本,它们作为一个有序的chunk
  3. 来了30个时序为1到150之间的乱序样本
  4. 来了10个样本,由于前面的chunk已经满了,因此需要为乱序数据创建一个新的chunk
  5. 随着样本的增加,需要创建更多的chunks。注意chunk1和chunk2有一个重叠的值,300
  6. 来了一个新的以时序0开始的样本,它被插入了chunk3,此时chunk3与chunk0、1、2重叠

查询

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能够从重叠的块中请求数据,并在需要时合并重叠的块。

Grafana Mimir 和 Grafana Cloud中的乱序样本摄取

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

性能特征

性能取决于:

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

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

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

PS

Prometheus v2.39.0版本已经支持乱序指标,通过out_of_order_time_window配置乱序窗口

相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
目录
相关文章
|
存储 Prometheus 运维
[10.14 workshop] 自定义 Prometheus 监控指标并通过 Grafana 展示
阿里云Prometheus监控全面对接开源Prometheus生态,支持类型丰富的组件监控,提供多种开箱即用的预置监控大盘,且提供全面托管的Prometheus服务。借助阿里云Prometheus监控,您无需自行搭建Prometheus监控系统,因而无需关心底层数据存储、数据展示、系统运维等问题。
[10.14 workshop] 自定义 Prometheus 监控指标并通过 Grafana 展示
|
5月前
|
监控 数据可视化 关系型数据库
PolarDB产品使用问题之如何使用Grafana采集PolarDB的指标并进行可视化监控
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
缓存 Prometheus 监控
【监控利器Prometheus】——Prometheus+Grafana监控SpringBoot项目业务指标监控
Prometheus+Grafana监控SpringBoot项目业务指标监控 1、SpringBoot项目配置 2、prometheus添加配置 3、Grafana配置
【监控利器Prometheus】——Prometheus+Grafana监控SpringBoot项目业务指标监控
|
存储 Prometheus 监控
一文搞懂 Grafana Mimir
Hello folks,我是 Luga,今天我们来分享一下与 Grafana 有关的观测性话题- Grafana Mimir。 作为一个开源软件项目,Grafana Mimir 主要为 Prometheus 提供可扩展的长期存储功能支撑。
587 0
|
监控 Linux 测试技术
性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据
性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据
153 0
|
监控 Linux 测试技术
性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机或Docker容器性能数据
性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机或Docker容器性能数据
224 0
|
分布式计算 运维 监控
Apache Doris Grafana监控指标介绍
整个集群重点关注的几个指标。
1037 0
Apache Doris Grafana监控指标介绍
|
存储 运维 Prometheus
全面公测|Grafana服务:一张图表胜过千行指标&日志
Grafana 帮助运维人员轻松处理各类运维过程中遇到的各类数据可视化与分析难题。目前阿里云 Grafana 服务全面免费公测,帮助企业轻松构建运维数据可视化平台,轻松实现数据驱动运维!
全面公测|Grafana服务:一张图表胜过千行指标&日志
|
监控 前端开发 运维
使用 Grafana 展示阿里云监控指标
本文介绍使用 Grafana 展示阿里云监控指标的方法,并提供了使用 helm chart 一键部署包含阿里云监控 dashboard 的 Grafana-Server。
10967 0
|
Prometheus 监控 Cloud Native
下一篇
DataWorks