首页 > 其他分享 >PromQL基础使用和案例解析

PromQL基础使用和案例解析

时间:2025-01-08 15:31:35浏览次数:3  
标签:node total 示例 seconds CPU 案例 PromQL 解析 cpu

文章目录

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))
在这里插入图片描述

标签:node,total,示例,seconds,CPU,案例,PromQL,解析,cpu
From: https://blog.csdn.net/OpsEye/article/details/145009804

相关文章

  • 小程序开发-页面事件之上拉触底实战案例
    ......
  • Modbus协议网关的工作原理及功能解析
    一、Modbus协议网关的工作原理Modbus协议网关能够在Modbus协议与其他主流协议(如MQTT、OPCUA、HTTP等)之间进行数据转换,实现设备之间的无缝连接与数据集成。在Modbus主/从通信模式中,网关作为核心设备,负责采集Modbus从设备的数据,并将这些数据转换成其他协议格式,上传至云平台或本......
  • vue3引入ts以及js文件使用案例
    ts:先确保项目正确集成TypeScript添加tsconfig.json文件{"compilerOptions":{"target":"esnext","module":"esnext","strict":true,"jsx":"preserve","importH......
  • 如何从工具中流式处理事件——深入解析与实践
    在构建复杂的AI系统时,流式处理事件可以帮助你实时捕获和处理数据流中的动态变化。本文将指导你如何通过使用LangChain中的astream_events()方法来实现流式事件的捕捉,尤其是在自定义工具中。技术背景介绍流式处理事件在现代AI应用场景中变得越来越重要。它不仅有助于监控模......
  • python代码的主要功能是解析和验证特定格式的数据包
    #coding=utf-8importjsonimportsysimportrefromdatetimeimportdatetimefrompkt2csvimportsegment_lenfrompkt2csvimportpnu_pnofrompkt2csvimportpnu_pno1frompkt2csvimportcrc16_checkoutfrompkt2csvimportexceed_longfrompkt2csvimport......
  • 【一文入门】Go语言常用语法和案例
    简介Go语言(Golang)作为一门现代编程语言,以其简洁、并发性强、编译速度快而备受欢迎。它由谷歌开发,旨在解决大型软件项目中的常见问题。对于初学者和有经验的开发者来说,Go语言提供了一套直观的语法和强大的工具集,可以高效地构建可靠的软件解决方案。本篇文章旨在为读者提供......
  • 原生的Three.js Cesium.js的 开源案例 已获近1000Star
    纯原生threecesium案例由于前端得发展,three.js和cesium.js越来越被越来越多得前端接触到,由于其学习路线比较复杂,且官网案例覆盖不全,因此在今年我们共同搭建了一个免费得three和cesium案例学习平台,未来将免费逐步的更新案例。主要侧重于开发者的技术交流......
  • 纯原生 three cesium 案例 已获近 1000Star
    纯原生threecesium案例由于前端得发展,three.js和cesium.js越来越被越来越多得前端接触到,由于其学习路线比较复杂,且官网案例覆盖不全,因此在今年我们共同搭建了一个免费得three和cesium案例学习平台,未来将免费逐步的更新案例。主要侧重于开发者的技术交流......
  • 【Java难点解析-9】static
    在Java中,abstract关键字用于定义抽象类和抽象方法。抽象类和抽象方法是Java中实现抽象化的机制,旨在让开发者通过继承来实现特定的功能,同时隐藏不需要关心的实现细节。1.抽象类(AbstractClass)抽象类是不能被实例化的类。它可以包含抽象方法(没有实现的方法)以及普通方法(有......
  • JAVA线程池有哪些队列? 以及它们的适用场景案例
    大家好,我是V哥。在高并发应用场景下,线程池的使用是必然的,那在线程中的队列都有哪些呢?下面V哥整理的几种常见的线程池队列以及适用场景案例,分享给大家。线程池中的队列主要用于存放等待执行的任务,以下是几种常见的线程池队列:1.无界队列(UnboundedQueue)LinkedBlockingQueue......