PromQL之选择器和运算符

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
  1. 平台统一监控的介绍和调研
  2. 直观感受PromQL及其数据类型
  3. PromQL之选择器和运算符

PromQL 匹配器

  1. 相等匹配器=

选择与提供的字符串完全相同的数据

例筛选出id=“G1 Eden Space” 的数据

jvm_memory_used_bytes{id="G1 Eden Space"}

在这里插入图片描述

  1. 不相等匹配器!=

与相等匹配器相反用来选择与提供字符串不相同的数据

例选择 id 不为G1 Eden Space 的数据

jvm_memory_used_bytes{id!="G1 Eden Space"}

在这里插入图片描述

  1. 正则表达式匹配器(=~)

选择与提供的正则表达式相匹配的数据

例从id 标签中筛选出 G1开头的数据

jvm_memory_used_bytes{id =~ "G1.*"}

在这里插入图片描述

  1. 不等于的正则表达式匹配器(!~)

选择与提供的正则表达式不匹配的数据

例从id 标签中筛选出 不以G1开头的数据

jvm_memory_used_bytes{id !~ "G1.*"}

在这里插入图片描述

jvm_memory_used_bytes 同 {name = “jvm_memory_used_bytes”}也可以用其他匹配器

PromQL 选择器

瞬时向量选择器

返回在指定时间戳查询到的最新样本值

最简单形式返回包含该指标名称的所有时间序列的瞬时向量

例筛选出了所有指标为jvm_memory_used_bytes的数据

jvm_memory_used_bytes

在这里插入图片描述

区间向量选择器

返回一段时间内的样本数据。通过末尾[]进行时间定义如[1m]表示1分钟之内

例返回一分钟内的数据

jvm_memory_used_bytes[1m]

在这里插入图片描述
图中每一条数据都4个样本值表示1分钟之内采集了4次数据。

可使用的时间单位秒(s)、分钟(m)、小时(h)、天(d)、周(w)、年(y)

偏移量修改器

可以让瞬时向量和区间向量的时间发生偏移

例查询前1分钟的jvm_memory_used_bytes 样本值

jvm_memory_used_bytes offset 1m

在这里插入图片描述

注意与 jvm_memory_used_bytes[1m] 的区别

@ 修饰符

@ 修饰符能够修改瞬时向量和区间向量的求值时间使用@时间戳 表示

例查询 2023-01-18 19:08:59 的 jvm_memory_used_bytes 指标

jvm_memory_used_bytes @1674040139

在这里插入图片描述

例查询2023-01-18 19:08:59 时前 5分钟的 jvm_memory_used_bytes指标

jvm_memory_used_bytes @1674040139 offset 5m

在这里插入图片描述

PromQL 运算符

算术运算符

支持6种算术运算符加法+、减法-、乘法*、除法/、模%、幂^

例1计算堆内存使用率
sum(jvm_memory_used_bytes{area=“heap”}) 表示已使用的堆内存
sum(jvm_memory_max_bytes{area=“heap”}) 表示堆总内存

sum(jvm_memory_used_bytes{area="heap"})*100 / sum(jvm_memory_max_bytes{area="heap"})

在这里插入图片描述

逻辑运算符

and并且、or或者、unless排除

  • vector1 and vector2 产生一个新的向量向量中的元素由vector1完全匹配 vector2的元素组成
  • vector1 or vector2产生一个新的向量由vector1中的元素 和 vector2中不与vector1匹配的元素 组成
  • vector1 unless vector2产生一个新的向量由vector1 中没有与vector2匹配的元素组成

还是用jvm_memory_used_bytes 指标来举例。

and 示例

vector1所有实例的堆内存数据

jvm_memory_used_bytes{area="heap"}

在这里插入图片描述

vector2筛选出 instance=“192.168.0.113:9000”,area=“heap” 数据

jvm_memory_max_bytes{instance="192.168.0.113:9000",area="heap"}

在这里插入图片描述

and 运算符后只保留了instance=“192.168.0.113:9000”,area=“heap” 标签相同的数据

jvm_memory_used_bytes{area="heap"} and jvm_memory_max_bytes{instance="192.168.0.113:9000",area="heap"}

在这里插入图片描述

发现 and 运算符并不管 指标名是否一样

or 示例

为了更加直观使用另外一个指标http_server_requests_seconds_count

在这里插入图片描述
unless 示例

在这里插入图片描述

比较运算符

== 相等、!=不相等、>大于、<小于、>=大于等于、<=小于等于

例在运算符之后加上bool关键字可以让结果返回0或1

99 >= bool 88

向量匹配

Prometheus 的向量与向量 之间进行运算操作时会基于默认的匹配规则依次找到与左边向量元素匹配标签完全一致的右边向量元素进行运算如果没有找到匹配元素直接丢弃。向量匹配主要有一对一一对多多对一。

一对一匹配

即两遍拥有的标签完全相同找到唯一一条条目依次进行匹配。

process_open_fds / process_max_fds

如果两边拥有的标签不一致可以用 on 或 ignoring 关键字修改标签间的匹配行为。

on指定要匹配的标签只匹配指定的标签。

ignoring忽略某些标签就是指定的这些标签不匹配其他的都匹配。

如下示例中只对 instance 和 job 两个标签进行匹配。

sum by(instance, job) (rate(node_cpu_seconds_total{mode="idle"}[5m])) 
/ on (instance, job) 
sum by(instance, job) (rate(node_cpu_seconds_total [5m] ))

两个瞬时向量进行比较时都会返回左边的表达式

如下示例都会返回左边的表达式可以根据需求来写表达式。

process_open_fds < process_max_fds
process_max_fds >  process_open_fds

一对多或多对一匹配
group_left: 左边有更多的子集
group_right:右边有更多的子集

用法

<vector expr> <bin-op> ignoring(<label list>) group_left(<label list>) <vector expr>
<vector expr> <bin-op> ignoring(<label list>) group_right(<label list>) <vector expr>
<vector expr> <bin-op> on(<label list>) group_left(<label list>) <vector expr>
<vector expr> <bin-op> on(<label list>) group_right(<label list>) <vector expr>

分组只能用于 比较和算术运算符中

作者其他文章
Grafana 系列文章版本OOS v9.3.1

  1. Grafana 的介绍和安装
  2. Grafana监控大屏配置参数介绍一
  3. Grafana监控大屏配置参数介绍二
  4. Grafana监控大屏可视化图表
  5. Grafana 查询数据和转换数据
  6. Grafana 告警模块介绍
  7. Grafana 告警接入飞书通知

Spring Boot Admin 系列

  1. Spring Boot Admin 参考指南
  2. SpringBoot Admin服务离线、不显示健康信息的问题
  3. Spring Boot Admin2 @EnableAdminServer的加载
  4. Spring Boot Admin2 AdminServerAutoConfiguration详解
  5. Spring Boot Admin2 实例状态监控详解
  6. Spring Boot Admin2 自定义JVM监控通知
  7. Spring Boot Admin2 自定义异常监控
  8. Spring Boot Admin 监控指标接入Grafana可视化
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6