PromQL 语法
什么是 PromQL
PromQL (Prometheus Query Language) 是 Prometheus 监控系统中用于查询时间序列数据的语言。它允许用户编写查询,以从 Prometheus 中检索并处理监控数据。
PromQL 的基础概念
1. 时间序列
Prometheus 中的时间序列由以下几个部分组成:
- 指标名称 (Metric name):表示时间序列的类别。例如,
http_requests_total
表示 HTTP 请求的总数。- 标签 (Labels):用于标识某个时间序列的具体特性。例如,
method="GET", status="200"
可以标识不同的 HTTP 方法和状态。- 时间戳 (Timestamp):表示记录数据的具体时间。
- 值 (Value):时间序列在某一时间点上的具体数值。
2. 基本查询
基本的 PromQL 查询是通过 指标名称来检索 时间序列数据。
示例:
# 这将返回 http_requests_total 指标的所有时间序列。
http_requests_total
3. 标签过滤
可以通过标签来筛选时间序列。使用 {}
来包含标签选择器:
示例:
# 该查询返回所有符合 method="GET" 且 status="200" 的时间序列。
http_requests_total{method="GET", status="200"}
可以通过 =
, !=
, =~
, !~
等操作符来进行更多的匹配规则:
符号 | 含义 |
---|---|
= | 精确匹配 |
!= | 不匹配 |
=~ | 正则表达式匹配 |
!~ | 正则表达式不匹配 |
4. 区间选择
PromQL 支持通过时间区间来查询过去一段时间的数据,称为 区间向量 (Range Vector)。
示例:
# 该查询表示从当前时间起过去 5 分钟内的数据。
http_requests_total[5m]
PromQL 的数据类型
PromQL 中有四种数据类型:
- 瞬时向量 (Instant Vector):一组带有当前时间戳的时间序列。
- 区间向量 (Range Vector):一组带有时间区间的时间序列。
- 标量 (Scalar):单个浮点数值。
- 字符串 (String):单个字符串值(较少使用)。
1. 瞬时向量
示例:
# 返回 up 指标的所有瞬时向量
up
2. 区间向量
示例:
# 返回 up 指标在过去 5 分钟内的所有时间序列。
up[5m]
3. 标量
标量是单个数值,通常用于某些计算场景。
示例:
# 表示常量 5。
5
PromQL 的操作符
1. 算术运算符
PromQL 支持常见的算术运算符,主要用于对查询结果进行计算。
操作符 | 含义 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
^ | 幂运算 |
示例:
# 将请求速率结果乘以 100。
rate(http_requests_total[5m]) * 100
2. 比较运算符
用于对查询结果进行比较操作。
操作符 | 含义 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
示例:
# 返回所有状态为 1 的实例(表示健康)
up == 1
3. 逻辑运算符
用于对不同查询结果进行逻辑运算。
操作符 | 含义 |
---|---|
and | 交集 |
or | 并集 |
unless | 差集 |
示例:
# 返回所有健康且请求数大于 100 的实例。
up == 1 and http_requests_total > 100
PromQL 的聚合操作符
Prometheus 提供了丰富的聚合操作符,用于将多条时间序列合并为一条。
操作符 | 含义 |
---|---|
sum | 求和 |
avg | 平均值 |
min | 最小值 |
max | 最大值 |
count | 计数 |
stddev | 标准差 |
stdvar | 方差 |
topk | 取前 k 大 |
bottomk | 取前 k 小 |
quantile | 分位数 |
示例:
# 计算过去 5 分钟内所有请求的总和。
sum(rate(http_requests_total[5m]))
# 按 instance 标签计算请求速率的平均值。
avg by (instance) (rate(http_requests_total[5m]))
PromQL 的内置函数
PromQL 提供了一些内置函数,帮助用户对时间序列进行更复杂的计算。
1. 时间序列计算函数
rate()
:计算时间序列在某段时间内的速率(适用于 Counter 类型)
rate(http_requests_total[5m])
irate()
:计算时间序列的瞬时速率。
irate(http_requests_total[1m])
increase()
:计算某个区间内指标值的增量(适用于 Counter 类型)。
increase(http_requests_total[5m])
2. 统计函数
avg_over_time()
:计算时间区间内的平均值。
avg_over_time(http_requests_total[10m])
sum_over_time()
:计算时间区间内的总和。
sum_over_time(http_requests_total[10m])
max_over_time()
:计算时间区间内的最大值。
max_over_time(http_requests_total[10m])
3. 特殊函数
abs()
:返回绝对值。
abs(node_load1)
clamp_min()
和 clamp_max()
:限制最小值和最大值。
clamp_min(cpu_usage, 0.1)
4. 偏移数据
offset:
来查询指定时间之前的数据。它允许你向前或向后偏移数据的时间点。
# 表示查询 1 小时前的数据。
rate(http_requests_total[5m] offset 1h)
PromQL 的子查询
子查询 (Subquery) 是一种强大的功能,允许你在指定时间范围内查询一组区间向量 (Range Vector),然后将结果用作进一步的操作。这与普通的区间向量查询不同,子查询在区间上执行某个操作,然后将结果作为新的时间序列。子查询的语法是在查询的基础上添加
[]
。
语法:
<查询>[<区间>:<解析度>]
<查询>:你要执行的基本查询。
<区间>:子查询的时间范围,表示从当前时间点向过去的时间范围。
<解析度>(可选):用于控制子查询的采样分辨率(时间间隔),默认为 Prometheus 的全局评估间隔。
示例:
avg_over_time(rate(http_requests_total[5m])[30m:])# rate(http_requests_total[5m]):首先计算过去 5 分钟的请求速率。
# [30m:]:接下来,我们对过去 30 分钟内的请求速率进行子查询,生成一个时间区间数据。
# avg_over_time():最后,对这些请求速率计算出 30 分钟内的平均值。
# 该查询表示:对过去 1 小时内的请求速率数据进行采样,每 1 分钟取一次样本,然后计算这些样本的平均值。
avg_over_time(rate(http_requests_total[5m])[1h:1m])# rate(http_requests_total[5m]):计算 5 分钟的请求速率。
# [1h:1m]:查询过去 1 小时的数据,并每 1 分钟取一次样本。
# avg_over_time():对这些样本计算 1 小时内的平均值。
# 计算过去 1 小时内每 5 分钟请求速率的总和。
sum_over_time(rate(http_requests_total[5m])[1h:])
# 每 10 秒钟采样一次,并返回过去 1 小时内的请求速率数据。
rate(http_requests_total[5m])[1h:10s]
# 首先计算 5 分钟的请求速率,然后在过去 1 小时内查找最大请求速率。
max_over_time(rate(http_requests_total[5m])[1h:])
相关文章:

PromQL 语法
什么是 PromQL PromQL (Prometheus Query Language) 是 Prometheus 监控系统中用于查询时间序列数据的语言。它允许用户编写查询,以从 Prometheus 中检索并处理监控数据。 PromQL 的基础概念 1. 时间序列 Prometheus 中的时间序列由以下几个部分组成:…...

掌握Go语言中的时间与日期操作
Go语言中的时间与日期操作 在编写程序时,处理时间和日期看似是一项无关紧要的任务,但在需要同步多个任务或从文本文件中读取时间时,它的重要性便凸显出来。Go语言中的time包为我们提供了丰富的时间与日期操作功能。本文将详细介绍如何在Go语…...

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)
MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构&…...

spring数据校验Validation
文章目录 需要的依赖创建校验对象Validator 需要的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>创建校验对象Validator 测试的实体类 //创建…...

Uniapp基于uni拦截器+Promise的请求函数封装
最近在学Uniapp,到封装请求的时候本来还想用axios,但是看到一些教学视频有更简单的方法, 基于uni的拦截器和Promise封装的请求函数 但是他们是用TS写的,还没学到TS,我就把JS写了,最终也是请求成功 // src/…...

【工具】使用 Jackson 实现优雅的 JSON 格式化输出
说明 在 Java 开发中,我们经常需要处理 JSON 数据。无论是从服务器端返回的数据,还是本地存储的数据,JSON 格式都因其轻量级和易于解析的特点而被广泛使用。当我们需要查看或调试 JSON 数据时,优雅、格式化的输出将大大提高我们的…...

ApacheKafka中的设计
文章目录 1、介绍1_Kafka&MQ场景2_Kafka 架构剖析3_分区&日志4_生产者&消费者组5_核心概念总结6_顺写&mmap7_Kafka的数据存储形式 2、Kafka的数据同步机制1_高水位(High Watermark)2_LEO3_高水位更新机制4_副本同步机制解析5_消息丢失问…...

.NET 自定义过滤器 - ActionFilterAttribute
这个代码片段定义了一个自定义的 ASP.NET Core 过滤器(GuardModelStateAttribute),用于在控制器动作执行之前验证模型状态(ModelState)。如果模型状态无效,则构造一个 ProblemDetails 对象来描述错误&#…...

VMware Fusion Pro 13 for Mac虚拟机软件
Mac分享吧 文章目录 效果一、下载软件二、开始安装安装完成!!! 效果 一、下载软件 下载软件 地址:www.macfxb.cn 二、开始安装 安装完成!!!...

HarmonyOS应用开发环境搭建
本文主要讲述的是HarmonyOS应用开发环境的搭建,HUAWEI DevEco Studio是基于IntelliJ IDEA Community开源版本打造,为运行在HarmonyOS系统上的应用和服务提供一站式的开发平台。具体下载链接DevEco Studio 一、下载 DevEco Studio 只需要下载对应的版本&…...

YOLOv8改进实战 | 注意力篇 | 引入ICCV2023顶会LSKNet:大选择性卷积注意力模块LSKA,助力小目标检测
YOLOv8专栏导航:点击此处跳转 前言 YOLOv8 是由 YOLOv5 的发布者 Ultralytics 发布的最新版本的 YOLO。它可用于对象检测、分割、分类任务以及大型数据集的学习,并且可以在包括 CPU 和 GPU 在内的各种硬件上执行。 YOLOv8 是一种尖端的、最先进的 (SOTA) 模型,它建立在以前…...

00Mac安装playwright
文章目录 前言一、执行以下命令安装二、安装如果报错zsh: command not found: pip三、安装浏览器驱动 前言 现在常用的三个自动化测试(或者爬虫)库,是Selenium、Puppeteer、Playwright。Playwright是未来趋势,主要学习Playwright…...

materail3 CircularProgressIndicator和LinearProgressIndicator有难看的白块和断点
看看,就是这个垃圾效果: 圆圈的进度条有断点,不连接; 横线进度条,有尾部亮色,进度处又有分割。 它的原出处在这里:https://m3.material.io/components/progress-indicators/overview࿰…...

菜鸟入门Docker
初始Docker Docker的概念 Docker的用途 DOcke的安装 Docker架构 配置Docker镜像加速器 Docker常用命令 Docker服务相关的命令。 Docker镜像相关的命令 Docker容器相关的命令 容器的数据卷 数据卷的概念和作用 配置数据卷 Docker应用部署 Docker部署mysql Docker…...

什么是单片机?为什么要学习单片机?
实现目标 1、熟悉单片机定义、特点、应用场景、发展历史等; 2、理解为什么要学习单片机?怎样学习单片机? 一、单片机是什么? 1、定义 单片机是集成在一块(单)芯片上的微型计算机。平时我们把 MCU&#x…...

电子发射与气体导电
物理电磁学练习题:电子发射与气体导电 说明: 以下题目考察对电子发射和气体导电基本概念的理解和应用。 1. 解释以下概念: (a) 热电子发射 (b) 光电效应 © 逸出功 (d) 等离子体 2. 比较并对比热电子发射和光电效应的异同。 …...

【数据库】MySQL表的Updata(更新)和Delete(删除)操作
目录 1.Update 案例1:将孙悟空同学的数学成绩变更为 80 分 案例2:将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分 案例3:将总成绩倒数前三的 3 位同学的数学成绩加上 30 分 案例4:将所有同学的语文成绩…...

Unity Adressables 使用说明(六)加载(Load) Addressable Assets
【概述】Load Addressable Assets Addressables类提供了加载 Addressable assets 的方法。你可以一次加载一个资源或批量加载资源。为了识别要加载的资源,你需要向加载方法传递一个键或键列表。键可以是以下对象之一: Address:包含你分配给…...

视频监控系统布局策略:EasyCVR视频汇聚平台构建高效、全面的安全防线
随着科技的飞速发展,视频监控系统已成为现代社会安全防范的重要组成部分,广泛应用于公共场所、企业园区、住宅小区等各个领域。一个科学合理的视频监控系统布局与选型策略,不仅能够显著提升安全监控的效率和效果,还能在关键时刻提…...

Spark的Web界面
http://localhost:4040/jobs/ 在顶部导航栏上,可以点击以下选项来查看不同类型的Spark应用信息: Jobs - 此视图将列出所有已提交的作业,并提供每个作业的详细信息,如作业ID、名称、开始时间、结束时间等。Stages - 此视图可以查…...

语言中的内联
爸爸为了培养孩子的独立能力,会把任务交给孩子并观察孩子做的结果。但有的时候,妈妈看到孩子因为完不成而伤心难过时,会毫不犹豫二话不说帮孩子的事情做掉。这也是内联。 内联和宏 C/C宏可以提供内联同样的作用,没有额外函数调用…...

fail to install hcmon driver问题解决
对我搜集到的解决办法进行总结: 没有删除“C:\Windows\System32\drivers”)下的 hcmon.sys 驱动文件,删除后重启后安装修改了注册表默认下载位置,使用winR输入regedit,将 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion这个路径下的都改为C…...

【NumPy】基础知识
NumPy是Python的第三方库,要使用需要先导入。 import numpy as np 在pycharm中可以通过np.来查看numpy的可用函数。 np.函数名? 查看对应函数的详细信息。 生成NumPy数组 ndarray 多维数组对象 numpy封装了一个新的数据类型ndarray,是一个多维数组对…...

传统CV算法——特征匹配算法
Brute-Force蛮力匹配 Brute-Force蛮力匹配是一种简单直接的模式识别方法,经常用于计算机视觉和数字图像处理领域中的特征匹配。该方法通过逐一比较目标图像中的所有特征点与源图像中的特征点来寻找最佳匹配。这种方法的主要步骤包括: 特征提取ÿ…...

PyInstaller问题解决 onnxruntime-gpu 使用GPU和CUDA加速模型推理
前言 在模型推理时,需要使用GPU加速,相关的CUDA和CUDNN安装好后,通过onnxruntime-gpu实现。 直接运行python程序是正常使用GPU的,如果使用PyInstaller将.py文件打包为.exe,发现只能使用CPU推理了。 本文分析这个问题…...

Apache Pig
目录 一、配置说明1.本地模式2.集群模式 二、pig的数据模型三、pig的数据类型四、惰性执行五、pig的基本语法5.1语法说明5.2案例操作 六、pig的自定义函数 一、配置说明 1.本地模式 操作的是Linux系统文件 pig -x local关键日志 当前处于root目录下 2.集群模式 连接的是…...

axios返回的是promise对象如何处理?
axios返回的是promise对象如何处理? Axios返回的是Promise对象,这意味着可以使用Promise的.then()、.catch()和.finally()方法来处理异步操作的结果。 以下是处理Axios返回Promise对象的几种常见方式: 1、使用.then()处理响应数据…...

归并排序/计数排序
1:归并排序 1.1:代码 void _MergeSort(int* arr, int left, int right, int* tmp) {if (left > right){return;}int mid (left right) / 2; _MergeSort(arr, left, mid, tmp); _MergeSort(arr, mid1, right, tmp); int begin1 left…...

etcdctl defrag 剔除、添加etcd节点
零、准备工作 find / -name etcdctl cp /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/12/fs/usr/local/bin/etcdctl /usr/local/bin/etcdctlalias ec"etcdctl --endpointshttps://127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --…...

计算机网络(二) —— 网络编程套接字
目录 一,认识端口号 1.1 背景 1.2 端口号是什么 1.3 三个问题 二,认识Tcp协议和Udp协议 三,网络字节序 四,socket编程接口 4.1 socket常见API 4.2 sockaddr结构 一,认识端口号 1.1 背景 问题:在进…...