8-云原生监控体系-PromQL-函数

news2024/11/16 22:44:58

Prometheus支持几个函数来操作数据。

文章目录

  • 1. 函数语法解释
  • 2. count(v instant-vector)
  • 3. topk(n, v instant-vector)
  • 4. bottomk(n, v instant-vector)
  • 5. increase(v range-vector)
  • 6. rate(v range-vector)
  • 7. rate 和 increase
  • 8. irate(v range-vector)
  • 9. predict_linear(v range-vector, t scalar) 预测统计【重要】
  • 10. absent(v instant-vector)
  • 11. absent_over_time(v range-vector)
  • 12. histogram_quantile(φ scalar, b instant-vector)
  • 13. changes()
  • 14. 其他
    • 14.1 label_join()
    • 14.2 label_replace()
    • 14.3 time()
    • 14.4 vector(s scalar)
    • 14.5 timestamp()
    • 14.6 year(v=vector(time()) instant-vector)
    • 14.7 day_of_week()
    • 14.8 day_of_month()
    • 14.9 day_of_year(v=vector(time()) instant-vector)
    • 14.10 days_in_month(v=vector(time()) instant-vector)
    • 14.11 delta(v range-vector) 计算差值
    • 14.12 idelta(v range-vector)
    • 14.13 minute(v=vector(time()) instant-vector)
    • 14.14 hour(v=vector(time()) instant-vector)
    • 14.15 month(v=vector(time()) instant-vector)
    • 14.16 sum(v instant-vector)
    • 14.17 sgn(v instant-vector)
    • 14.18 sort(v instant-vector)
    • 14.19 sort_desc(v instant-vector)
    • 14.20 ceil(v instant-vector) 不常用
    • 14.21 floor(v instant-vector) 不常用
  • 15. `<aggregation>_over_time()`

1. 函数语法解释

Promethues 的函数作用于 及时向量和范围向量。

举例说明, 函数 increase 的语法为: increase(v range-vector),其中 increase 为函数, v 为函数的参数,就是一个查询表达式获取到的具体数值, range-vector 是参数 v 的类型, 基本上类型有:

  • instant-vector 即时向量,就是当前时间的数据,例如 up
  • range-vector 范围向量, 就是一个指定范围内的数据,例如 up[5m]

2. count(v instant-vector)

统计获取到结果的条目数
在这里插入图片描述

3. topk(n, v instant-vector)

从给定的一组数值中取出最高的前 n 位, v 应该是聚合表达式中的 即时向量。

常用于瞬时报警,不用于观察曲线图
在这里插入图片描述

4. bottomk(n, v instant-vector)

从给定的一组数值中取出最低的后 n 位, v 应该是聚合表达式中的 即时向量。
在这里插入图片描述

5. increase(v range-vector)

计算范围向量 v 中时间序列的增长量。就是计算在一定时间范围内,某个监控指标的值总共增长了多少。

比如我在 13:20 统计 5分钟内某个指标的增加量是 10,表示 5分钟之前 13:15 到 13:20,这个指标的值增加了 5 个,如果一开始指标的值是 3,那个 13:20 的时候这个值应该是 8。

函数 increase只能与随时间而不断变化的数据一起使用。

示例:希望获取 最近 5分钟内,发送给 Prometheus URL “/api/v1/query” 的 HTTP 请求且返回成功的 请求,总共增长了多少个。

为了对比,首先查询 Prometheus 最近 5 分钟的数据。

prometheus_http_requests_total{code="200",handler="/api/v1/query"}[5m]

在这里插入图片描述
之后再真正计算请求增长量:

increase(prometheus_http_requests_total{code="200",handler="/api/v1/query"}[5m])

367 到 373 ,共有 7个
在这里插入图片描述

6. rate(v range-vector)

计算范围向量中时间序列的每秒平均增长率。

以下示例表达式返回范围向量中的每个时间序列在过去 1 分钟内的每秒请求监控指标数据的速率:

rate(promhttp_metric_handler_requests_total[1m])

在这里插入图片描述

(60s / 15s) / 60s = 0.066/s
每秒增加 0.066 次请求
15 s 是全局设置中查询指标的间隔时间 scrape_interval 的值

函数 rate 最适合于报警,比如请求错误增长率,磁盘使用增长率等。

请注意,当将 rate() 与聚合运算符(例如 sum())或随时间聚合的函数(任何以_over_time 结尾的函数)组合时,始终先使用 rate(),然后再聚合。否则,当目标重新启动时,rate() 无法检测计数器重置。

它的语法糖是使用如下公式计算的:

最近指定时间范围内比之前增加了多少量 / 时间范围内的总秒数 = 增加了多少量/秒

7. rate 和 increase

  • rate 适合用于数据采集频率高的数据,比如 CPU、内存、磁盘 IO,网络 IO

  • increase 适合数据采集频率低的数据,比如每 5 分钟采集一次数据。
    这两个函数比较适合使用在监控上,比较重要。

  • rate 计算的是一定时间内每秒的增长量

  • increase 计算的是一定时间内增量的总和

rateincrease 都有首尾效应,如果希望更精确,可以使用 irate, 但 irate 不适合分析长期趋势的数据,也不适合在告警规则中使用,告警规则而应该使用 rate

8. irate(v range-vector)

计算的是取在一个指定时间范围内开头和结尾的两个数据进行计算每秒增长率,不适合分析长期趋势,也不适合用作告警规则中使用。
irate(v range-vector) 计算范围向量中时间序列的每秒即时增长率。这是基于最后两个数据点。单调的中断(例如目标重新启动导致的计数器重置)会自动调整。例如:

时间序列(转换成具体时间)数据
12:000
12:0550
12:10中断
12: 15150

上面表格中 4 个时间点,其中 1 个时间点服务中断了,没有数据,使用 irate 计算的话,会取 0 和 150 进行计算,总共增长了 150 个,在用 150 除以 15分钟 * 60 秒= 0.5个 ,结果增长率就是每秒增长 0.5 个。

示例:

irate(promhttp_metric_handler_requests_total[1m])

irate() 只能在绘制易波动、快速移动的 counter 时使用。将速率用于警报和缓慢移动的 counter,因为完全由罕见峰值组成的图形很难读取。

请注意,将 irate() 与聚合运算符(例如 sum())或随时间聚合的函数(任何以_over_time 结尾的函数)组合时,始终先使用 irate),然后再聚合。否则,irate() 无法在目标重新启动时检测计数器重置。

9. predict_linear(v range-vector, t scalar) 预测统计【重要】

可以通过一个范围向量 v 返回的数据样本,预测指标在 t 秒后的值。它基于简单线性回归的方式,对时间窗口内的样本数据进行统计,从而可以对时间序列的变化趋势做出预测。该函数的返回结果不带有指标名称,只有标签列表。

通常用于对服务器磁盘使用率的预测。

根据最近 1 天的根分区剩余容量的数据变化,预测 4 个小时之后 根分区的剩余容量是否会是10m。

predict_linear(node_filesystem_avail_bytes{mountpoint="/"}[1d], 4 * 3600) < 10485760

10. absent(v instant-vector)

用于判断写的语句是否有错误,或者是否返回了数据,就是编写的表达式如果能获取到数据,就返回空,表示表达式正确。否则就返回 1 ,就是表达式存在问题,比如表达式书写错误,或者要统计的数据没有匹配到,或者不符合判断条件。若果被采集数据的服务器挂了,那也会返回 1。

一般用于判断数据是否在正常采集中。

当监控度量指标时,如果获取到的样本数据是空的, 使用 absent 方法对告警是非常有用的。例如:

原始数据
在这里插入图片描述
使用 absent 后返回空数据
在这里插入图片描述

在原始数据中并没有标签 code201 的数据
在这里插入图片描述
使用 absent 后返回值 1
在这里插入图片描述

11. absent_over_time(v range-vector)

absent_over_time(v range-vector) 如果传递给它的范围向量具有任何数据,则返回一个空向量,如果传递给它的范围向量没有数据,则返回值为 1。

这对于在给定指标名称和标签组合在一段时间内不存在时发出警报非常有用。

absent_over_time(promhttp_metric_handler_requests_total{code="201"}[1m])
# => {code="201"}  1

absent_over_time(promhttp_metric_handler_requests_total{code="200"}[1m])
# => 空

在这里插入图片描述

12. histogram_quantile(φ scalar, b instant-vector)

根据经典直方图或原生直方图计算φ-分位数(0≤φ≤1)

b 中的浮点样本被认为是一个或多个经典直方图的每个桶中的观测计数。每个浮点样本必须有一个标签 le,其中标签值表示 bucket 的包含上限。(没有此类标签的浮点样本将被忽略。)其他标签和度量名称用于识别属于每个经典直方图的桶。直方图度量类型自动提供具有 _bucket 后缀和适当标签的时间序列。
b 中的原生直方图样本被单独处理为单独的直方图,以从中计算分位数。

只要不出现命名冲突,b 就可以包含经典直方图和原生直方图的混合。

使用 rate() 该函数指定分位数计算的时间窗口。

示例:直方图度量称为http_request_duration_seconds。要计算过去10分钟内请求持续时间的第90个百分点,请使用以下表达式:

histogram_quantile(0.9, rate(http_request_duration_seconds_bucket[10m]))

http_request_duration_seconds 为单位计算每个标签组合的分位数。要聚合,请在 rate()函数周围使用sum() 聚合器。由于 histogram_quantile() 需要 le 标签,因此它必须包含在by子句中。以下表达式按 job 聚合第90个百分

histogram_quantile(0.9, sum by (job, le) (rate(http_request_duration_seconds_bucket[10m])))

要聚合所有内容,请仅指定标签:le

histogram_quantile(0.9, sum by (le) (rate(http_request_duration_seconds_bucket[10m])))

histogram_quantile() 函数通过假设桶内的线性分布来插值分位数值。最高存储桶的上限必须为+Inf。(否则,返回 NaN 。)如果分位数位于最高存储桶中,则返回第二高存储桶的上限。如果最低桶的上限大于 0,则假定最低桶的下限为0。在这种情况下,在该桶内应用通常的线性插值。否则,对于位于最低存储桶中的分位数,将返回最低存储桶的上限。

如果b有0个观察值,则返回NaN。如果b包含少于两个桶,则返回NaN。对于φ<0,将返回-Inf。对于φ>1,返回+Inf。对于φ=NaN,返回NaN。

13. changes()

changes(v range-vector)

对于每个输入时间序列,以即时向量的形式返回其值在提供的时间范围内更改的次数。

在这里插入图片描述

14. 其他

14.1 label_join()

label_join(v instant vector, dst_label string, separator string, src_label_1 string,src_label_2 string,)

对于 v 中每个时间序列中含有的标签 src_label,使用逗号连接所有src_label 的所有值,使用 separator string 指定的符号拼接起来, 并将拼接后的值赋值给标签 dst_label。此函数中可以有任意数量的 src_labels,最终返回的指标数据中 src_labeldst_label 都会在结果中。

示例:
原数据中含有标签 instance, job, group

up{job="beijing"}
=>
up{group="beijing", instance="10.10.40.200:9111", job="beijing"}   1
up{group="beijing", instance="10.10.40.61:9111", job="beijing"}    0
up{group="beijing", instance="10.10.40.62:9111", job="beijing"}    1

下面表达式的意思是 将返回的每条数据中标签 "instance", "job" 的值,使用引文逗号 , 进行拼接,之后将拼接好的值赋值给新的标签 msg

label_join(up{job="beijing"},"msg", ",", "instance", "job")

返回的结果:

up{group="beijing", instance="10.10.40.200:9111", job="beijing", msg="10.10.40.200:9111,beijing"}   1
up{group="beijing", instance="10.10.40.61:9111", job="beijing", msg="10.10.40.61:9111,beijing"}     0
up{group="beijing", instance="10.10.40.62:9111", job="beijing", msg="10.10.40.62:9111,beijing"}     1

14.2 label_replace()

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

对于 v 中的每个时间序列,将正则表达式 regexsrc_label 的值匹配。
如果匹配,则返回的时间序列中标签 dst_label 的值将是 replacement 的扩展,以及输入中的原始标签。
在正则表达式中捕获组可以用$1$2等引用。如果正则表达式不匹配,则返回时间序列不变。

示例:

label_replace(up{job="beijing"},"msg", "服务器:$1", "instance", "(10.10.*)") 

在这里插入图片描述

14.3 time()

返回自1970年1月1日以来的秒数。

14.4 vector(s scalar)

将标量s作为没有标签的向量返回。

在这里插入图片描述

14.5 timestamp()

timestamp(v instant-vector)返回给定即时向量的每个样本的当前时间戳,自世界时1970年1月1日以来的秒数。

在这里插入图片描述

14.6 year(v=vector(time()) instant-vector)

以UTC为单位返回给定时间的年份。

在这里插入图片描述

在这里插入图片描述

14.7 day_of_week()

一周的星期几
day_of_week(v=vector(time()) instant-vector)
以 UTC 格式返回每个给定时间的星期几。返回值从 0 到 6,其中 0 表示星期日等。

14.8 day_of_month()

一个月中的哪一天
day_of_month(v=vector(time()) instant-vector)
以 UTC 格式返回每个给定时间的月份中的某一天。返回值介于 1 到 31 之间。
在这里插入图片描述

14.9 day_of_year(v=vector(time()) instant-vector)

一年中的哪一天

以 UTC 格式返回每个给定时间的一年中的日期。非闰年的返回值介于 1 到 365 之间,在闰年中,返回值为 1 到 366。

14.10 days_in_month(v=vector(time()) instant-vector)

返回某个月有多少天
返回当月中每个给定时间的 UTC 天数。返回值介于 28 到 31 之间。

14.11 delta(v range-vector) 计算差值

计算范围向量中每个时间序列元素的第一个值和最后一个值之间的差值,返回一个具有给定增量和等效标签的即时向量。
增量被外推以覆盖范围向量选择器中指定的全部时间范围,因此即使样本值都是整数,也可以获得非整数结果。v

以下示例表达式返回从现在到 24 小时前的磁盘根分区的可用容量差:

delta(node_filesystem_avail_bytes{mountpoint="/"}[1d])

计算公式: 当前时间的值 - 过去时间的值
可用容量少了 0.68MB左右。
在这里插入图片描述

14.12 idelta(v range-vector)

计算范围向量v中最后两个样本之间的差值,返回具有给定delta和等效标签的即时向量。

idelta只能与仪表一起使用

14.13 minute(v=vector(time()) instant-vector)

以UTC为单位返回每个给定时间的一小时内的几分钟。返回的值从0到59。

14.14 hour(v=vector(time()) instant-vector)

返回 UTC 中每个给定时间的一天中的小时数。返回值介于 0 到 23 之间。
在这里插入图片描述

14.15 month(v=vector(time()) instant-vector)

返回UTC中每个给定时间的月份。返回值从1到12,其中1表示1月等。

14.16 sum(v instant-vector)

把所有返回的指标的值加起来

14.17 sgn(v instant-vector)

返回一个向量,所有采样值都转换为其符号,定义如下:如果v为正,则为1;如果v为负,则为-1;如果v等于零,则为0。
可以用来判断指标的值是正数、负数或零。

14.18 sort(v instant-vector)

按照从小到大对返回的即时向量值排序。升序

14.19 sort_desc(v instant-vector)

按照从大到小对返回的即时向量值排序。降序

14.20 ceil(v instant-vector) 不常用

将返回的所有值向上舍入到最接近的整数。
2.77 =》 3

14.21 floor(v instant-vector) 不常用

将 v 所有元素的样本值向下舍入为最接近的整数。
2.77 =》 2

15. <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):指定区间中值的φ-quantile(0 ≤ φ ≤ 1)。
  • stddev_over_time(range-vector):指定区间内值的总体标准差。
  • stdvar_over_time(range-vector):指定区间中值的总体标准方差。
  • last_over_time(range-vector):指定区间内最近时间的值,一般就是最后一个值距离当前时间最近。

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

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

相关文章

HubSpot流量转化:从访客到客户的转化策略

在当今数字化时代&#xff0c;企业营销获客的关键在于如何将网站访客转化为实际客户。作为HubSpot的合作伙伴&#xff0c;我们深知HubSpot软件在流量转化方面的强大功能。今天运营坛将带领大家深入探讨HubSpot流量转化的核心原理&#xff0c;并介绍如何利用个性化营销策略、构建…

【C++】友元--最全解析(友元是什么?我们应该如何理解友元?友元可以应用在那些场景?)

目录 一、前言 二、友元是什么&#xff1f; 三、友元的感性理解和分类 &#x1f95d;友元的感性理解 &#x1f34b;友元的三种分类 ✨友元 --- 全局函数 ✨友元 --- 成员函数 ✨友元 --- 类 四、友元函数的应用场景 &#x1f34d;操作符重载 :"<<" 与…

【苍穹外卖】HttpClient-快速理解入门

目录 HttpClient-快速理解&入门1. 需求2. 如何使用3. 具体示例4. 大致优点5. 大致缺点 HttpClient-快速理解&入门 1. 需求 在平常访问服务器里面的资源的时候&#xff0c;我们通常是通过浏览器输入网址&#xff08;或者在浏览器点击某个连接&#xff09;这种方式&…

更换本地yum源的步骤

更换本地yum源的流程与命令&#xff1a;

Idea热部署插件JRebel,修改代码无需重启

1. 介绍 JRebel是一个实用的插件&#xff0c;它可以让你在不重启服务器的情况下&#xff0c;修改Java程序并即时生效。相信大家都有这样的经历&#xff1a;每次修改代码后都需要重新编译、打包、部署&#xff0c;然后重启服务器&#xff0c;这个过程非常耗时且繁琐。但是&…

二叉树的实现(前序、中序、后序)(全面)

上一篇我们学习的二叉树的理论&#xff0c;知道了什么是二叉树之后&#xff0c;我们来实现一棵二叉树&#xff0c;二叉树经常考的是前中后序的遍历&#xff0c;这里我们多实现一些功能。 1.二叉树功能 二叉树的实现充分利用了分治思想 1.前序遍历 2.中序遍历 3.后序遍历 4.树的…

Vision Pro零基础教程专栏:校准、对比与结果分析工具

文章目录 CogCalibCheckerboardTool 校准工具介绍校准的基本方法与过程校准的基本作用标定片标定板定义标定板分类基础版标定板校准版标定板DataMatrix代码标定板特殊功能标定板材质分类 使用步骤注意 CogPatInspectTool 对比工具介绍CogPatInspectTool示例图使用场景使用步骤参…

JumpServer搭建堡垒机实战

文章目录 第一步、下载安装第二步、访问异常处理【1】docker方式拉取失败 JumpServer是运维人员可连接内部服务器上进行操作&#xff0c;支持Linux等操作系统的管理工具。 第一步、下载安装 curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/…

Opencv Python图像处理笔记一:图像、窗口基本操作

文章目录 前言一、输入输出1.1 图片读取显示保存1.2 视频读取保存1.3 文件读取保存 二、GUI2.1 窗口2.2 轨迹条2.3 画图2.4 鼠标回调 三、图像入门操作3.1 颜色空间转化3.2 通道分离合并3.3 添加边框3.4 算数操作 四、二值化4.1 普通4.2 自适应4.3 Otsu 参考 前言 随着人工智能…

227基于matlab的作业调度问题

基于matlab的作业调度问题。采用遗传算法&#xff0c;解决作业调度问题。一共三个作业&#xff0c;每个作业有不同的时间长度和紧急程度&#xff0c;超过时间会有惩罚措施。通过遗传算法计算出最好的作业安排&#xff0c;使得惩罚最小&#xff0c;获益最大。最终结果通过GUI用甘…

了解IPS和IDS:这5个差异将改变你的安全观念!

IPS 代表 入侵防御系统&#xff08;Intrusion Prevention System&#xff09;&#xff0c;它是 IDS 的进一步发展&#xff0c;不仅具备检测攻击的能力&#xff0c;还能在检测到攻击后主动采取措施阻止攻击。IPS 通常部署在防火墙和网络设备之间&#xff0c;能够深度感知并检测流…

第八周学习笔记DAY.1-异常

本课目标 了解异常概念 理解Java异常处理机制 会捕捉异常 会抛出异常 了解Java异常体系结构 什么是异常 异常是指在程序的运行过程中所发生的不正常的事件&#xff0c;它会中断正在运行的程序 生活中&#xff0c;根据不同的异常进行相应的处理&#xff0c;而不会就此中断…

支持中文繁体,支持同时配置并启用飞书和Lark认证,JumpServer堡垒机v3.10.8 LTS版本发布

2024年4月22日&#xff0c;JumpServer开源堡垒机正式发布v3.10.8 LTS版本。JumpServer开源项目组将对v3.10 LTS版本提供长期的支持和优化&#xff0c;并定期迭代发布小版本。欢迎广大社区用户升级至v3.10 LTS最新版本&#xff0c;以获得更佳的使用体验。 在v3.10.8 LTS版本中&…

【js】解决读取文件源内容总是得到默认index.html

在项目开发中&#xff0c;资源的获取都可以通过网络&#xff0c;所以获取文件内容&#xff0c;只需要将文件地址作为请求发送即可 读取文件源内容 const path 资源地址&#xff08;必须是绝对路径&#xff09;fetch(path).then((response) > {if (!response.ok) {throw ne…

我与C++的爱恋:日期计算器

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 朋友们大家好啊&#xff0c;在我们学习了默认成员函数后&#xff0c;我们通过上述内容&#xff0c;来实现一个简易的日期计算器。 ​ ​ 头文件的声明 #pragma once #incl…

计算机服务器中了locked勒索病毒怎么办,locked勒索病毒解密工具流程步骤

随着网络技术的不断应用与发展&#xff0c;越来越多的企业离不开网络&#xff0c;网络大大提升了企业的办公效率水平&#xff0c;也为企业的带来快速发展&#xff0c;对于企业来说&#xff0c;网络数据安全成为了大家关心的主要话题。近日&#xff0c;云天数据恢复中心接到多家…

Spring - 2 ( 14000 字 Spring 入门级教程 )

一&#xff1a;Spring Web MVC⼊⻔ Spring Web MVC 是⼀个 Web 框架&#xff0c;简称之为: Spring MVC 要真正的理解什么是 Spring MVC&#xff1f;我们⾸先要搞清楚什么是 MVC&#xff1f; 1.1 MVC 定义 MVC 是 Model View Controller 的缩写&#xff0c;它是软件⼯程中的…

丰田是如何用精益理念改变制造业的?

丰田&#xff0c;这个全球知名的汽车制造商&#xff0c;不仅以其高质量的产品赢得了消费者的信赖&#xff0c;更以其独特的精益理念深刻改变了整个制造业的面貌。那么&#xff0c;丰田究竟是如何用精益理念引领制造业变革的呢&#xff1f;天行健精益管理培训公司解析如下&#…

了解BACnet的对象模型 (三)

文章目录 前言18个对象BACnet 对象的属性设备对象&#xff08;Device&#xff09;的属性输入输出值对象类型及其属性 在代码中的表达Device对象的属性模拟输入对象的属性 小结 前言 在楼宇自控网络中&#xff0c;各种设备之间要进行数据交换&#xff0c;为了能够实现设备的互操…

[C++][算法基础]求组合数(II)

给定 &#x1d45b; 组询问&#xff0c;每组询问给定两个整数 &#x1d44e;&#xff0c;&#x1d44f;&#xff0c;请你输出 的值。 输入格式 第一行包含整数 &#x1d45b;。 接下来 &#x1d45b; 行&#xff0c;每行包含一组 &#x1d44e; 和 &#x1d44f;。 输出格…