运维别卷系列 - 云原生监控平台 之 04.prometheus 查询语句 promql 实践

news2024/11/24 15:39:59

文章目录

    • @[toc]
    • PromQL 简介
      • 什么是时间序列
    • PromQL 数据类型
      • 即时向量 Instant vector
      • 范围向量 Range vector
        • Time Durations
        • Offset modifier
        • @ modifier
      • 浮点值 Scalar
      • 字符串 String
    • PromQL FUNCTIONS
      • floor()
      • irate()
      • rate()
      • round()
      • sort()
      • sort_desc()
    • PromQL 运算符
      • 算术运算符
      • 比较运算符
      • 聚合运算符

  • QUERYING PROMETHEUS
  • QUERY EXAMPLES

PromQL 简介

  • Prometheus provides a functional query language called PromQL (Prometheus Query Language) that lets the user select and aggregate time series data in real time. The result of an expression can either be shown as a graph, viewed as tabular data in Prometheus’s expression browser, or consumed by external systems via the HTTP API.
  • Prometheus 提供了一种称为 PromQL(Prometheus 查询语言)的功能查询语言,允许用户实时选择和聚合时间序列数据。表达式的结果可以显示为图形,在 Prometheus 的表达式浏览器中查看为表格数据,也可以通过 HTTP API 由外部系统使用。

什么是时间序列

  • 同一指标和同一组标记维度的时间戳值流。Prometheus 将所有数据存储为时间序列。
  • 时间序列 = 指标名称{label_name="label_value"}
  • PromQL 执行出来的每一行,都属于时间序列,即使指标名称是相同的,但是 label 肯定是不同的

在这里插入图片描述

PromQL 数据类型

在 Prometheus 的表达式语言中,表达式或子表达式的计算结果可以达到以下四种类型之一

即时向量 Instant vector

Instant vector selectors

即时向量:一组时间序列,每个时间序列包含一个样本,所有样本共享相同的时间戳

  • 三种查询组合:

只使用标签名称,如:node_memory_MemAvailable_bytes

在这里插入图片描述

只使用 label,如:{instance="192.168.11.167:9100"}

在这里插入图片描述

标签名称加 label,如:node_memory_MemAvailable_bytes{instance="192.168.11.167:9100"}

如果有多个 label 可以写成 node_memory_MemAvailable_bytes{instance="192.168.11.167:9100",app="node-exporter"},用逗号分隔多个 label

在这里插入图片描述

  • Instant vector 支持匹配运算,也只是使用正则表达式来匹配
  • 正则表达式匹配是完全锚定的。
    • 匹配项 env=~"foo" 被视为 env=~"^foo$"

=:选择与提供的字符串完全相等的标签。

这个上面已经展示过了,这里就不展示了

!=:选择不等于提供的字符串的标签。

node_disk_read_time_seconds_total{device!="dm-0"}

在这里插入图片描述

=~:选择与所提供字符串正则表达式匹配的标签。

node_disk_read_time_seconds_total{device=~"sd.*"}

在这里插入图片描述

!~:选择与提供的字符串正则表达式不匹配的标签。

node_disk_read_time_seconds_total{device!~"sr.*|dm.*"}

在这里插入图片描述

  • 指标名称不得是关键字 boolonignoringgroup_leftgroup_right 之一。以下表达是非法的:on{}
    • 此限制的解决方法是使用 __name__ 标签:{__name__="on"}

范围向量 Range vector

Range Vector Selectors

范围向量:一组时间序列,包含每个时间序列随时间变化的数据点范围

  • 在 即时向量(Instant vector) 的基础上,后面加上 [持续时间] 以指定应为每个生成的范围向量元素获取多长时间的时间值。范围是一个闭合区间,即时间戳与范围任一边界重合的样本仍包含在选择中。
Time Durations

Time Durations

  • 持续时间(Time Durations)指定为一个数字。必须使用整数时间。
  • 持续时间可以通过串联进行组合。单位必须按从长到短的顺序排列。给定单位在一段时间内只能出现一次。例如 1h30m,不能使用 1.5h。
  • 即时向量(Instant vector)后面跟以下单位之一:
  • ms:毫秒
  • s:秒
  • m:分钟
  • h:小时
  • d:天(假设一天总是有 24 小时)
  • w:星期(假设一周总是有 7 天)
  • y:年(假设一年总是有 365 天)
    • 对于一年中的几天,闰日被忽略,相反,一分钟,闰秒被忽略

过去五分钟内的一组样本,@后面的是时间戳,是毫秒级别的

node_disk_read_time_seconds_total{device!~"sr.*|dm.*"} [5m]

在这里插入图片描述

Offset modifier

Offset modifier

offset 修饰符允许更改查询中单个即时和范围向量的时间偏移量。

当前时间起,五分钟前的时间序列

node_disk_read_time_seconds_total{device!~"sr.*|dm.*"} offset 5m

在这里插入图片描述

@ modifier

@ modifier

@ 修饰符允许更改查询中单个即时和范围向量的计算时间。提供给 @ 修饰符的时间是一个 unix 时间戳,并用浮点数文字描述。

查看 2024-05-04 21:35:16 这个时候的值,时间戳的单位是秒

node_disk_read_time_seconds_total{device!~"sr.*|dm.*"} @ 1714829716

在这里插入图片描述

浮点值 Scalar

标量:一个简单的数值浮点值

在这里插入图片描述

字符串 String

字符串:一个简单的字符串值;当前未使用

在这里插入图片描述

PromQL FUNCTIONS

FUNCTIONS

Prometheus 有很多内置的函数,感兴趣的,可以看看官方文档,这里就挑几个用的比较多的函数

floor()

样本值向下舍入到最接近的整数。

上面 @ modifier 这块的 PromQL 取的值是一堆小数点,加上 floor() 函数之后,就变成整数了(从 1.5050000000000001 变成了 1

floor(node_disk_read_time_seconds_total{device!~"sr.*|dm.*"} @ 1714829716)

在这里插入图片描述

irate()

计算范围向量中时间序列的每秒瞬时增长率。这是基于最后两个数据点。单调性的中断(例如由于目标重新启动而导致的计数器复位)会自动调整。

以下示例表达式返回范围向量中每个时间序列最多 20 分钟的 HTTP 请求的每秒速率:irate(prometheus_http_requests_total[20m])

在这里插入图片描述

rate()

计算范围向量中时间序列的每秒平均增长率。单调性的中断(例如由于目标重新启动而导致的计数器复位)会自动调整。此外,计算外推到时间范围的末端,允许漏掉刮擦或刮擦周期与范围的时间段不完美对齐。

以下示例表达式返回过去 20 分钟内每个时间序列在范围向量中测量的每秒 HTTP 请求速率:rate(prometheus_http_requests_total [20m])

在这里插入图片描述

round()

样本值四舍五入到最接近的整数。通过四舍五入来解决关系。可选的 to_nearest 参数允许指定样本值应舍入到的最接近倍数。这个倍数也可能是一个分数。

上面 @ modifier 这块的 PromQL 取的值是一堆小数点,加上 round() 函数之后,就变成整数了(从 1.5050000000000001 变成了 2

round(node_disk_read_time_seconds_total{device!~"sr.*|dm.*"} @ 1714829716)

在这里插入图片描述

sort()

返回按样本值升序排序的向量元素。只能用在即时向量,用在范围向量会报错:parse error: expected type instant vector in call to function "sort_desc", got range vector

在这里插入图片描述

sort_desc()

sort 相同,但按降序排序。

在这里插入图片描述

PromQL 运算符

算术运算符

运算符运算作用
+加法
-减法
*乘法
/除法
%取模
^

计算内存使用率

((node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Buffers_bytes - node_memory_Cached_bytes) / node_memory_MemTotal_bytes ) * 100

在这里插入图片描述

比较运算符

运算符运算作用
==等于
!=不等于
>大于
<小于
>=大于等于
<=小于等于

内存使用率大于 10% 的

((node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Buffers_bytes - node_memory_Cached_bytes) / node_memory_MemTotal_bytes ) * 100 > 10

在这里插入图片描述

聚合运算符

运算符运算作用
sum()对样本值求和
min()求取样本值中的最小者
max()求取样本值中的最大者
avg()对样本值求平均值
group()结果向量中的所有值均为 1
stddev()对样本值求标准差,以帮助用户了解数据的波动大小(或称之为波动程度)
stdvar()对样本值求方差,它是求取标准差过程中的中间状态
count()对分组内的时间序列进行数量统计
count_values()对分组内的时间序列的样本值进行数量统计,即等于某值的样本个数
bottomk()按样本值计算的最小 k 个元素
topk()按样本值计算的最大 k 个元素
quantile()计算维度的 φ 分位数 (0 ≤ φ ≤ 1)
  • 这些运算符可用于聚合所有标签维度,也可以通过包含 withoutby 子句来保留不同的维度。这些子句可以在表达式之前或之后使用。
    • without 从结果向量中删除列出的标签,而所有其他标签保留在输出中。
    • by 反其道而行之,删除 by 子句中未列出的标签,即使它们的标签值在向量的所有元素之间都相同。

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

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

相关文章

web安全学习笔记(15)

记一下第25-26课的内容。弱口令爆破的四种模式与判断成功失败的三种方案&#xff1b;爆破中的验证码拦截错误次数IP限制密码加密绕过 IP获取的原理以及绕过CDN获取客户真实IP 一、弱口令的分类 1.常规弱口令&#xff1a;如123456&#xff0c;666666&#xff0c;888888等 2.…

网络安全等级保护在工业控制系统中的应用

工业控制系统(Industrial Control Systems,ICS)&#xff0c;是由各种自动化控制组件和实时数据采集、监测的过程控制组件共同构成。其组件包括数据采集与监控系统(SCADA)、分布式控制系统(DCS)、可编程逻辑控制器(PLC)、远程终端(RTU)、智能电子设备(IED)&#xff0c;以及确保各…

jspXMl标记语言基础

1.打开命令框进入数据库 打开eclipse创建需要连接的项目 粘贴驱动程序 查看驱动器 使用sql的包 int代表个 conlm代表列名 <%page import"java.sql.ResultSet"%> <%page import"java.sql.Statement"%> <%page import"java.sql.Connect…

Elasticsearch 实现word、pdf、txt、excel文档内容快速检索(保姆级教程)

本文主要讲解ES如何从提取文档中提取内容&#xff08;word、pdf、txt、excel等文件类型&#xff09;&#xff0c;实现快速检索文档内容实现。 特别说明一下&#xff0c;为什么用7.10.0版本&#xff0c;因为在项目中除了精确匹配的要求&#xff0c;也会有模糊查询&#xff08;关…

合并K个升序链表

题目 解法一 优先级队列 思想 将每个链表中的一个节点存放到优先级队列中&#xff0c;本题采用小根堆&#xff0c;将小根堆中的根节点取出&#xff0c;插入到最终的链表中&#xff0c;并且将该节点在原链表中的下一个节点插入小根堆中&#xff08;需要向下调整&#xff09;&a…

Day_5

1. Apache ECharts Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表 官网地址&#xff1a;https://echarts.apache.org/zh/index.html 入门案例 快速入门&#x…

LearnOpenGL(十八)之面剔除

一、面剔除 对于一个3D立方体&#xff0c;无论我们从哪个方向&#xff0c;最多只能同时看到3个面。如果我们能够以某种方式丢弃另外几个看不见的面&#xff0c;我们就能省下超过50%的片段着色器执行数&#xff01; 这正是面剔除(Face Culling)所做的。OpenGL能够检查所有面向…

ClassificationPrimitive 内部原理

ClassificationPrimitive 内部原理 发明 ClassificationPrimitive的真是个天才。其原理是利用 webgl 的模板缓冲区实现。 渲染两次, 首先是绘制模板, 然后绘制真正的内容。 示意图: function createClass() {const { program, uniforms } WebGLProgram.buildPrograms(gl, …

PMR-440N7Q韩国施耐德三和相序继电器EOCR-PMR

韩国施耐德三和EOCR继电器PMR-440N7Q PMR-440-N 直流电动机保护器:DCL、DOCR-S/H 欠电流继电器:EUCR-3C 交流电压继电器:EOVR、EVR-PD、EVR-FD、EUVR 韩国三和EOCR电动机保护器:EOCR-SS、EOCR-SS1/SS2、EOCR-AR、EOCR-ST、EOCR-SP、EOCR-SP1/SP2、EOCR-SE、EOCR-SE2/SE PMR-44…

会员网站如何创建具有不同仪表盘结构的用户帐户页面

用户帐户页面是中央用户仪表盘&#xff0c;用户可以在其中添加和编辑信息、发布和编辑帖子以及保存收藏夹项目。本教程介绍如何使用“内容”和“重写”模板模式设置帐户页面、为帐户页面创建子页面以及设置个人资料菜单等。 在本教程中&#xff0c;我们将介绍如何使用招聘网站…

Netty的组件和设计

目录 Channel、EventLoop和ChannelFuture Channel接口 EventLoop接口 ChannelFuture接口 ChannelHandler和ChannelPipeline ChannelHandler接口 ChannelPipeline接口 更加深入地了解ChannelHandler 编码器和解码器 抽象类SimpleChannelInboundHandler 引导 从高层次…

vue网页端控制台展示独有标记

效果展示 实现步骤 1. 新建js文件 定义一个类 用于提供控制台打印日志显示样式的方法 src\libs\util.log.js class Logger {// 定义静态方法static typeColor(type "default") {let color "";switch (type) {case "default":color "#3…

Lambda 表达式详解

LAMBDA ⚪ λ 希腊字母表中排序第十一位的字母, 英语名称为Lambda ⚪ 避免匿名内部类定义过多 ⚪ 其实质属于函数式编程的概念 ⚪ 也可称为闭包 ⚪ Lambda允许把一个函数作为方法的参数&#xff08;函数作为参数传递进方法中&#xff09;。 Lambda是在jdk8之后出现的所以现…

Xed编辑器开发第一期:使用Rust从0到1写一个文本编辑器

这是一个使用Rust实现的轻量化文本编辑器。学过Rust的都知道&#xff0c;Rust 从入门到实践中间还隔着好几个Go语言的难度&#xff0c;因此&#xff0c;如果你也正在学习Rust,那么恭喜你&#xff0c;这个项目被你捡到了。本项目内容较多&#xff0c;大概会分三期左右陆续发布&a…

WebLogic SSL应用

SSL 安全套接字层(SSL)是通过在客户端和Web服务器端之间进行身份验证,并对双方交换的数据进行加密,从而提供安全连接。 验证类型: 单向:客户端验证Web服务器端证书 双向:客户端验证Web服务器证书, Web服务器验证客户端证书 Weblogic Server12c 支持 SSL 3.0 和 TLS1.0 …

HCIP【Hybird实验】

目录 一、实验拓扑图&#xff1a; 二、实验要求&#xff1a; 三、实验思路&#xff1a; 四、实验过程&#xff1a; 1、配置PC的IP地址&#xff08;不用配置网关&#xff0c;这个拓扑图没有使用到三层设备&#xff09; 2、交换机配置 3、PC间进行测试&#xff1a; 一、实…

如何设计实用的ITSM自助服务台

在现代IT服务管理&#xff08;ITSM&#xff09;领域中&#xff0c;自助服务台已成为IT运维环境的核心组件。它作为企业内部信息中心与其他部门用户之间的桥梁&#xff0c;一个以用户为中心的平台&#xff0c;更注重用户的自主性和自助能力&#xff0c;使用户能够直接访问所需的…

ModuleNotFoundError: No module named ‘openpyxl‘的解决方案

问题描述&#xff1a; ModuleNotFoundError: No module named ‘openpyxl’ 这个错误表示你的 Python 环境中没有安装 openpyxl 这个模块。openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。 解决方案&#xff1a; 要解决这个问题&#xff0c;你需…

第十四届蓝桥杯大赛软件赛国赛C/C++ 大学 B 组 抓娃娃

//前缀和 #include<bits/stdc.h> using namespace std; #define int long long const int n1e611; int a,b,c,d[n],l,r; signed main() {ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>a>>b;map<int,int>t;for(int i1;i<a;i){cin>…

PCIe协议之-TLP Header详解(二)

✨前言&#xff1a; 在PCIe中&#xff0c;存在几种不同类型的请求&#xff0c;主要包括IO(Request)请求、存储器(Request)请求和配置(Request)请求。这些请求类型允许CPU与连接在PCIe总线上的设备进行通信和控制。 &#x1f31f;1. IO(Request)请求 定义与作用: IO请求&…