【博客671】prometheus如何选择数据点以及处理counter跳变

news/2024/5/19 1:32:51 标签: prometheus, linux, golang, 服务器

prometheuscounter_0">prometheus如何选择数据点以及处理counter跳变

prometheus_2">1、prometheus如何选择数据点

时间是怎么进来的?范围和即时查询!

您可能已经注意到,PromQL 查询中对时间的唯一引用是相对引用(例如[5m],回顾 5 分钟)。那么如何指定绝对图形时间范围或在表中显示查询结果的时间戳呢?在 PromQL 中,此类时间参数与表达式分开发送到Prometheus 查询 API,确切的时间参数取决于您发送的查询类型。Prometheus 知道两种类型的 PromQL 查询:即时查询和范围查询

1-1、即时查询

即时查询用于类表视图,您希望在其中显示单个时间点的 PromQL 查询结果。

即时查询具有以下参数:

  • PromQL 表达式。
  • 评估时间戳。

即时查询示例:让我们看一个即时查询示例,看看它的评估是如何工作的

http_requests_total想象一下在给定时间戳评估表达式。http_requests_total是一个即时向量选择器,它为具有度量名称 的任何时间序列选择最新样本http_requests_total。更具体地说,“最新”意味着相对于评估时间戳“最多 5 分钟旧且不陈旧”。因此,此选择器只会为在评估时间戳之前最多 5 分钟具有样本的系列生成结果,并且评估时间戳之前的最后一个样本不是过时标记(将系列标记为在某个时间点终止的显式方法) Prometheus TSDB 中的特定时间)。

如果我们在有最近样本的时间戳运行此查询,结果将包含两个系列,每个系列一个样本:

在这里插入图片描述
请注意,每个返回样本的输出时间戳不再是原始样本时间戳,而是设置为评估时间戳。
想象一下在某个时间戳执行相同的查询,其中该时间戳之前的数据有 >5m 的间隙:

在这里插入图片描述

在这种情况下,查询将返回空结果,因为所有匹配样本都太旧而无法包含在内。

1-2、范围查询

范围查询主要用于图形,您希望在其中显示给定时间范围内的 PromQL 表达式。范围查询的工作方式与许多完全独立的即时查询完全相同,这些查询在给定时间范围内的后续时间步长进行评估。当然,这是在幕后高度优化的,在这种情况下,Prometheus 实际上并没有运行许多独立的即时查询。

范围查询具有以下参数:

  • PromQL 表达式。
  • 一个开始时间。
  • 结束时间。
  • resolution step

在开始时间和结束时间之间的每个解析步骤评估表达式后,单独评估的时间片将缝合在一起形成单个范围向量。范围查询允许传入即时向量类型或标量类型表达式,但始终返回范围向量(标量或即
时向量在一定时间范围内求值的结果)。

范围查询示例:

如果我们将上面的示例表达式作为范围查询进行计算,它将如下所示(示例查询的解析步骤为 2.5 分钟):

在这里插入图片描述

请注意,每个评估步骤的行为与独立即时查询完全相同,并且每个独立即时查询没有查询总体范围的概念。另请注意,当原始样本恰好仍然是这两个步骤的最新样本(且不早于 5 分钟)时,某些后续解析步骤最终如何选择相同的基础原始样本作为其输出样本值。

在这种情况下,最终结果将是一个范围向量,其中包含一定时间范围内两个选定序列的样本,但也包含某些时间步长的序列数据中的间隙。

prometheuscounter_56">2、prometheus处理counter跳变

场景:

某个counter值对应的exporter重启了,导致counter重新计数,但是我们不希望因此在计算速率的时候出现负速率等异常结果

解决方法:发现并处理counter跳变

以下示例图显示了rate()计算如何处理在提供的窗口下发生的计数器重置。您可以将其想象为rate()从底层“真实”样本创建一组“虚拟”样本。然后根据虚拟样本计算最终速率,就好像从未发生过重置一样:
在这里插入图片描述

实际解决原理:

尽管counter一般只会叠加,但是当追踪它们的过程重置时,它们也会重置为0 。为了不把这些重置解释成实际的负rate,和counter相关的函数具有检测和处理这些重置的逻辑:如当在提供的时间窗口下迭代样本时,函数会检查是否有任何样本的值比前一个低,并将这种情况解释为counter重置。Counter在重置后总是从0开始,那么根据这个假设,这些函数只是将新的采样值加到之前看到的采样值上,以补偿重置。

counter重置处理并非万能和无损的:

注意:当counter重置时,数据有可能在Prometheus最后一次拉取之后,重置之前增加。这些增量会被Prometheus永远丢失,且无法找回。为了尽量减少这种影响,重置应该只在一段时间内发生一次,而且要比Prometheus拉取目标数据的频率低。


http://www.niftyadmin.cn/n/467612.html

相关文章

一键轻松造数据:通过Postman实现表单提交

一、原始需求的诞生 在测试的过程中,需要大量的表单。于是我选择了通过postman发送表单提交的接口来造数据。 如上图所示,表单提交接口所需的参数以及请求体中需模拟的IP地址。参数为 {{}} 的表示需要不同的实参,至于原因就不在这里赘述了。如…

C++—堆和栈的区别

一、堆和栈的区别 1、申请方式不同。 栈由系统自动分配。 堆是自己申请和释放的。 2、申请大小限制不同。 栈顶和栈底是之前预设好的,栈是向栈底扩展,大小固定,可以通过ulimit -a查看,由ulimit -s修改。 堆向高地址扩展&#xff…

关于spring mvc 的ViewResolver的问题

今天在一个项目使用springboot的spring mvc的时候遇到了一个问题:在controller中使用返回字符串redirect:/xxxx/xxx进行重定向失败,出现了无法解析redirect:/xxxx/xxx。 找了半天才发现视图解析器ViewResolver中没有添加InternalResourceViewResolver 项…

python基础学习9【MinMaxScale()、StandScale()、DecimalScale、transformer】

标准化数据【离差标准化数据、标准差标准化数据、小数定标标准化数据】 离差标准化数据: 数据的整体分布情况并不会随离差标准化而发生改变,原先取值较大的数据,在做完离差标准化后的值依旧较大; 对原始数据的一种线性变换&…

【系统架构】第五章-软件工程基础知识(软件测试、净室软件工程、基于构件的软件工程、 软件项目管理)

软考-系统架构设计师知识点提炼-系统架构设计师教程(第2版) 软件测试 一、测试方法 以测试过程中程序执行状态为依据可分为静态测试(ST)和动态测试(DT) 以具体实现算法细节和系统内部结构的相关情况为根据…

【Linux | Shell】bash shell 基础命令

目录 一、概述二、启动shell2.1 用户的默认 Shell 程序2.2 Shell 提示符 三、 基础命令3.1、man 命令3.2、cd 命令3.3、ls命令 一、概述 很多 Linux 发行版的默认 shell 是 GNU bash shell。本文将介绍 bash shell 的基本特性,比如 bash 手册、命令行补全以及如何显…

基于Springboot+vue+协同过滤+前后端分离+电子产品推荐系统(用户,多商户,管理员)+全套视频教程

基于Springbootvue协同过滤前后端分离电子产品推荐系统(用户,多商户,管理员)(毕业论文11000字以上,共33页,程序代码,MySQL数据库) 代码下载 链接:https://pan.baidu.com/s/1ckCKm4zKT0m4RqfHULYyOg 提取码:8888 【运行环境】Idea JDK1.8 Maven MySQL …

炫酷而高效:掌握Tailwind CSS框架,打造个性化网页界面

探索Tailwind CSS框架:打造现代化、高度定制化的网页界面 本文采用Markdown语法,结合代码,详细介绍Tailwind CSS框架的特点、使用方法和实际应用。让我带你一起探索这个令人兴奋的前端工具吧! 简介 Tailwind CSS是一个实用的CSS框…