总结:Prometheus之PromQL操作符

news2025/8/8 14:55:05

一、介绍

使用PromQL除了能够方便的按照查询和过滤时间序列以外,PromQL还支持丰富的操作符,这些操作符包括:数学运算符,逻辑运算符,布尔运算符等等。

二、数学运算

  • + (加法)
  • - (减法)
  • * (乘法)
  • / (除法)
  • % (求余)
  • ^ (幂运算)

案例:如下PromQL使用了*,即乘法

sum by (label_qke_cloud_qiyi_domain_app_id, label_qke_cloud_qiyi_domain_app_name) (rate(http_server_requests_seconds_count{}[5m]) * on (pod) group_left(label_qke_cloud_qiyi_domain_app_id, label_qke_cloud_qiyi_domain_app_name) kube_pod_labels{label_qke_cloud_qiyi_domain_app_name=\"hubble-biz-log\"})

为啥使用*呢?

目的:让左边的计算结果不变。

因为kube_pod_labels{label_qke_cloud_qiyi_domain_app_name=\"hubble-biz-log\"}的结果值始终是1,任何数乘以1都是不变的

如果使用+,- 等,value值就会变化。但是改成 / 是可以的,效果是一样的,以为任何数除以1,还是不变

 

三、布尔运算

  • == (相等)
  • != (不相等)
  • > (大于)
  • < (小于)
  • >= (大于等于)
  • <= (小于等于)

四、集合运算符

使用瞬时向量表达式能够获取到一个包含多个时间序列的集合,我们称为瞬时向量。 通过集合运算,可以在两个瞬时向量与瞬时向量之间进行相应的集合操作。目前,Prometheus支持以下集合运算符:

  • and (并且)
  • or (或者)
  • unless (排除)

*vector1 and vector2* 会产生一个由vector1的元素组成的新的向量。该向量包含vector1中完全匹配vector2中的元素组成。

*vector1 or vector2* 会产生一个新的向量,该向量包含vector1中所有的样本数据,以及vector2中没有与vector1匹配到的样本数据。

*vector1 unless vector2* 会产生一个新的向量,新向量中的元素由vector1中没有与vector2匹配的元素组成。

五、操作符优先级

对于复杂类型的表达式,需要了解运算操作的运行优先级

例如,查询主机的CPU使用率,可以使用表达式:

100 * (1 - avg (irate(node_cpu{mode='idle'}[5m])) by(job) )

其中irate是PromQL中的内置函数,用于计算区间向量中时间序列每秒的即时增长率。关于内置函数的部分,会在下一节详细介绍。

在PromQL操作符中优先级由高到低依次为:

  1. ^
  2. *, /, %
  3. +, -
  4. ==, !=, <=, <, >=, >
  5. and, unless
  6. or

六、匹配模式

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

接下来将介绍在PromQL中有两种典型的匹配模式:一对一(one-to-one),多对一(many-to-one)或一对多(one-to-many)。

一对一匹配

一对一匹配模式会从操作符两边表达式获取的瞬时向量依次比较并找到唯一匹配(标签完全一致)的样本值。默认情况下,使用表达式:

vector1 <operator> vector2

在操作符两边表达式标签不一致的情况下,可以使用on(label list)或者ignoring(label list)来修改便签的匹配行为。使用ignoreing可以在匹配时忽略某些便签。而on则用于将匹配行为限定在某些便签之内。

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

例如当存在样本:

method_code:http_errors:rate5m{method="get", code="500"}  24
method_code:http_errors:rate5m{method="get", code="404"}  30
method_code:http_errors:rate5m{method="put", code="501"}  3
method_code:http_errors:rate5m{method="post", code="500"} 6
method_code:http_errors:rate5m{method="post", code="404"} 21

method:http_requests:rate5m{method="get"}  600
method:http_requests:rate5m{method="del"}  34
method:http_requests:rate5m{method="post"} 120

使用PromQL表达式:

method_code:http_errors:rate5m{code="500"} / ignoring(code) method:http_requests:rate5m

该表达式会返回在过去5分钟内,HTTP请求状态码为500的在所有请求中的比例。如果没有使用ignoring(code),操作符两边表达式返回的瞬时向量中将找不到任何一个标签完全相同的匹配项。

因此结果如下:

{method="get"}  0.04            //  24 / 600
{method="post"} 0.05            //   6 / 120

同时由于method为put和del的样本找不到匹配项,因此不会出现在结果当中。

多对一和一对多

多对一和一对多两种匹配模式指的是“一”侧的每一个向量元素可以与"多"侧的多个元素匹配的情况。在这种情况下,必须使用group修饰符: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>

多对一和一对多两种模式一定是出现在操作符两侧表达式返回的向量标签不一致的情况。因此需要使用ignoring和on修饰符来排除或者限定匹配的标签列表。

例如,使用表达式:

method_code:http_errors:rate5m / ignoring(code) group_left method:http_requests:rate5m

该表达式中,左向量method_code:http_errors:rate5m包含两个标签method和code。而右向量method:http_requests:rate5m中只包含一个标签method,因此匹配时需要使用ignoring限定匹配的标签为code。 在限定匹配标签后,右向量中的元素可能匹配到多个左向量中的元素 因此该表达式的匹配模式为多对一,需要使用group修饰符group_left指定左向量具有更好的基数。

最终的运算结果如下:

{method="get", code="500"}  0.04            //  24 / 600
{method="get", code="404"}  0.05            //  30 / 600
{method="post", code="500"} 0.05            //   6 / 120
{method="post", code="404"} 0.175           //  21 / 120

提醒:group修饰符只能在比较和数学运算符中使用。在逻辑运算and,unless和or才注意操作中默认与右向量中的所有元素进行匹配。

参考:

Prometheus之PromQL-操作符 - 南风丶轻语 - 博客园

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

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

相关文章

macOS Outlook 查看邮件的源码 HTML源码

文章目录一句话Intro系统及软件版本macOS 12.6 M1 chipOutlook 16.67 (22111300)操作方式邮件正文 demo一句话 查看Outlook中HTML格式邮件的HTML源代码&#xff1a; Windows&#xff1a;Actions > Other Actions > View Source macOS&#xff1a;鼠标右击要查看的邮件 &…

提高工作效率,让你快速获得Hypermesh二次开发能力!

众所周知&#xff0c;目前电子产品种类很多&#xff0c;产品更新换代很快&#xff0c;已经步入快消品行列&#xff0c;这必然导致每个厂商对于产品开发周期的要求很严格&#xff0c;其次消费者对产品越来越挑剔&#xff0c;对产品的创新性要求很高&#xff0c;如果产品的同质化…

三肽Isovaleryl-Val-Val-Sta-乙酯化、120849-36-7

三肽Isovaleryl-Val-Val-Sta-乙酯化 编号&#xff1a;154080 CAS号&#xff1a;120849-36-7 三字母&#xff1a;Isobutyricacid-Val-Val-Sta-OEt 描 述&#xff1a;胃酶抑素类似物 SR 42128 抑制肾素活性。编号: 154080 中文名称: 三肽Isovaleryl-Val-Val-Sta-乙酯化 CAS号: 12…

JVM类加载(类加载过程、双亲委派模型)

系列文章目录 JVM的内存区域划分_crazy_xieyi的博客-CSDN博客 文章目录 一、类加载过程二、关于类加载的典型试题三、双亲委派模型一、类加载过程 对于一个类来说&#xff0c;它的生命周期是这样的&#xff1a;1.加载 “加载”&#xff08;Loading&#xff09;阶段是整个“类加…

MyBatis-核心配置文件mybatis-config.xml主要参数详解

1.全局配置文件 全局配置文件&#xff0c;见名知意就是对当前MyBatis的一些全局属性进行设置。也就是对各种数据操作进行统一规定。 全局配置文件包含了全局设置&#xff08;setting&#xff09;和properties两个大的部分&#xff0c;通过这两个大的部分动态的影响MyBatis的行…

安装Centos7

大部分运行环境都是centos&#xff0c;自己最近装了太多次centso&#xff0c;记录一下。 目录一、安装VMware二、下载Centos7镜像三、新建虚拟机四、配置Centos4.1 开启虚拟机4.2 配置安装语言4.3 安装图形界面4.4 设置磁盘分区4.5 开启网络4.6 配置root密码一、安装VMware VM…

git学习(一)

git学习之基本配置以及简单推拉操作 1 git的基本配置 1.1 配置提交者的姓名 1.1.1 语法 git config --global user.name "姓名"1.1.2 示例代码 git config --global user.name "张三"1.1.3 示例代码运行截图 1.2 配置提交者的邮箱 1.2.1 语法 git c…

app优化ios,iOS app上架流程问题集锦,ASO新手小白必看(上)

App从研发到提审上架&#xff0c;需要一套流程来保证App质量。而在上架过程中&#xff0c;开发者们往往都会遇到一些问题。今天就上架流程中遇到的问题作简单的梳理~ 1.准备 苹果开发者账号&#xff1a; 美术素材&#xff1a; Icon&#xff1a;尺寸1024*1024 设计icon时&#x…

Socket网络编程

参考博客&#xff1a;https://blog.csdn.net/shuux666/article/details/124023652 1、环境查看 通过cmd窗口的命令:ipconfig查看本机IP地址 查看网络情况是否正常:ping百度官网 2、Socket概述 3、套接字建立连接过程 4、Socket网络编程 基本的Socket编程&#xff1a; 本实…

2023-2028年中国合成氨行业发展前景与投资规划分析报告

本报告由锐观咨询重磅推出&#xff0c;对中国合成氨行业的发展现状、竞争格局及市场供需形势进行了具体分析&#xff0c;并从行业的政策环境、经济环境、社会环境及技术环境等方面分析行业面临的机遇及挑战。还重点分析了重点企业的经营现状及发展格局&#xff0c;并对未来几年…

【网络篇】第十五篇——HTTP协议(二)

HTTP的方法 HTTP的状态码 HTTP常见的Header Cookie和Session HTTP VS HTTPS HTTP/1.1,HTTP/2&#xff0c;HTTP/3演变 前面一章初步认识了URL&#xff0c;HTTP请求和相应协议格式,有所忘记的可以看一下前面的博客 (3条消息) 【网络篇】第十四篇——HTTP协议(一)(附带电视剧…

JVM 的可达性分析法和四种引用

JVM的垃圾回收机制的三个问题 回收哪些数据&#xff1f;什么回收&#xff1f;在哪里回收&#xff1f; 本就回答垃圾回收机制是回收哪些数据&#xff1f; 所谓“要回收的垃圾”无非就是那些不可能再被任何途径所使用的对象。无需再使用的对象&#xff0c;会被标记为垃圾&#…

PDF预览完整解决方案及各种兼容(VUE版)

PDF预览完整解决方案及各种兼容&#xff08;VUE版&#xff09; PDF预览完整解决方案及各种兼容&#xff08;VUE版&#xff09; - 掘金 前端学习使者正在上传…重新上传取消 2021年11月12日 16:57 阅读 2547 一、利用iframe 就一行代码就够了&#xff0c;只能满足最基本的…

【C++】vector的使用与题目练习

文章目录一、前言二、构造函数三、遍历四、增删查改1.常用接口2.增删查改五、经典题目一、前言 学习完string类之后&#xff0c;我们在来学习vector难度并没有之前那么高&#xff0c;更加容易理解一些接口 vector是表示可变大小数组的序列容器 &#xff0c;本质讲&#xff0c;v…

【基于stm32 FreeRtos的智能台灯】

基于stm32 FreeRtos的智能台灯控制 之前做了一个裸机版本的智能台灯&#xff0c;最近刚好复习一下FreeRto的一些基础知识&#xff0c;朋友发给了我一个功能需求刚好用来实践一下&#xff0c;需要的朋友可以自行下载。 链接&#xff1a;https://pan.baidu.com/s/1Ovn1ILgvDWWzeC…

Java项目:JSP会议-会议室管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目包含两个角色&#xff0c;管理员与用户角色&#xff1b; 管理员角色包含以下功能&#xff1a; 查看预订,查看会议,部门管理,员工注册,添…

Driud数据库连接池的使用

Driud数据库连接池的使用 简介&#xff1a;本文通过简洁的代码&#xff0c;让大家快速熟悉Driud数据库连接池的使用。 数据库连接池简介 数据库连接池是个容器&#xff0c;负责分配、管理数据库连接(Connection) 它允许应用程序重复使用一个现有的数据库连接&#xff0c;而不…

ROS-Unity连接教程

本篇文章主要介绍基于ROS-TCP-Connector、ROS-TCP-Endpoint两个Unity接口与ROS进行通信的环境配置&#xff0c;并对官方给出的Unity和ROS相互通信示例中的消息部分做了说明 一、环境配置 参考&#xff1a;Unity-Robotics-Hub/setup.md at main Unity-Technologies/Unity-Rob…

【机器学习】拟合优度度量和梯度下降(红酒数据集的线性回归模型sklearnRidge)

文章目录一.拟合优度度量&#xff08;可决系数&#xff09;1.1总离差平方和的分解1.2 TSSESSRSS1.3 红酒数据集实例R2_score实现代码二. 梯度下降2.1 损失函数直观图(单特征/变量举例)2.2 梯度下降和正规方程的区别2.3 线性回归模型——梯度下降 &#xff08;红酒数据集&#x…

天宇优配|混动车将告别上海免费绿牌 新能源多种技术路

现在订车还来得及吗&#xff1f;这是上海购置混动新能源车群体当下最关怀的问题。根据方针要求&#xff0c;上海关于混动车的免费绿牌支持将于本年年底结束。这意味着&#xff0c;再过一个多月&#xff0c;在上海购买插电式混合动力&#xff08;含增程式&#xff09;轿车将依照…