prometheus描点原理

news2024/11/26 16:22:28

大家好,我是蓝胖子,关于prometheus的入门教程有很多,拿我之前学prometheus的经历来讲,看了很多教程,还是会对prometheus的描点以及背后的统计原理感到迷惑,所以今天我们就来分析下这部分,来揭开其神秘的面纱。

我们先来看看prometheus里的数据模型是怎么样的,只有知道了数据结构,才能理解对后续这些数据如何描点,如何计算出相应指标值。

数据模型

prometheus中存的是时序数据,时序数据有个特点是每条数据都有一个时间戳,并且时序数据都有一个metric_name(指标名),和一系列的label,以及当前指标的值value。当用prometheus web控制台查询出来的就是一条条时序数据,如下图所示:

image.png

时序数据描述一个指标的表达式可以归纳为:

metric_name{label_name1=label_val1,label_name2=label_val2,....}  

表达式开头是指标名,{}里的就是指标的标签。

在prometheus中,如果指标名和标签完全相同,那么将会认为他们是同一个指标,将一个指标不同时间戳的时序数据称为指标的样本。

这里要特别明确一点,用过prometheus 客户端的同学都知道prometheus有四大指标类型Counter,Guage,Histogram,Summary,但无论是哪种指标类型在prometheus服务端这边都是按照上述的指标格式进行存储的,prometheus server在存储时并不会去存特定某个指标是什么指标类型。

理解了prometheus server存储数据的类型,我们再来看看对prometheus server 进行查询时的数据返回类型。

prometheus server提供了两个api对外提供查询,分别是queryquery_range ,在prometheus中 用vector 类型表示单个时间点的指标数据,用matrix 表示一组时间点的指标数据。所以query_range api只能返回matrix 类型的数据。我们用prometheus web控制台演示下。

首先来看下在table列进行查询时涉及的查询,在table列进行查询会调用到query 的api,其返回结果既可以是matrix 类型,也可以是vector 类型。

image.png

如上图所示,查询返回的是vector类型的数据 , 我们在table这一栏输入PromQl查询语句,默认是查出当前时间最新的指标,可以看到返回的result是一个数组,因为匹配查询语句的不止一个指标,接着返回了指标的时间戳以及对应的值val。

在table这一列除了查询某个指标的瞬时值,还可以查某段时间内的值,对应的prometheus server api的返回类型就将是matrix类型了 ,如下图所示,我们可以修改PromQl语句让其查1m内的数据:

image.png

如上图所示,将查询语句改为go_memstats_other_sys_bytes{}[1m] 后返回的就是matrix类型的数据了,它表示一组时间点的数据。

其实看到这里,你应该能想到,prometheus绘图就是根据matrix类型的数据进行描点绘图的

描点原理

紧接着,我们就来看下prometheus的描点绘图原理。

首先要明确一点,绘图的原理本质上就是在一个个时间片段里进行描点,然后再将各个点连起来就形成了随时间变化的监控图Graph。所以在描点绘图时,用到的数据查询结果仅仅只能是matrix类型,因为只有它才能表示一个指标一组时间点的样本值。

我们再回顾下matrix数据格式是怎样的,

image.png
matrix数据格式的返回,每个指标都会携带一组时间点的样本,到时候描点时就是根据这些样本点的时间点为横坐标,样本的值为纵坐标进行绘图的。

接着,我们来看下绘图用到的查询数据api, 和在table栏进行查询不同,在绘图界面查询数据用到的api是query_range ,query_range返回的数据格式是matrix 类型的数据

image.png

注意下query_range的参数,已经和query不同了,因为query毕竟只查基于某个时间点的数据,而query_range是查某段时间的数据,所以query_range有个开始时间start和结束时间end,除此以外,它还有个参数step,这个参数是表示将start和end之间的时间段按step步长分割为更小的时间段,然后在每个小的时间段内将会产生一个描点 。最后就是将指标的描点全部连接起来就是一个曲线了。

描点是如何计算出来的

知道了在每个小的时间段内,prometheus会产生一个描点,我们还需要知道描点究竟是如何计算出来的。

拿截图的表达式rate(go_memstats_other_sys_bytes[1m]) 举例,假设时间区间[start,end]被step分成了3小段。

image.png

如上图,其中每段的开始时间戳分别是A1,A2,A3,按step进行累加,这3个小的时间段将会产生3个描点,每个描点计算规则如下:

val=rate函数(当前时间段与当前时间段减去1m这段时间内的所有样本)

每个描点,都会执行一次rate函数得到描点的value值,描点的时间戳则是每个小的时间段开始的时间,而计算的样本则是 每个小的时间段开始时间到 之前的1m的时间范围内筛选出来的。

histogram_quantile 表达式如何描点的?

上面的描点例子比较简单,我们来看一个复杂点的,这个也是Histogram 指标类型统计的原理。

如下,我们通常会用到histogram_quantile去计算服务接口时间的耗时情况。

histogram_quantile(0.99,rate(server_handle_seconds_bucket{}[1m]))

它描点的逻辑依然逃不开 将一个大的时间段分为小的时间段,并且每个小的时间段产生描点。也就是说,每个小的时间段也都会执行一次histogram_quantile 函数得到描点值,但histogram_quantile的样本值从哪里得来呢?

是在小的时间段内通过rate函数计算得到的,rate函数的样本来源也和刚才讲的一样,是当前时间段与当前时间段减去1m这段时间内的所有样本。

思考题

这样的确得到了3个描点,能绘制出曲线来,但最开始我在看到这个表达式还是很疑惑的,因为它将之前的每个直方图的指标都进行了rate计算,这样在用histogram_quantile计算最终分位数的时候不会导致结果变化吗?这就涉及到了histogram_quantile计算分为数的逻辑,有空我会在下篇文章继续分析。

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

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

相关文章

AIGC - Stable Diffusion 的 墨幽人造人 模型与 Tag 配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131565068 Stable Diffusion的模型网站 LiblibAI:https://www.liblibai.com 墨幽人造人网址:https://www.liblibai.com/m…

BUU [vnctf2023]电子木鱼

BUU [vnctf2023]电子木鱼 先看看题目,点不了。 看看源码。Rust整数溢出。 在 Rust 中,整数类型默认是有符号整数类型,意味着这些整数类型可以表示正数和负数。对于有符号整数类型,最高位用来表示符号,0 表示正数&…

如何在Microsoft Excel中快速创建等比序列

Excel 中的填充句柄允许你通过拖动句柄自动填充行或列中的数据列表(数字或文本)。这可以在大型工作表中输入顺序数据时节省大量时间,并提高工作效率。 如果数据遵循某个模式或基于其他单元格中的数据,则可以使用“自动填充”功能…

TiDB(7):技术内幕之存储

1 引言 数据库、操作系统和编译器并称为三大系统,可以说是整个计算机软件的基石。其中数据库更靠近应用层,是很多业务的支撑。这一领域经过了几十年的发展,不断的有新的进展。 很多人用过数据库,但是很少有人实现过一个数据库&a…

基于FreeRTOS的嵌入式设备管理关键技术研究及实现(学习三)

设备节点功能模块设计 在本文节点功能设计中,拥有用于检测温度的温度传感器、监测湿度的湿度传感器以及 调节空调温度的IR红外发射器,另留有部分外接扩展串口,因此可能会在实际使用中扩展更多的设备模块与功能。 可见,如何高效地…

2023年03月份青少年软件编程Python等级考试试卷三级真题(含答案)

2023-03 Python三级真题 分数:100 题数:38 测试时长:60min 一、单选题(共25题,共50分) 1.十进制数111转换成二进制数是?( )(2分) A.111 B.1111011 C.101111 D…

青岛大学_王卓老师【数据结构与算法】Week04_10_线性表的应用3_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–…

Spring Boot中的度量指标及使用方法

Spring Boot中的度量指标及使用方法 简介 Spring Boot是目前流行的Java后端框架之一,它提供了许多有用的功能,其中包括度量指标。度量指标可以帮助我们监测应用程序的性能、稳定性和可靠性,以便及时发现并解决问题。本文将介绍Spring Boot中…

使用Jetpack Compose集成WebView

在Android开发中,WebView是一个非常重要的组件,它可以用来显示网页或加载在线内容。然而,在Jetpack Compose(Google推出的新的UI工具包)中,目前没有内置的WebView Composable。但不必担心,你可以…

【数据算法与结构】栈和队列课后习题

题目(共两道) 题目1 Qestion: 根据下面代码片段写出运行下列程序段的输出结果(元素类型为char) 题目代码片段 void main() {Stack S; char x,y; InitStack(S); // 初始化栈x ‘e ‘; y ‘c’; Push(S, ‘h‘); Push(S, ‘r‘); Push(S,y);Pop(S,x);…

了解Java可见性的本质

作者:早恒 前一段时间重温了伪共享(false sharing)问题,了解到深处有几个问题一直想不明白,加上开发过程中遇到volatile时总觉得理解不够透彻,借着这次脑子里这几个问题,探究下Java可见性的本质…

【C语言】深入学习函数(万字)

👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你…

文件上传+文件包含组合式getshell

实验目的 通过本实验,了解文件包含的特点,掌握图片马的执行方法,文件上传文件包含组合式getshell。 实验环境 操作机:kali 靶机:Windows 2007 用户名/密码:college/360College 实验地址:http…

jenkins部署springboot项目

jenkins部署springboot项目 1、创建一个项目 上传到gitee 1、创建项目 2、上传到git 2、jenkins创建一个pipeline项目 Pipeline简介 1)概念 Pipeline,简单来说,一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者…

优化chatGPT提示词的Prompts

你扮演一个专业的chatGPT提示词工程师,我将为您提供我的提示词,它用三个反引号分隔,请根据openai发布的提示词标准和优化技巧,改进和优化我的提示词,让chatGPT能够更好的理解。 我的第一个提示词是:“”“……

【UI设计】新拟态风格

新拟态风格 1.有且只有一个光源照射 那作者在追波上按钮也好还是卡片处理也好,仔细观察不难发现,它定了一个光源,是从左上向右下照射的,所以,越靠近光源的部分,越亮,远离光源的越暗(…

卡尔曼滤波实例分析(一)

1 现实问题 假设一个物体位于1000米处以自由落体运动,地面有一台具有特殊功能的雷达,对其进行观察,现需要对其下落的高度进行测量; (1)建模 速度:V gt 位置:Y -Vt Y0 &#xff0…

react笔记_06类组件

目录 复习展开运算符 组件什么叫做组件?分类类组件es6新增构造函数语法类组件渲染类组件的this指向类组件的三大属性state作用语法-初始化数据语法-修改state数据语法-获取state中的数据案例 propspropTypes属性(prop-types库)defaultProps属性 refs[1] 字符串形式的…

基于UFLD-v2的改进:UFLD-v2-plus

1 待解决问题 UFLD-v2是一个非常优秀的车道线检测模型。也有一些问题。 1 参数量太大,一个模型600M。 2 不能区分车道线。 2 工作内容 改进方法如下 2.1 降低参数量 对模型网络逐层参数量,可以发现,86%(很久之前分析的&…

基于STM32+华为云IOT设计的智能浇花系统

一、前言 随着社会的不断发展和人们生活水平的逐渐提高,人们逐渐追求高质量的生活,很多人都会选择在家里或办公室种植一些花卉以净化家庭空气,陶冶情操,但是很多人忙于工作、学习、出差、旅游或者一些其他的原因,不能及时地对花卉进行照料,短时间内导致很多花卉因缺水分…