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。

相关文章
|
应用服务中间件 nginx 数据安全/隐私保护
HAProxy的高级配置选项-配置haproxy的状态页
这篇文章详细介绍了如何配置HAProxy的状态页,包括隐藏版本信息、设置自动刷新时间、自定义访问URI、配置认证信息以及启用管理功能等,并通过实战案例展示了配置过程和效果。
476 4
HAProxy的高级配置选项-配置haproxy的状态页
|
Prometheus 监控 Cloud Native
一文带你吃透MySQL性能监控解决方案:Prometheus+Grafana
MySQL性能监控解决方案:Prometheus+Grafana问题描述 在对MySQL进行主从复制、分库分表等架构之后,MySQL的节点数量变得越来越多,无法实时监控到每一台MySQL节点,此时应当如何处理? 问题分析与解决方案 针对上面的问题,需要用Prometheus + Grafana对服务器进行统一监控、规划与报警,时刻关注服务器的响应情况。当出现宕机或异常时,Grafana可迅速通过短信、钉钉、邮件等方式通知相关人员,进而快速对生产环节进行补救。 Prometheus概述与适用场景 Prometheus 是 一 个 开 源 的 服 务 监 控 系 统 和 时 间 序 列 数 据
2034 0
|
存储 Java 关系型数据库
|
5月前
|
消息中间件 运维 监控
加一个JVM参数,让系统可用率从95%提高到99.995%
本文针对一个高并发(10W+ QPS)、低延迟(毫秒级返回)的系统因内存索引切换导致的不稳定问题,深入分析并优化了JVM参数配置。通过定位问题根源为GC压力大,尝试了多种优化手段:调整MaxTenuringThreshold、InitialTenuringThreshold、AlwaysTenure等参数让索引尽早晋升到老年代;探索PretenureSizeThreshold和G1HeapRegionSize实现索引直接分配到老年代;加速索引复制过程以及升级至JDK11使用ZGC。
549 82
加一个JVM参数,让系统可用率从95%提高到99.995%
|
机器学习/深度学习
Epoch、Batch 和 Iteration 的区别详解
【8月更文挑战第23天】
1989 0
|
存储 NoSQL 关系型数据库
MongoDB中的索引操作总结
这篇文章总结了MongoDB中索引的概念、创建方法、常见操作指令、限制以及索引对查询效率的影响。
696 2
|
监控 安全 数据可视化
Grafana 安全性和权限管理
【8月更文第29天】Grafana 是一个广泛使用的开源平台,用于可视化和监控时间序列数据。随着 Grafana 在生产环境中的广泛采用,确保其安全性变得至关重要。本文将探讨如何配置 Grafana 的访问控制和安全设置以保护敏感数据,并提供一些具体的代码示例。
1533 2
|
Kubernetes 监控 网络协议
在K8S中,如果因为网络原因导致Pod异常,该如何排查?
在K8S中,如果因为网络原因导致Pod异常,该如何排查?
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
1228 0
|
监控 NoSQL Redis
Redis性能优化问题之配置 Redis 的自动碎片整理功能,如何解决
Redis性能优化问题之配置 Redis 的自动碎片整理功能,如何解决