PromQL基础使用和案例解析

PromQL简介

PromQL是prometheus自己开发的数据查询DSL语言,语言表现力非常丰富,支持条件查询、操作符、并且内建了大量内置函数,供我们针对监控数据的各种维度进行查询。

数据类型

PromQL 表达式计算出来的值有以下几种类型:

  • 瞬时向量 (Instant vector):一组时序,每个时序只有一个采样值
  • 区间向量 (Range vector):一组时序,每个时序包含一段时间内的多个采样值
  • 标量数据 (Scalar):一个浮点数
  • 字符串 (String):一个字符串

1、瞬时数据 (Instant vector)

定义:瞬时数据表示的是当前时刻的数据
示例:查询CPU的使用时间 (node_cpu_seconds_total)
在这里插入图片描述

2、区间数据 (Range vector)

定义:区间数据表示的是在某一个时间范围内的数据,可以分为以下几种:

➢ Time Durations

表示持续时间,计量单位包含毫秒(ms)、秒(s)、分钟(m)、小时(h)、天(d)、周(w)、年(y)等。
示例:查询CPU1分钟内的使用时间 (node_cpu_seconds_total[1m])
在这里插入图片描述
可以看到1分钟内,每个指标有4个值,采样周期是15s。

➢ Offest modifier

Offset modifier 表示偏移量修饰符,允许更改查询中单个瞬间和范围向量的时间偏移量。
示例:查询CPU使用时间在5分钟以前的数据 (node_cpu_seconds_total offset 5m)
在这里插入图片描述

➢ @modifier

@修饰符 后面加上一个Unix时间戳,可以查询改时间点的数据。
注意:这种用法需要在prometheus启动时添加参数 --enable-feature=promql-at-modifier ,并且以前老版本的prometheus可能不支持这种用法。
示例:查询2022.01.25 00:00:00这个时刻CPU的使用时间 (node_cpu_seconds_total@1643040000)
在这里插入图片描述

3、标量数据 (Scalar)

定义:标量数据没有时间属性,每个时间点数值一致。
示例:查询CPU使用时间,所有标签的个数 (count(node_cpu_seconds_total) )
在这里插入图片描述

4、字符串 (String)

定义:字符串在PromQL中用于表示文本数据。
示例:可以用单引号(‘’)、双引号(“”)或反引号(``)来指定。在PromQL中,字符串通常用于标签匹配或作为函数参数。

条件匹配

promQL支持各种条件匹配,条件匹配符有:= 、!= 、=~ 、!~

  • =:选择与提供的字符完全相同的数据
  • !=:选择不等于提供的字符串的数据
  • =~:选择与提供的字符串进行正则表达式匹配的数据
  • !~:选择与提供的字符串不匹配的数据

1、完全匹配

示例1:查询CPU第一个核的使用时间 (node_cpu_seconds_total{cpu=“0”})
在这里插入图片描述

示例2:查询CPU除第一个外其他核的使用时间 (node_cpu_seconds_total{cpu!=“0”} )
在这里插入图片描述

示例3:查询CPU第一个、第二个核的使用时间 (node_cpu_seconds_total{cpu=~“0|1”})
在这里插入图片描述

示例4:查询CPU除第一个、第二个外其他核的使用时间 (node_cpu_seconds_total{cpu!~“0|1”})
在这里插入图片描述

2、正则匹配

示例:查询CPU第一个核,且mode是i开头的使用时间 (node_cpu-seconds_total{cpu=“0”,mode=~“i.*”})
在这里插入图片描述

运算符

PromQL支持各种运算符,并对结果数据进行运算和过滤。

1、比较运算符

比较运算符有:== 、!= 、> 、< 、>= 、<=
比较运算符与数学中和其他语言的含义是一样的
示例:查询CPU使用时间等于0的标签 (node_cpu_seconds_total == 0)
在这里插入图片描述
示例:查询CPU使用时间不等于0的标签 (node_cpu_seconds_total != 0)
在这里插入图片描述
其他比较运算符的用法与上面类似,就不举例了。

2、算数运算符

算术运算符有:加+ 、减- 、乘* 、除/ 、取余% 、幂次方^等
示例:计算主机CPU使用时间和主机上面虚拟机使用时间的和 (node_cpu_seconds_total + node_cpu_guest_seconds_total)
在这里插入图片描述
其他算数运算符的用法与上面类似,就不举例了。

3、逻辑运算符

逻辑运算符有:和(and)、或(or)、非(unless)
示例:查询CPU的时间大于0且小于10的标签 (node_cpu_seconds_total > 0 and node_cpu_seconds_total < 10)
在这里插入图片描述
其他逻辑运算符的用法与上面类似,就不举例了。

4、聚合运算符

➢ 求和 (sum)

示例:计算CPU所有核的总使用时间 (sum(node_cpu_seconds_total))
在这里插入图片描述

➢ 计数 (count)

示例:计算CPU的核数 (count(node_cpu_seconds_total{mode=“system”}))
在这里插入图片描述

➢ 最大值 (max)

示例:查询CPU第一个核中使用时间最大值 (max(node_cpu_seconds_total{cpu=“0”}))
在这里插入图片描述

➢ 最小值 (min)

示例:查询CPU第一个核中使用时间最小值 (min(node_cpu_seconds_total{cpu=“0”}) )
在这里插入图片描述

➢ 求平均值 (avg)

示例:查询CPU所有核的平均使用时间 (avg(node_cpu_seconds_total))
在这里插入图片描述

➢ 取前x个值 (topk)

示例:查询CPU所有核中排名前两个的核 (topk(2,node_cpu_seconds_total))
在这里插入图片描述

➢ 取后x个值 (bottomk)

示例:查询CPU所有核中排名后两个的核 (bottomk(2,node_cpu_seconds_total))
在这里插入图片描述

5、匹配运算

➢ 关联标签 (on)

定义:将两个指标进行算数运算时,如果两个指标的标签不完全相同,可以匹配相同的标签进行计算。
示例:计算CPU每个核系统态和用户态的总使用时间 (node_cpu_seconds_total{mode=“system”} + on(instance,cpu) node_cpu_seconds_total{mode=“user”})

➢ 忽略标签 (ignoring)

定义:将两个指标进行算数运算时,如果两个指标的标签不完全相同,可以忽略不一样的标签进行计算忽略运行状态。
示例:计算CPU每个核系统态和用户态的总使用时间 (node_cpu_seconds_total{mode=“system”} + ignoring(mode) node_cpu_seconds_total{mode=“user”})
在这里插入图片描述

➢ 以某个标签进行计算 (by)

示例:计算每个CPU核的各个状态的总使用时间 (sum(node_cpu_seconds_total) by (cpu)))
在这里插入图片描述

➢ 舍弃某个标签后进行计算 (without)

示例:计算每个CPU核的各个状态的总使用时间 (sum(node_cpu_seconds_total) without (cpu))
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值