PromQL之函数

news2024/11/17 17:48:52

Prometheus 版本 2.41.0

  1. 平台统一监控的介绍和调研
  2. 直观感受PromQL及其数据类型
  3. PromQL之选择器和运算符
  4. PromQL之函数

PromQL 聚合函数

PromQL 的聚合函数只能用于瞬时向量,支持的聚合函数有:

  • sum 求和
  • min 最小值
  • max 最大值
  • avg 平均值
  • group 分组,并设置值为1
  • stddev 标准差
  • stdvar 标准差异
  • count 计数
  • count_values 对value进行计数
  • bottomk 样本值最小的k个元素
  • topk 样本值最大的k个元素
  • quantile 分布统计

另外通过 without 和 by 可以保留不同纬度的数据。

语法:

<aggr-op> [without|by (<label list>)] ([parameter,] <vector expression>)

或者

<aggr-op>([parameter,] <vector expression>) [without|by (<label list>)]

without

删除指定标签,保留剩余标签

示例:
原始数据:
在这里插入图片描述

删除 instance 标签,保留其他的标签

sum(jvm_memory_used_bytes) without(instance)

在这里插入图片描述
without 不包含标签,与jvm_memory_used_bytes 等价

sum(jvm_memory_used_bytes) without()

在这里插入图片描述

without 生成的是一个基于原始指标聚合计算后的新指标

by

保留指定标签,删除其他标签

示例:
只保留 instance 标签

sum(jvm_memory_used_bytes) by(instance)

在这里插入图片描述
by 不包含标签,跟 sum(jvm_memory_used_bytes) 等价

sum(jvm_memory_used_bytes) by()

在这里插入图片描述

by 生成的是一个基于原始指标聚合计算后的新指标

sum

最常见的聚合函数,将分组中所有值相加并返回。

示例:
计算每个应用的已占用的堆内存和非堆内存,单位MB

sum(jvm_memory_used_bytes) by(application,area) /1024 /1024

在这里插入图片描述
看到consumer 应用的堆占用内存为 141MB,我们不使用by 来查询一下,比较下两者:

sum(jvm_memory_used_bytes{application="consumer",area="heap"}) / 1024 /1024

在这里插入图片描述
同样 consumer 应用的堆占用内存为 141MB

min

返回分组内的最小值作为这个分组的返回值

示例:
返回堆内存占用最小的样本,单位MB

min(jvm_memory_used_bytes{area="heap"}) /1024 /1024

在这里插入图片描述

max

返回分组内最大值

示例:
返回堆内存占用最大的样本,单位MB

max(jvm_memory_used_bytes{area="heap"}) /1024 /1024

在这里插入图片描述

avg

返回分组内时间序列的平均值

示例:
返回应用在1分钟内 堆占用内存的平均值,单位MB

avg(jvm_memory_used_bytes{area="heap"}) without(id) / 1024 /1024

在这里插入图片描述

group

设置分组内时间序列的值为1

示例:

group(jvm_memory_used_bytes{area="heap"}) without(id)

在这里插入图片描述

使用group 可以在只关心分组,而不关注聚合后的值,在这种场景下使用

stddev

标准差,又称为方差,是离均差平方的算术平均数的平方根。在概率统计中,常使用标准差来统计分布程度。

stdvar

在数学中称为方差,用于衡量随机变量或一组数据的离散程度。

count

对分组中的时间序列数目进行求和

quantile

示例:
返回在线微服务的数量

count(up == 1)

在这里插入图片描述

count_values

表示时间序列中每一个样本值出现的次数

示例:
计算 样本值 出现的次数

使用 up == 1, 看到 样本值1 出现了2次

在这里插入图片描述
使用 count_values("count", up == 1) 后的结果如下:

在这里插入图片描述

常用于频率直方图

bottomk

用于对样本值进行排序,然后返回排在后n位的样本值

示例:
返回 接口请求数最多的1次

bottomk(1, http_server_requests_seconds_count)

在这里插入图片描述

bottomk 会对结果升序排列

topk

用来对样本值进行排序,然后返回排在前n位的时间序列

示例:
返回接口请求数最多的1次

topk(1, http_server_requests_seconds_count)

在这里插入图片描述

quantile

用于计算当前样本数据值的分布情况,quantile(分数位),分数位范围大于0,小于1。

示例:
过去1分钟内,90%的接口,每秒请求数的增长速率

quantile(0.9, rate(http_server_requests_seconds_count[1m]))

PromQL 内置函数

Prometheus 提供了大量的内置函数,至2.4.1版本,一共46个函数。

根据函数类型大致可以分成如下几种:

类型名称函数
动态标签label_replace、label_join
数学运算abs、exp、ln、log2、log10、sqrt、ceil、floor、
round、clamp_max、clamp_min
类型转换vector、scalar
时间和日期time、minute、hour、month、year、day_of_month、
day_of_week、days_in_month、timestamp
多对多逻辑运算absent
排序sort、sort_desc
Counterrate、increase、irate、resets
Gaugechanges、deriv、predict_linear、delta、idelta、holt_winters
Histogramhistogram_quantile
时间聚合avg_over_time、min_over_time、max_over_time、sum_over_time、
count_over_time、quantile_over_time、stddev_over_time、stdvar_over_time

label_replace

表示通过正则表达式为时间序列添加额外的标签

语法:label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)

不会删除指定指标,依次对v中的每一条时间序列进行处理,通过regex匹配src_label的值,如果匹配,则将匹配部分的replacement写入dst_label标签,匹配到的值可以用$1,$2 引用,$1 用第一个匹配的子组替换,$2 用第二个匹配到的子组替换。如果正则表达式不匹配,则时间序列不变。

示例:
从up 的 instance 中匹配到IP 地址,并赋值给新的host标签

label_replace(up, "host", "$1", "instance", "(.*):(.*)")

在这里插入图片描述

label_join

将多个标签通过指定分隔符连接起来,写入指定的新标签中

语法:
label_join(v instant-vector, dst_label string, separator string, src_label_1 string, src_label_2 string, …)

示例:
将up指标的 job 和 instance 标签通过 “-” 分隔符连接

label_join(up, "combined", "-", "job", "instance")

在这里插入图片描述

abs

输入一个瞬时向量,返回所有向量样本的绝对值
语法:abs(v instant-vector)

exp

输入一个瞬时向量,返回各个样本值的e的指数值
语法:exp(v instant-vector)

特殊情况:
指数过大,返回+Inf
Exp(+Inf) = +Inf
无法计算指数值,返回NaN
Exp(NaN) = NaN

ln

ln函数的功能与exp函数相反,输入一个瞬时向量,返回样本值的自然对数
语法:ln(v instant-vector)

特殊情况:
ln(+Inf) = +Inf
ln(0) = -Inf
ln(x < 0) = NaN
ln(NaN) = NaN

log2

输入一个瞬时向量,返回样本值的二进制对数
语法:log2(v instant-vector)

log10

输入一个瞬时向量,返回样本值的十进制对数
语法:log10(v instant-vector)

sqrt

输入一个瞬时向量,返回样本值的平方根
语法:sqrt(v instant-vector)

ceil

输入一个瞬时向量,返回样本值向上四舍五入的整数
语法:ceil(v instant-vector)

floor

输入一个瞬时向量,返回样本值向下四舍五入的整数
语法:floor(v instant-vector)

round

用于返回向量中样本值最接近某个整数的值,两个参数,一个接收瞬时向量,另外一个是标量,默认为1,表示样本返回的是最接近1的整数倍的值,也可以指定为小数,表示返回的是最接近它的整数倍的值。

语法:round(v instant-vector, to_nearest=1 scalar)

示例:
在这里插入图片描述

clamp_max

输入一个瞬时向量和标量最大值,如果样本值大于标量最大值max,则返回值max,否则不变,用于限制最大值

语法:clamp_max(v instant-vector, max scalar)

clamp_min

输入一个瞬时向量和标量最小值,如果样本值小于min,则返回min,否则不变,用于限制最小值

语法:clamp_min(v instant-vector, min scalar)

vector

输入一个标量,并返回一个没有标签的标量

语法:vector(s scalar)

在这里插入图片描述

scalar

输入一个瞬时向量,如果具有唯一的时间序列,则返回其值作为一个标量,如果样本数量大于1或者等于0,则返回NaN

语法:scalar(v instant-vector)

示例:
在这里插入图片描述

time

返回时间戳,并不是当前时间,而是计算表达式时的时间

语法:time()

minute

返回当前UTC时间的分钟部分,结果范围0-59

语法:minute(v=vector(time()) instant-vector)

hour

返回当前UTC时间的小时部分,结果范围0-23

语法:hour(v=vector(time()) instant-vector)

month

返回当前UTC时间的月份,结果范围1-12

语法:month(v=vector(time()) instant-vector)

year

返回当前UTC时间的年份

语法:year(v=vector(time()) instant-vector)

day_of_week

返回当前UTC时间的,星期几,结果范围0-6

语法:day_of_week(v=vector(time()) instant-vector)

day_of_month

返回当前UTC时间的,天,结果范围1-31

语法:day_of_month(v=vector(time()) instant-vector)

days_in_month

返回当前UTC时间,给定时间在一个月中的总天数,返回值28-31

语法:days_in_month(v=vector(time()) instant-vector)

timestamp

返回给定向量中每个样本的时间戳,UTC时间

语法:timestamp(v instant-vector)

absent

如果传递给absent函数的向量具有样本数据,则返回空向量,如果没有样本数据,则返回样本值为1

语法:absent(v instant-vector)

示例:
在这里插入图片描述

sort

对向量按元素值升序

语法:sort(v instant-vector)

sort_desc

对向量按元素值降序

rate

计算区间向量v在时间窗口内的平均增长速率

语法:rate(v range-vector)

注意:与聚合函数(比如sum)一起使用时,必须先执行rate,再执行聚合操作。因为重启服务后计数器被重置为0,总和将减少,结果会出现较大的虚假峰值

irate

针对长尾效应提供的高灵敏度函数,用于计算区间向量的增长速率,但是建议在长期告警中使用rate函数,因为irate只能绘制快速变化的计数器

语法:irate(v range-vector)

increase

获取区间向量中第一个和最后一个样本并返回其增长量

语法:increase(v range-vector)

示例:
计算过去一分钟内HTTP请求的增长数
原始数据:
在这里插入图片描述
increase后数据:
在这里插入图片描述

resets

输入一个区间向量,返回一个计数器重置的次数,两个连续样本之间的值的减少被认为是一次计数器重置

语法:resets(v range-vector)

predict_linear

预测时间序列v(区间向量)在t秒后的值,可以对时间序列的变化趋势做出预测

语法:predict_linear(v range-vector, t scalar)

deriv

输入一个区间向量,返回一个瞬时向量,使用简单的线性回归计算区间向量v中各个时间序列的导数

语法:deriv(v range-vector)

delta

输入一个区间向量,返回一个瞬时向量,用于计算一个区间向量v的第一个元素和最后一个元素之间的差值

语法:delta(v range-vector)

idelta

输入一个区间向量,返回一个瞬时向量,计算最新的两个样本值之间的差值

语法:idelta(v range-vector)

holt_winters

基于区间向量v生成时间序列数据平滑值

语法:holt_winters(v range-vector, sf scalar, tf scalar)

changes

输入一个区间向量,返回这个区间向量中每个样本数据值变化的次数(瞬时向量)

语法:changes(v range-vector)

histogram_quantile

从bucket 类型的向量b中计算分位数的样本最大值

语法:histogram_quantile(φ scalar, b instant-vector)

<aggregation>_over_time()

该组函数针对区间向量中的时间序列的值,返回一个瞬时向量

  • avg_over_time(range-vector): 区间向量内每个指标的平均值
  • min_over_time(range-vector): 区间向量内每个指标的最小值
  • max_over_time(range-vector): 区间向量内每个指标的最大值
  • sum_over_time(range-vector): 区间向量内每个指标的和
  • count_over_time(range-vector): 区间向量内样本数据个数
  • quantile_over_time(scalar, range-vector): 区间向量内每个指标的样本数据值分位数
  • stddev_over_time(range-vector): 区间向量内每个指标的总体标准差
  • stdvar_over_time(range-vector): 区间向量内每个指标的总体标准方差
  • last_over_time(range-vector): 区间向量内每个指标的最新样本值
  • present_over_time(range-vector): 区间向量内每个指标的值为1

作者其他文章:
Grafana 系列文章,版本:OOS v9.3.1

  1. Grafana 的介绍和安装
  2. Grafana监控大屏配置参数介绍(一)
  3. Grafana监控大屏配置参数介绍(二)
  4. Grafana监控大屏可视化图表
  5. Grafana 查询数据和转换数据
  6. Grafana 告警模块介绍
  7. Grafana 告警接入飞书通知

Spring Boot Admin 系列

  1. Spring Boot Admin 参考指南
  2. SpringBoot Admin服务离线、不显示健康信息的问题
  3. Spring Boot Admin2 @EnableAdminServer的加载
  4. Spring Boot Admin2 AdminServerAutoConfiguration详解
  5. Spring Boot Admin2 实例状态监控详解
  6. Spring Boot Admin2 自定义JVM监控通知
  7. Spring Boot Admin2 自定义异常监控
  8. Spring Boot Admin 监控指标接入Grafana可视化

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

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

相关文章

Nginx与LUA(5)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e;Nginx诞生以来就获赞无数&#xff0c;反向代理、负载均衡、流量限制与流量扩展都是它的拿手好戏。基本上是互联网应用的主流入口&#xff0c;和计算、即时通讯、存…

python批量下载modis数据(可筛选日期、范围、数据类型)

找了一圈下modis数据的&#xff0c;有的不能空间筛选有的不能下初级产品&#xff08;也可能没找到&#xff09;&#xff0c;不甚满意&#xff0c;自己搞了个 0 前言 用到的主要依赖是selenium&#xff0c;下载网站是https://ladsweb.modaps.eosdis.nasa.gov&#xff0c;环境是…

ensp实现不同VLAN之间的通信

1.VLAN的基本配置 一个简单的VLAN实验&#xff0c;基本配置如图。 其中交换机为S5700。 在只对四台PC配置IP地址&#xff0c;交换机不用配置后&#xff0c;四台PC可以互相ping通。 下面是对交换机配置VLAN的方法 <Huawei>sys #进入系统视图 [Huawei…

钉钉搭和金蝶云星空接口打通对接实战

数据源系统:阿里宜搭宜搭是阿里巴巴自研的基于钉钉和阿里云的低代码平台&#xff0c;可让用户通过简单的拖拽、配置即可完成应用搭建&#xff0c;为每个组织提供低门槛、高效率的数字化业务应用生产新模式。有效缩减企业应用开发时间&#xff0c;助力企业数字化升级。对接目标系…

第四层:友元与函数成员别样定义

文章目录前情回顾友元友元的概念友元的目的友元的关键字友元的两种种用法全局函数做友元类做友元函数成员的别样定义有缘人学友元&#xff0c;急速突破第四层本章知识点&#xff08;图片形式&#xff09;&#x1f389;welcome&#x1f389; ✒️博主介绍&#xff1a;一名大一的…

Python怎么获取节假日信息?

“holidays” 是一个 Python 第三方库&#xff0c;它可以用来解析和处理节假日信息。 该库提供了一系列函数&#xff0c;可以用来检查某一天是否是节假日、获取某一年中所有节假日的列表等。它支持多种国家和地区的节假日&#xff0c;例如美国、加拿大、澳大利亚、英国等。 “…

【软件架构思想系列】分层架构

- 分层架构 -今天谈下架构设计中的分层思想和分层模型。架构思维概述对于架构思维本身仍然是类似系统思维&#xff0c;结构化思维&#xff0c;编程思维等诸多思维模式的一个合集。由于架构的核心作用是在业务现实世界和抽象的IT实现之间建立起一道桥梁&#xff0c;因此…

CUDA编程笔记(4)

文章目录前言1.CUDA的计时程序2.CUDA程序的计时影响GPU加速的关键总结前言 怎么才能看出使用cuda编程&#xff0c;提高了程序的性能&#xff0c;一般都是通过比较程序运行的时间来验证。所以熟悉程序的运行时间的计时&#xff0c;可以查看优化的性能效果。 1.CUDA的计时程序 …

每日亿题(面试题)

每日亿题(面试题) new Fn和new Fn()有什么区别&#xff1f; 1.首先如果是为传参数的情况下结果是相同的 2.如果是获取属性new Fn() 正常执行&#xff0c;而 new Fn 报错 3.不带括号不能给构造函数传参 分析比较 opacity: 0、visibility: hidden、display: none 优劣和适用…

Spring看这一篇文章就够了

第一章 Spring简介 第1节 Spring的介绍 Spring官网地址 1https://spring.ioSpring的介绍 1Spring是一个开放源代码的设计层面框架&#xff0c;他解决的是业务逻辑层和其他各层的松耦合问题&#xff0c;因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003年兴起的一…

4.2w字,详细的带你认识基础I/O【Linux--基础IO】

前言 相信大家最开始都挺疑惑的&#xff0c;什么I/O。在计算机操作系统中&#xff0c;所谓的I/O实则就是输入&#xff08;Input&#xff09;和输出&#xff08;Output&#xff09;&#xff0c;也可以理解为读&#xff08;Read&#xff09;和写&#xff08;Write&#xff09;&…

Linux常用命令——tar命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) tar Linux下的归档使用工具&#xff0c;用来打包和备份。 补充说明 tar命令可以为linux的文件和目录创建档案。利用tar&#xff0c;可以为某一特定文件创建档案&#xff08;备份文件&#xff09;&#xff0c;也…

mysql 基本组成

1 mysql 基本组成 1.1、mysql连接器的工作流程: 1.2、查看连接状态: show processlist; Note:客户端太长时间没动静 就自动断开 这个时间是由wait_timeout参数控制的,默认8h 长连接短链接 长连接是链接成功后,如果客户端持续有请求,则使用同一个链接[尽量使用长连接,因为每次…

组件间通信

1、Vue组件的嵌套关系 1.1、认识组件的嵌套 前面我们是将所有的逻辑放到一个App.vue中&#xff1a; 在之前的案例中&#xff0c;我们只是创建了一个组件App&#xff1b;如果我们一个应用程序将所有的逻辑都放在一个组件中&#xff0c;那么这个组件就会变成非常的臃肿和难以维…

【网络通信】【电信运营商实战工程师】思科设备篇-思科设备园区网实战

电信运营商实战工程师系列文章. 思科设备篇-思科设备园区网实战. 文章目录1. 思科设备链路捆绑实战2. 思科设备VRRP、HSRP实战3. 思科设备ACL实战全集4. 思科设备RIP协议实战5. 思科设备OSPF协议全集-理论6. 思科设备OSPF协议全集-实战1. 思科设备链路捆绑实战 知识点&#xff…

【中科微北斗+GPS模块经纬度数据解析详细教程-附免费代码工程】

中科微北斗GPS模块经纬度数据解析详细教程-附免费代码工程简介准备工作PC端需要用到的工具代码下载地址GD32F103C8T6最小系统板代码实现GD32串口引脚定义如下&#xff1a;串口的初始化串口0初始化代码&#xff1a;串口1初始化代码串口的输入串口0的输入代码如下&#xff1a;串口…

嵌入式Linux-线程的开始

1. 线程的开始 1.1 线程的含义 学习了进程相关的知识内容&#xff0c;对进程有了一个比较全面的认识和理解&#xff0c;从今开始呢&#xff0c;我们要学习一个新的概念&#xff0c;叫做线程&#xff01; 那什么是线程呢? 与进程类似&#xff0c;线程是允许应用程序并发执行…

java中的方法2023016

定义方法&#xff08;VS函数&#xff09;&#xff1a; 方法是类或对象的行为特征的抽象&#xff0c;方法是类或对象最重要的组成部分。但从功能上来看&#xff0c;方法完全类似于传统结构化程序设计里的函数。区别是&#xff1a;Java里的方法不能独立存在&#xff0c;所有的方法…

《精力管理》阅读笔记

目录 什么是精力及如何管理精力 高效表现有节奏——劳逸结合的平衡 管理精力的三个步骤 明确目标——知道什么最重要才能全情投入 正视现实——你的精力管理做得如何 付诸行动——积极仪式习惯的力量 精力管理的四个基本原则 体能精力——为身体添柴加火 情感精力——把…

微信小程序----全局数据共享

1.什么是全局数据共享 全局数据共享&#xff08;又叫做:状态管理&#xff09;是为了解决组件之间数据共享的问题。开发中常用的全局数据共享方案有:Vuex、Redux、MobX等。 2.小程序中的全局数据共享方案 在小程序中&#xff0c;可使用 mobx-miniprogram 配合 mobx-miniprog…