PromQL 使用基础|学习笔记(三)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 快速学习 PromQL 使用基础

开发者学堂课程3天吃透 PrometheusPromQL 使用基础学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1244/detail/18447


PromQL 使用基础

5.匹配器

匹配器怎么使用?对于Prometheus的匹配器来说,我们需要做标签过滤时,你使用标签名 label name,后面使用一个操作符 operator 跟上一个值 value 来进行评判。这里的中间 operator 意思是对标签来讲叫 label name,我希望它的值要满足什么条件,所以操作符指的就是叫做匹配或者称之为叫做比较表达式构建中的一个常用的字符串比较操作符,或者叫字符串过滤操作符。因为这里我们要过滤的是你的标签对应的标签值。匹配什么,第一等值比较,第二取不等之比较不等于则为真,等于则为假。表示模式匹配,比较匹配则为真,不匹配则为假模式不匹配,比较匹配则为假,不匹配则为真这样 4 种 比较操作符,或者叫做模式匹配符。

要注意的是,匹配到空标签值的匹配器的时候,比如这样写,则该指标名称上所有未使用标签的时间序列也符合条件,所以标签值不能为空意思就是标签逻辑不支持匹配空值,一旦匹配空值,意思就是标签这个标签意思就意味着有没有都行它不是用来匹配空值。等于空值,意味标签有没有都行,而不是标签值是空的大家要注意这一点这是 promQL比较诡异的一点所以我们也一样。我们其实并没有一个底下的所有标签,里边也是一样,没有一个叫因为的标签,所以写 ENV =空,ENV =空意味没写,等于什么也没写。因为我们压根就没有因为标签这些,实际所有实验学的都没有。而有因为标签的,写不写的结果是一样的所以我们说一定要记得他没法挑选空值的标签。接着,正则表达式将执行完全锚定机制,意思是你给定智能表达式模式,一定要能匹配标签的所有值,整个字串只匹配部分是不算,它要匹配指定的标签的整个值。

举个例子,比如现在有个标签叫做job= node _exporter,写个表达式,这样写job 匹配node。请问假如有个时序,时间序列叫 Prom

http,它有这么个标签,请问符不符合条件?我的表达式是Prom_http{job=~“node”},这是上面原来的时间序列的标示这是我写的表达式,请问上面序列符不符合?底下表达式是不符合的。

node 虽然能匹配到字串,但要记住它的匹配逻辑是叫完全锚定,只有能够你的模式,只有能匹配到整个标签的值才认为是匹配的。所以这应该要写成比如Prom_http{job=~“node.*”},就意味能匹配它,要把整个值全匹配,要完全锚定的意思,所以它是假设是做整个字串前后完整锚定的所以你要写的模式一定要打算匹配哪一种,特征是要一定要写完整。

接着向量选择器至少要包含一个指标名,或者至少有一个不会匹配到空字串的匹配器其实可以有3种组合,仅给名称,如果不给名,就要给匹配器,而你的匹配器匹配是空的。到底是什么条件?就是没条件,所以要么能匹配出来一个指标名,要么能匹配出有一个既定的返回的是非空值的匹配器,否则的话就相当于挑整个数据集。prometheus 不允许这样的操作,所以至少要包含一个指标名,或者有一个不会匹到空值,所以{job=””}就是非法的,因为它既没有名称,又匹配的是空值,这就不行。另外我们也可以使用它做标签名,在里边这样写来过滤指标名,刚才给大家说过。

匹配器有这样的概念,我们就容易的使用起,或者在使用上就可以有一些进阶。比如我想知道node,至少有一些特定的可以给他们取出。比如我想知道 node CPU 相关的指标写 node CPU接着 second total,这就可以查出结果,既然是 total ,我们说过都应该是计数器对计数器而言,直接展示出没作用。我们通常要对它做速率运算。我们不说那么复杂,要知道的是第一我们期望找到所有以 node cpu 开头的那些序列怎么办?刚才给大家说过,应该使用划括号下划线 name 对它的值做匹配吗?匹配叫 node的CPU,你只写这么多是不行的,我们要做完全锚定,跟上.*,这样来进行检查和匹配,看这里都是 node的CPU开头的指标。

image.png

因为那么多节点,这样挑选其实是一个不明确的做法,应该有多少时间系列返回出。但是要知道,这是对名称做过滤的。

我希望对名称做过滤以后再找其他的限定。比如我们希望看用户空间的时间消耗。要 model=user, model =nice是 model =idle

大家知道 idle 表示什么?这里有空吗?有 Idol 吗?好像没有就使用户空间的,所以加第二个条件, mode=user,做等值匹配,{__name__=~”node_cpu.*”,”mode=user”},这样它就挑选出这样的几个时序,有 mode 标签,而且它只是 user 的,比刚才少。

image.png

如果是 user 也行,是nice 或者 system 也可以,需要添加SYS,这里称为模式匹配,叫做 user 或sys,有user,没有sys, user 或 sys开头的或者 nice nice 应该是有,要查看 user , nice 的也都出现,所以用逗号隔开。这样实际上是两个域条件,这样我们可以写复杂的表达式。

再次重复,中间后面加个时间范围,这叫范围选择,或者叫范围向的选择器,但不能绘图,绘图会出错。

6. 范围向量选择器

范围向量选择器怎么用?有哪些要点我们需要注意,同级时向量选择器的唯一不同之处在于范围向量选择器需要在表达后紧跟一个方括号来表达,需要表达需在时间序列上返回的样本所处的时间范围。而这个时间范围指是以当前时间点为基准,时间点逆向过去的时间长度。比如 5 分钟,时间格式就是一个整数,必须使用整数,后跟一个时间单位。比如5m 的 m 就是单位它支持使用单位毫秒、秒分钟、小时、天、周和年,没有月,注意它没有月的表达方式好,它对我们来讲,它一共保存的数据没有使用远程存储的时候可能不会太长。所以我们多数情况应该用的都是小时或者天,甚至是周的时间范围。但是要注意的是,我们必须使用整数时间,一定要记住,所以你不能使用 1. 5 小时,这是不对的。但你可以使用 1 小时 30 分。

这不同单位级别进行组合,而且单位需要从大到小才行注意可以将多个不同级别的单位进行串联组合,以时间单位大小由大到小进行排序,比如 1 小时 30 分。千万要记得不能使用小数需要注意的是向量选择器范围,那是一定时间范围内的数据样本虽然不同时间序列上的数据抓取的时间点我们说过,但它时间戳不会严格对齐的原因我此前说过是 prometheus在趋势上是准确的,但并非是绝对精准的。因为时间点是被分散开的。这叫范围向量选择器。比如这已经使用了 1 小时,过去 1 小时内的时间样本。这样本数量反馈的可能会比较多,而且不能绘图,所以只 execute。 看到,这是对第一个时间序列来讲,它防着一个小时的时间样本因为它每 15 秒采集一次,所以这数据量会非常大。缩短一点,比如 1 分钟,一分钟每一个就只有 4 个样本。因为每 15 秒采样一次,正符合我们所推测的样本。刚才有讲过,范围向量选择器绝大多数都是跟 rate 函数或者 irate 函数一起使用的,用来我们计算特定时间范围内的平均值来表达速率的概念。一般来讲,把它们取出求平均值就行。如果是计数器,我们应该一起来进行计算。但如果是非计数器性值,你使用 AVG 也行,这叫求平均值。不过这里告诉我们有些地方是有问题的,因为这是一个向量,我们这里要使用rate, ready blue。我们要查看指标,叫做返回值类型,才能知道该怎么计算。可能这几个指标类型完全不一样,有适用于第一个不适用第二种,有适用第二种,不适用第一种,可能是这个意思,因为他反对指标数量过多。我们还是按照一个特定的,比如 GAG 类型,可以直接求平均值,而 counter 类型的,还记得我们的指标类型吗? counter 计数器我们要计算速率, Gage 我们可以计算平均值。一般而言,这是聚合,另外还有两个直方图,还有 summary 摘要。如果两个指标返回的数据类型不一样,使用同一个函数就会出错。像刚才我们应该出现这种问题,我们可以给它归类到同一个指标上。比如node,CPU,guest, second total,可以是固定的防疫特定的值。这些应该都是 counter 类型的数据。如果是counter,我们就可以做 rate 计算来求得一段时间范围内的变化速率,当然我们 CPU 利用率很低,所以你看它的采样值都是0,它做圆整,加起来不到1,因为节点都很空闲。

image.png

7. 偏移量修改器

偏移量修改器什么意思?刚才指标,或者以prometheus为例。 大家看到这每一个指标返回的都是什么值?我刚才解释过,这叫及时向量,也就是时下这一刻最近一次的采样的样本。如果我想知道 5 分钟之前那个样本怎么办?我这里加5M 意味着什么?这是 5 分钟之内的采用样本,所有样本。

image.png

我需要找 5 分钟之前那个样本,这需要偏移,我们需要这样写,仍然即时向量。我们使用 offsite,后面指定 5 分钟,表示往前推, 5 分钟之前及时向量,这叫偏移,是上次的采样本看是否存在,这就不是最新的样本。 25 分钟之前的,这就偏移量。同样的逻辑,如果我们需要在这里指定一个时间范围,又指定 5 分钟,比如在这里指定1 小时 5 分钟,这是一个什么?表示 5 分钟之前开始计算,再往后回逆一个小时,表示不是以时下这个时间点往后逆一个小时而以5 分钟之前那个时间点,我可以再往前逆一个小时,所以叫偏移量,这就是偏移的结果,它依然是一个范围。向量没出错,但它是被偏移,画图应该能理解,在 MySQL 上或者其他的数据服务上应该学过类似的概念。

正常情况下,我们查询时,及时指的时下这一刻的时间。当然我们时下这一刻可能没有样本,但他一定寻找最近这一次样本,这叫及时或叫瞬时。如果我们要想找过去某个特定时间点的,就表示我们要使用 offset 偏移到过去,这叫偏移的一个范围。找过去时间如果是范围向量,以时下时间,比如这是当前这一刻,找最近以它为起点,往前偏 5 分钟,这是我们过去一直用的时间点返回的范围向量。但是我们也可以只过去一个小时,往前偏 5 分钟。比如这是当前的时间,往前逆一个小时,这是一个小时之前那个时间点。从这个时间段为基准,再往前找 5 分钟,这是所谓叫偏移量为一个小时,叫 offset 一个小时。跟我刚才所举例子略不同,找的是过去 5 分钟的范围内的。刚才表达式他写的是1 小时5 分钟,我刚才画的图表解释意思叫一个小时之前,以一个小时之前的时间点为准,往前逆 5 分钟,这是 5 分钟之内的时间值,数据值。

image.png

 

四、PromQL 指标类型

Prom QL 的指标类型,刚才已经讲解过,接下来详细介绍这些指标数据各自该怎么处理以及能怎么处理?

第一, counter, 我们讲这叫计数器,单条递增,除非重置,数值一定是增长。

第二,仪表盘,已经解释过,可增可减的数据,所以我们说这种数据一般不会拿来直接展示的,没有实际作用,我们通常需要对它做特定时间范围内做 rate 或者 irate 计算。既然可曾可减,那我可以取 AV G ,取平均值,也可以在一个范围内取最大值,取最小值,计算方差,计算标准差等,这叫仪表盘。一般而言这些应该可以计算。

histogram ,直方图,把一个时间范围,把我们所期望的时间范围内的样本分成多段,每一段,当然每一段的大长度是固定的。每一段单独进行计数做什么?第一,对每一段而言,我取出它的样本个数。第二,对每一段内的样本值求和,所以我们可以对应的结果取分位数,比如中位数。

中位数和平均数有何区别?中位数也叫中间数,比如1352070,他们的平均值应该知道,差不多在 20 左右,中位数最中间数为5。比如全国人民的平均工资是20,你是不是会被平均?因为一半以上的人都为20,所以我们需要用平均值。很多时候会有概念上的偏差,会产生长尾效应,中位数可能更能代表一般情况。所以这个时候我们求中位数就是5。但是如果这个范围内的采样值非常多怎么办?我们就要分段,这一段,这个区间分成多个区间来计算。所以我们说 histogram 作为直方图,可以用于分析异常值而引起平均值过大的问题。这不就异常值吗?引起的平均值过大分位数是因为你用 135 进行平均,比如叫 50 分位数,叫 50 分位数,它其实是百分位的结果。

再看后半段的平均值,计算出它的差别应该是非常大,所以这样我们就知道前一半后一半之间的数据差别很大,而不至于整体平均,也看不出来中间。其实这些数据离散性非常高。

1.counter 和 gauge

看对它的详细说明, 先看对 counter 说明。通常 counter 的总数并没有直接作为一个的奖励概念,而需要借助于rate,topk, increase 和 irate 等函数来生成样本数据的变化状况。 rate 叫速率,既然要速率,必须要指定时间范围,刚才给大家讲因为它的速率指的是在特定时间范围内的 Delta 值。叫 Delta 的平均值。意思为从第一个样本到第二样本取一个差,从第二个样本到第三样本取一个差,第三个样本到第四个样本取个差。把这些差值拿来平均,叫 Delta 平均值。我们称为叫增速或叫变化速度,若是单调递增的就是增速,速度可能增加,也可能向下。

topk,该指标下请求总数排名前 n ,所以叫 topK,或者为排序完以后前key。比如 top K3 加这个指标,意思在这个指标下,每一个时间序列排名前三的,不能要每一个时间序列,而是所有时间序列当中值排名前三的。

irate 叫高灵敏度函数,它是一个用于计算指标的瞬时速率。它用于时间范围内的最后一个值减去前一个来计算,而不是所有值,所以叫最后两个样本进行计算。所以相对于irate函数,irate更适用于短期时间范围,只 2 个小时计算没有意义,通常计算 2 分钟内的,这是 counter 常用的几个函数。

还有 increase,increase,有点叫极差的概念。你指定一个范围内,它用最大值减去最小值,叫增长多少,所以叫increase,名称叫极差。这都是统计学当中的一些基本概念。班里面有没有同学学习统计学,如果有,可以把统计学的概念给大家解释比如什么叫极查,方差,标准差,什么叫回归。如果有,我建议各位把人自发找出来给大家解释,这对我们学监控作用很大。

后面 gauge ,用于存储机制,可增可减,所以常用于求和取平均值、最小值、最大值等聚合计算。也可以使用 PROM QL 的叫 predict the liner,叫线性回归来做预测,还可以使用 Delta 函数。我们解释这两个函数, predict the linear 函数可以预测时间,序列在v,这是序列 v ,在指定时间后的值。它通过线性回归的方式来预测样本数据的变化趋势。

比如我可以这里叫磁盘的文件系统,比如是取得某个文件系统的已用空间,或者叫空闲空间。我们对它做线性回归计算。如 5 天以后,这里 t 叫 5 天,意思就是计算文件系统的空闲空间。 5 天以后还有多少。你可以选 5 天以后小于0,或者以 5 天以后小于1。假如自己单位,要取出来看单位是多大,如果单位是 G, 就小于1,就表示 5 天以后只剩 1G ,这个时候只剩 1G 时应该报警。所以指的意思我们可以预测,但这种预测一般不准。你文件系统虽然只剩 1 个 g ,但是半年不写一个数据进去,这种报警就没有什么作用所以大家都明白,半年不写一个数据,这种线性违规分析,它可能也不会报警delta表示计算范围向量中的每个时间序列值的最后一个值,第一个值,每个时间序列的第一个值与最后一个值的差,从而展示出不同时间序列上样本值的差值,其实就是极差。delta来返回所有时间序列,因为这是个选择器,返回所有时间范围内的所有时间序列的极差。因此你看 Delta CPU temple serious cell say the cells。它意思就是指返回 CPU 的温度的,这就能取开主机上的 CPU 温度。 2H 表示什么?表示现在 CPU 温度和两个小时之间的 CPU 温度有什么区别?有多大?给它计算出。这对我们分析很重要。比如HTTP 服务器,它计算 HTTP 请求,你可以算 HTTP 请求。或者看你要是个日志文件,它可以算你的日志文件大小。日志文件现在跟 2 小时之前看看这日志文件差别有多大。日志文件增长了 2 k,再过一会增长了5K,再过一会,每两小时增长100K,再过个半月,每两个小时增加 1 个g。这说明我们访问量越来越大,通过文件的分析大小差值,我们就能得出来我的网站访问量是不是足够大,而且异常值。比如我的网站被别人做 DDoS 攻击。我们过去计算出的结果就是日志增长量,每两个小时增加平均 10K 。突然间有一会它的增加量两个小时,跟 2 时之前比较是 20 个g,能分析出来你的网站一定遭攻击。这叫delta。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
相关文章
|
Prometheus 监控 Cloud Native
Prometheus PromQL语法
Prometheus PromQL语法
435 0
|
2月前
|
监控
PromQL常见的使用场景
【10月更文挑战第14天】PromQL 的核心价值体现在时序数据的筛选与计算上。面对海量时序数据,PromQL 通过查询选择器实现高效过滤,满足特定监控图表渲染或告警规则处理的需求。
|
4月前
|
Prometheus 监控 Cloud Native
Prometheus 查询语言(PromQL):深入解析
【8月更文第29天】Prometheus 是一款开源的监控系统和时间序列数据库,广泛应用于各种系统的监控和告警。PromQL(Prometheus Query Language)是 Prometheus 用来查询和聚合时间序列数据的一种强大语言。本文将详细介绍 PromQL 的功能和语法,包括基本查询、向量操作、聚合函数等,并提供具体的代码示例。
616 2
|
4月前
|
存储 Prometheus Cloud Native
prometheus学习笔记之PromQL
prometheus学习笔记之PromQL
|
4月前
|
应用服务中间件 nginx Docker
[loki]轻量级日志聚合系统loki快速入门
[loki]轻量级日志聚合系统loki快速入门
183 5
|
4月前
|
存储 Prometheus 监控
PromQL 快速入门:理解基本查询语法
【8月更文第29天】PromQL (Prometheus Query Language) 是 Prometheus 监控系统中用于查询和聚合时间序列数据的一种表达式语言。PromQL 具有丰富的语法和功能,可以轻松地从 Prometheus 存储的数据中提取有用的信息。本文将介绍 PromQL 的基础知识,包括如何构造简单的查询语句,并通过代码示例来演示这些概念。
196 0
|
4月前
|
Prometheus Cloud Native Go
解析Prometheus PromQL
解析Prometheus PromQL
58 1
|
7月前
|
Prometheus Cloud Native
「译文」如何使用 PromQL join 来更有效地查询大规模的 Prometheus 指标
「译文」如何使用 PromQL join 来更有效地查询大规模的 Prometheus 指标
|
7月前
|
存储 Prometheus Cloud Native
「译文」Prometheus 查询语言 PromQL 简介
「译文」Prometheus 查询语言 PromQL 简介
|
SQL 数据采集 Prometheus
PromQL计算原理详解
## 背景 PromQL是Prometheus项目针对时序场景提供的一种查询语言,而PromQL的设计与常规意义上的SQL语句区别较大,其执行引擎的计算逻辑同样也大相径庭。在日常的客服解答中,发现较多客户对PromQL的执行原理有误解,故整理此篇文章对PromQL的原理与执行逻辑进行详细介绍。 ## 对时序的认识 时序场景下的观测对象是 “Metric”,例如这项表示“进程的常驻内存使用量
1476 2

热门文章

最新文章