【博客555】prometheus的step,durations,rate interval,scrape interval对数据查询结果的影响

news2024/9/22 7:23:29

prometheus的step,durations,rate interval,scrape interval对数据查询结果的影响

1、场景:在查询prometheus数据时出现很多诡异的现象

1、为什么同样的查询语句在不同的时间点查询,对过去某一时刻的数据展示却不一样

2、为什么有时候峰值在使用不同step,不同duration查询时,会不一样,甚至消失

3、为什么scrape interval变化了,会使某些规则的结果不准确

等等疑问

2、原理剖析:rate与irate,step,datapoint,scape_internal,instant vector selector,range vector selector

2-1、rate与irate的查询原理见之前博文:【博客486】prometheus-----rate,irate,increase的原理

2-2、step and datapoint and scape_internal:

data point:prometheus按照scrape_interval频率对metrics url进行抓取的原始数据
step:进行范围查询的时候,计算的步长是step这么长
scape_internal:prometheus按照scrape_interval频率对metrics url进行抓取

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2-3、Instant vector selector与Range vector selector:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、一条数据的查询结果受哪几个因素影响

3-1、影响因素:

1、scrape_interval

2、step

3、rate duration

4、query duration

3-2、rate查询语句格式:

rate(metrics_name[interval])

3-3、每个因素发挥的作用:

举例:查询最近3天x指标的增长速率:
curl ‘http://localhost:9090/api/v1/query_range?query=rate(x[10s])&start=2022-12-07T20:00:00.781Z&end=2022-12-10T20:00:00.781Z&step=30s’

1、scrape_interval:data point采样频率,决定了每个step计算值的时候,附近是哪些data point或者有没有data point

2、step:采样的步长,就是查最近3天的数据,对每step时长就计算一个速率值

3、rate duration:计算一个速率的值的时候的选择区间

4、query duration:查询的区间,就是最近3天

4、常见现象剖析

4-1、进行rate查询时,结果不同,甚至有时候严重失真

可能的错误结果1:展示时遗漏部分data point数据带来的错失部分峰值信息:

假设查询: rate(x[5s]),step为10s,查询过去一天的数据

结果分析: 那么rate在计算的时候会丢失一半的数据,两个分段之间的data point有一半没有被纳入计算。假设查询最近10s,然后rate每5s算一个点,但你每10s才收一个点来展示,展示漏了部分点,可能导致部分峰值信息被遗漏。

建议: 因此在使用rate()时,range duration得大于等于step。

可能的错误结果2:重复计算data point数据带来的部分假峰值信息:

假设查询: rate(x[5s]),scrape_interval为10s,step为5s,查询过去一天的数据

结果分析: 那么rate在计算的时候会重复计算一些数据,因为你step也是5s,那么rate每5s算一个点,且按照step来展示结果,但是你采集的时候10s才采集一个data point,那么其实多个step可能计算的时候取的是同一个data point。比如:采集点0s和10s,你按照step的5s来采集结果,那你在0s和5s时两个点都取了0s的结果,因为下一个data point在10s才有,可能导致部分峰值信息被遗漏。

建议: 因此在使用rate()时,range duration得大于等于scrape_interval和step。

4-2、同样的step,rate语句,time duration区间,但是对于历史时间点的结果有些变化或者消失了

假设查询: rate(x[5s]),scrape_interval为3s,step为5s,查询过去6小时的数据

重复执行多次,得到不同结果:查询今天0点到6点,和今天1点到7点这两段的数据,都包含了今天3点的数据结果,但是两次区间对今天3点附近的展示结果却不一样,可能按照0点到6点查询,3点的时候有峰值,按照1点到7点查询,则峰值不见卢,为什么对历史数据查询会不一样呢,历史数据不是既定事实了吗?

结果分析:因为你用不同的查询区间,那么step最近切出来start和end不一定一样,当时data point选择也不一样的。比如:

有data point:p1 p2 p3 p4 p5 p6
对应的值分别为:0,1000,0,1000,0

如果计算速率的时候,你start和end不定,查询区间如果起始是p1,数据点值选了0的几个,结果是:0
0,1000,0,1000,0
|----------|------------|
查询区间如果起始是p2,那么结果可能是选了两个1000的,(1000 + 1000)/2,结果:1000
0,1000,0,1000,0
-------|-----------|------------|

此时就会出现有的历史峰值存在,有的历史峰值不存在

建议:当你固定好时间区间的start和end,那么每次查询都是一样的

5、每个step如何取data point以及promql.LookbackDelta

  • 在每一个时刻点上,使用该时刻点上(如果存在)的采样值

  • 如果那个时间点上没有data point,则回溯到过去,使用最先遇到第一个采样值。

  • 多个step可能回溯到相同的data point,比如:两个采样就能够跨好几个step(step很小的时候)。此时,就得到很多相同的采样值。

  • step向过去回溯时,最多回溯5min(promql.LookbackDelta = 5 * time.Minute),超过这个时长就不返回采样值啦。

6、step对谁起作用

答案:只对range query起作用。

  • 查询instant query时,无需step。instant query求值时就使用一个时刻点。当前时刻点或自定义的时刻点(通过API查询时)。

  • 查询range query时,step是有用的。先定出时刻点,然后,对于每一个时刻点,向过去回溯,使用最先遇到第一个采样值。

7、大跨度的时间查询如何保证峰值不丢失

解决方法:
当你进行大跨度的时间查询,比如:查询最近15天的cpu使用率,此时prometheus默认会以比较大的step去查询,那么就有部分峰值信息被遗漏了,此时可以通过手动指定较小的step进行查询,以避免遗漏部分峰值信息

注意点:

较小的step也就意味着较多的结果返回,如何进行处理,和对prometheus较大的查询压力,都是要考虑进去的

最佳实践

当查询一个信息的时候,要综合step,scape_internal,instant vector selector还是range vector selector,time duration,rate duration等因素进行综合考虑。切不可直接摘抄网上的查询语句进行查询,因为不同的业务场景下,区间和采集频率都不同

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络拓扑配置案例练习(VRRP,浮动路由,DCHP,三层交换机配置)

网络拓扑配置案例网络拓扑配置案例练习网络拓扑需求描述具体操作命令交换机创建vlan,配置access、trunk口,划分vlanvrrp配置路由配置验证vrrp和浮动路由DHCP配置总结网络拓扑配置案例练习 在这篇文章中将记录网络的常见配置:VRRP&#xff0c…

vue-cli和vue有什么区别

目录 1、什么是 Vue? 2、什么是vue-cli? 3、区别和关联 👉 区别 👉 关联 🍀 扩展知识 “vue-cli”和vue的区别:vue是“vue.js”的简称,是一个成熟的用于构建用户界面的JavaScript渐进式框…

「Docker学习系列教程」9-Docker容器数据卷介绍

通过前面8篇文章的学习,我们已经学会了docker的安装、docker常用的命令已经docker镜像修改后提交的远程镜像仓库及提交到公司的私服仓库中。接下来,我们再来学学Docker另外一个重要的东西-容器数据卷。 我们先来看看一个场景:我们有多个dock…

18. 权重衰退的代码的从零实现和简洁实现

通过一个简单的例子来演示权重衰减。 %matplotlib inline import torch from torch import nn from d2l import torch as d2l0.01就是权重,xi是随机的输入,噪音是均值为0,方差为0.01的一个正态分布 n_train,n_test,num_inputs,batch_size 2…

Alibaba 官方微服务扛把子「SpringCloudAlibaba 全彩学习手册.PDF」,开源学习ing,

最近我在知乎上看过的一个热门回答: 初级 Java 开发面临的最大瓶颈在于,脱离不出自身业务带来的局限。日常工作中大部分时间在增删改查、写写接口、改改 bug,久而久之就会发现,自己的技术水平跟刚工作时相比没什么进步。 所以我们…

Spring Batch 批处理入门案例

引言 书接上篇 何为Spring Batch?怎么玩? ,前面普及了一下Spring Batch 相关介绍,本篇来一个helloword,简单试一下Spring Batch 怎么玩 批量处理流程 开始前,先了解一下Spring Batch程序运行大纲&#x…

[附源码]计算机毕业设计惠农微信小程序论文Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

这些不知道,别说你熟悉 Spring

写在前面 我们大多数 Java 程序员的日常工作基本都是在做业务开发,俗称 crudboy。 作为 crudboy 的你有没有这些烦恼呢? 随着业务的迭代,新功能的加入,代码变得越来越臃肿,可维护性越来越低,慢慢变成了屎…

【亲测有用】ERR_PROXY_CONNECTION_FAILED的解决方案(电脑明明有网络,但就是无法访问浏览器的网页!)

一、问题描述 就我而言,每次遇到这种问题,都是因为电脑意外关机导致的。昨天,我忘记给电脑充电,结果一觉醒来,发现电脑明明有网络,因为微信、QQ甚至向日葵远程连接别的电脑都没有问题,但就是所…

基于java+springboot+mybatis+vue+mysql的漫画动漫管理网站

项目介绍 本系统主要包括管理员和用户两个角色组成,主要包括以下功能: (1)前台:首页、漫画资源、排行榜、交流论坛、公告信息、个人中心、后台管理 。 (2)管理员:首页、个人中心、…

算法基础篇-06-排序-NB三人组(快速/堆/归并排序)

1. NB 三人组介绍 1.1 快速排序(Quick Sort) 时间复杂度:O(nlogn) 归位: 让元素去它该去的位置,保证左边的元素都比他小,右边都比他大; 1.1.1 原理图示: 假设初始列表: 我们从左边第一个…

三秒钟,我要拿到世界杯所有队伍阵容信息

文章目录🕐Im coming~🕑我写了个啥?🕔咋写的?🕘代码供上🕛 See you next time专栏Python零基础入门篇🔥Python网络蜘蛛🔥Python数据分析Django基础入门宝典🔥…

硬核,阿里自爆虐心万字面试手册,Github上获赞89.7K

开篇小叙 现在Java面试可以说是老生常谈的一个问题了,确实也是这么回事。面试题、面试宝典、面试手册......各种Java面试题一搜一大把,根本看不完,也看不过来,而且每份面试资料也都觉得Nice,然后就开启了收藏之路。 …

CSS - 02. CSS进阶

文章目录CSS进阶1 Emmet语法1.1 快速生成HTML结构语法1.2 快速生成CSS样式语法1.3 快速格式化代码2 CSS的复合选择器2.1 什么是复合选择器2.2 后代选择器2.3 子选择器2.4 并集选择器2.5 伪类选择器2.6 链接伪类选择器2.7 :focus 伪类选择器2.8 复合选择器总结3 CSS 的元素显示模…

Pr:导出设置之多路复用器与常规

多路复用器 MULTIPLEXERH.264、HEVC(H.265)和 MPEG 等格式中包含多路复用器 MULTIPLEXER模块,可用于控制如何将视频和音频数据合并到单个流中(又称“混合”)。基本设置Basic Settings多路复用器Multiplexer视频和音频流…

SolidWorks综合教程

SolidWorks综合教程 SolidWorks 认证工程师 (CSWA​​) 考试的完美指南,包含实例、测验和实践培训 课程英文名:SOLIDWORKS Academy A Comprehensive Course on SolidWorks 此视频教程共11.0小时,中英双语字幕,画质清晰无水印&a…

Android编译优化~Gradle构建基准测试

背景 之前对安卓打包编译优化有所实践,但当时对优化提升结果采取了手动测试的办法才拿到结果,而且遇到大型工程更是痛不欲生。不过当时采取的策略是将增量测试代码提到了Git,编译一次抄一次代码,样本数据只重复了10次&#xff0c…

【实时数仓】业务数据采集之Maxwell的介绍、底层原理、安装及初始化、监控功能、采集服务和MySQL的binlog

文章目录一 业务数据采集0 业务数据采集思路1 Maxwell 介绍2 Maxwell工作原理(1) MySQL主从复制过程(2)Maxwell的工作原理3 MySQL的binlog(1)什么是binlog(2)binlog的开启&#xff0…

算法基础篇-07-排序-希尔排序(Shell Sort)

1. 希尔排序简介 希尔排序(Shell Sort) 是一种分组插入排序算法,是基于插入排序算法演进而来;首先取一个整数d1n/2, 将元素分为d1个组,每组相邻元素之间距离d1,在各组内进行直接插入排序;取第二个整数d2d1/2,重复上述分组排序过程…

微信小程序框架(二)-全面详解(学习总结---从入门到深化)

目录 组件_基础视图 容器 view 文本 text 图片 image 组件_滑块视图容器 基本实现 Swiper常用属性说明 组件_滚动视图区域 水平滚动 垂直滚动 常用属性 组件_icon 图标使用 字体图标属性 组件_progress 基本进度条 属性说明 组件_表单 登录页面 组件_button 按钮属…