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

文章目录

    • @[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.mzph.cn/news/838029.shtml

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

相关文章

TortoiseGit的安装

TortoiseSvn和TortoiseGit都是针对代码进行版本管理的工具&#xff0c;又俗称小乌龟&#xff0c;简洁而可视化的操作界面&#xff0c;免去繁琐的命令行输入。只需要记住常用的几个操作步骤就能快速上手。 TortoiseGit安装 1、TortoiseGit作为git的版本管理工具 &#xff0c;但…

无感自动透明加密系统

无感透明加密系统是一种高级的数据安全技术&#xff0c;它在不影响用户正常操作的前提下&#xff0c;对指定的文件或数据进行自动加密和解密。这种系统设计的目的是为了提高信息安全级别&#xff0c;确保敏感信息在存储和传输过程中的保密性&#xff0c;同时又不会给合法用户的…

5.9网络协议

由网卡发送数据通过网线进行发送&#xff0c;当网卡接收到信号以后将数据传给内核数据区&#xff0c;然后由操作系统交给相应的进程。 将数据进行发送的时候需要借助于网线实现&#xff0c;这个时候会出现当传输的数据比较远的时候就借助于中继器将信号进行再生扩大&#xff0…

FedDML:Federated Mutual Learning

这篇把DML运用到FL上 论文地址:arvix code: 作者git 贡献 我们针对三种异质性(DOM)提出了一种新颖的联邦学习范式,称为联邦相互学习(FML)。 首先,FML 处理数据和目标通过使每个客户能够训练个性化模型来实现异质性。 从OH的意义上来说,DH对服务器有害,但对客户端有…

STL—string类(1)

一、string类 1、为什么要学习string&#xff1f; C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP&#xff08;面向对象…

爱校对新功能上线:领导人讲话和职务排序校对

我们很高兴地宣布&#xff0c;爱校对网站正式推出两项新功能&#xff1a;领导人讲话校对和领导人职务排序校对。这些新功能旨在帮助用户更准确地引用和整理领导人讲话内容&#xff0c;以及正确排列领导人的职务顺序。 领导人讲话校对 在撰写报告或文章时&#xff0c;引用领导…

气膜建筑使用寿命由什么决定—轻空间

气膜建筑作为一种新型建筑结构&#xff0c;以其独特的优点在全球范围内逐渐普及。其使用寿命是投资者和用户关注的关键问题。气膜建筑的使用寿命主要由以下几个方面决定&#xff1a; 1. 膜材 膜材是气膜建筑的核心组成部分&#xff0c;其质量直接影响到建筑的使用寿命。以下是影…

智能网红主播直播手机:助您轻松卖货、卖团购卷、拓客利器!

在当下快速发展的电商行业中&#xff0c;直播销售已经成为无可忽视的一大趋势。智能网红主播直播手机的出现&#xff0c;让人们无需拥有专业设备和经验&#xff0c;便可轻松参与直播销售&#xff0c;享受销售乐趣。本文将介绍智能网红主播直播手机的操作简单、易上手以及其在卖…

JAVA二手车交易二手车市场系统源码支持微信小程序+微信公众号+H5+APP

二手车交易二手车市场系统&#xff1a;重塑购车新体验 随着汽车消费市场的日益成熟&#xff0c;二手车交易逐渐成为消费者购车的新选择。为了提供更加便捷、透明、安全的二手车交易环境&#xff0c;我们推出了“二手车交易二手车市场系统”&#xff0c;旨在为买卖双方搭建一个…

新书速览|Django 5 Web应用开发实战

构建未来&#xff0c;用Django 5打造全新Web应用 本书内容 《Django 5 Web应用开发实战》集Django架站基础、项目实践、开发经验于一体&#xff0c;是一本从零基础到精通Django Web企业级开发技术的实战指南。《Django 5 Web应用开发实战》内容以Python 3.x和Django 5版本为基础…

JavaScript循环结构

JS循环结构 1 while结构2 for循环3 foreach循环 1 while结构 几乎和JAVA一致 代码 /* 打印99 乘法表 */var i 1;while(i < 9){var j 1;while(j < i){document.write(j"*"i""i*j" ");j;}document.write("<hr/>");i…

深度学习设计模式之简单工厂模式

文章目录 前言一、简单工厂设计模式的作用&#xff1f;二、详细分析1.核心组成2.实现步骤3.示例代码4.优缺点优点缺点 5.使用场景 总结 前言 本文主要学习简单工厂设计模式&#xff0c;这个设计模式主要是将创建复杂对象的操作单独放到一个类中&#xff0c;这个类就是工厂类&a…

物联网D3——按键控制LED、光敏传感蜂鸣器

按键控制LED 按键抖动&#xff0c;电平发生变化&#xff0c;可用延时函数抵消按键抖动对系统的影响 传感器电路图 按键电路图 c语言对应类型 “_t”后缀表示使用typedef重命名的数据类型 枚举类型 #include<iostream> using namespace std; //定义枚举类型 typedef enu…

基于springboot实现的在线动漫信息平台

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

vue2 结合iview和百度地图API实现电子围栏

vue2 结合iview和百度地图API实现电子围栏 实现在地图上绘制电子围栏并自定义电子围栏样式&#xff0c;还可以标记中心点 1.百度地图API相关JS引用 <script src"//api.map.baidu.com/api?typewebgl&v1.0&ak百度地图官网申请的ak"></script>//…

【JVM】调优工具

这里简单介绍一下各种调优用到的工具 一&#xff0c;环境准备 首先我们需要准备好Java环境&#xff0c;和win上的jdk环境&#xff08;图形化界面如jconsole只有jdk中有&#xff09;。 有这样一个类Prolem&#xff0c;每个线程都会带来100个垃圾对象&#xff0c;线程new完100…

翻译《The Old New Thing》- What does the CS_OWNDC class style do?

What does the CS_OWNDC class style do? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20060601-06/?p31003 Raymond Chen 2006年06月01日 简要 本文讨论了CS_OWNDC窗口类样式的影响&#xff0c;它让窗口管理器为窗口创建一个永久的设…

品牌银饰售卖|基于SSM+vue的品牌银饰售卖平台的设计与实现(源码+数据库+文档)

品牌银饰售卖平台 目录 基于SSM&#xff0b;vue的品牌银饰售卖平台的设计与实现 一、前言 二、系统设计 三、系统功能设计 1前台功能模块 2后台功能模块 5.2.1管理员功能模块 5.2.2用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题…

Redission分布式锁 - 抢课系统

使用Redission分布式锁与Kafka消息队列&#xff0c;实现学生抢课系统&#xff08;高并发秒杀场景&#xff09;。 目录 一、思路1.为频繁访问的信息设置缓存&#xff08;1&#xff09;登陆&#xff08;2&#xff09;课程任务信息&#xff08;3&#xff09;用户抢课记录 2.消息队…

知识图谱开发日志

应用于应用环境的配置.测试.发布 假如你写了一个web,并且测试调试都没有问题 并且,你想发给你的朋友,导师,或者部署到远程云服务器上 那么,你需要配置相同的软件,比如数据库,web服务器,必要的插件,库,etc…但这并不一定能保证软件的正常运行,因为别人可能使用完全不同的操作系统…