当前位置: 首页 > news >正文

Grafana中的rate与irate以及histogram

用法

rate

rate函数用于计算一个时间序列在给定时间范围内的平均速率。它对每个数据点进行线性插值来计算速率,因此对于平滑和稳定的数据来说,rate是一个不错的选择。语法如下:

rate(metric_name[time_range])
  • metric_name: 指标名称。
  • time_range: 时间范围,例如5m表示过去5分钟。

示例:

rate(http_requests_total[5m])

这个查询返回的是http_requests_total指标在过去5分钟内的平均请求速率。

irate

irate函数用于计算时间序列的瞬时速率。它仅使用时间范围内的最后两个数据点来计算速率,因此对于检测突发变化或短期波动非常有用。语法如下:

irate(metric_name[time_range])
  • metric_name: 指标名称。
  • time_range: 时间范围,例如5m表示过去5分钟。

示例:

irate(http_requests_total[5m])

这个查询返回的是http_requests_total指标在过去5分钟内的瞬时请求速率。

选择rate还是irate

  • 如果你需要一个平滑的平均速率,可以选择rate
  • 如果你需要捕捉短期的突发变化或尖峰,可以选择irate

rate(http_requests_total[5m]) 返回的是 http_requests_total 指标在过去 5 分钟内的平均请求速率,通常可以解释为平均 QPS(每秒请求数)。

histogram_quantile

histogram_quantile 函数的语法如下:

histogram_quantile(quantile, sum(rate(metric_name_bucket[time_range])) by (le))
  • **quantile**: 要计算的分位数,取值范围是 0 到 1,例如 0.5 表示 50th percentile(中位数)。
  • **metric_name_bucket**: 直方图指标的名称,_bucket 是其后缀,用于表示不同的桶(bucket)。
  • **time_range**: 用于计算速率的时间范围,例如 5m 表示过去 5 分钟。
  • **le**: 桶的标签,用于按桶进行分组。

示例
假设你有一个名为 http_request_duration_seconds_bucket 的直方图指标,它记录了 HTTP 请求的延迟,并且包含以下桶:

  • http_request_duration_seconds_bucket{le="0.1"}
  • http_request_duration_seconds_bucket{le="0.2"}
  • http_request_duration_seconds_bucket{le="0.5"}
  • http_request_duration_seconds_bucket{le="1"}
  • http_request_duration_seconds_bucket{le="2"}
  • http_request_duration_seconds_bucket{le="+Inf"}

要计算 95th percentile(即 0.95 分位数)的请求延迟,你可以使用以下查询:

histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
查询解释
1. rate(http_request_duration_seconds_bucket[5m])
  • 功能:计算每个桶在过去 5 分钟内的请求速率。
  • 过程:对每个桶的计数器数据进行速率计算,这表示每秒钟有多少请求落在该桶内。
2. sum(rate(http_request_duration_seconds_bucket[5m])) by (le)
  • 在 Prometheus 直方图中,le 标签用于表示桶(bucket)的上限,而不是简单的指示标签。le 是 “less than or equal” 的缩写,用来指定每个桶能容纳的最大值。因此,le="0.1" 表示这个桶包含了所有延迟时间小于或等于 0.1 秒的请求。
  • 功能:将速率按桶的标签 le 进行分组求和。
  • 过程:将每个桶的速率汇总,以便能够按桶的上限(le 标签)进行分组。le 标签表示每个桶的最大延迟值。例如,le="0.1" 表示 延迟在0.1 秒以内的请求。
3. histogram_quantile(0.95, ...)
  • 功能:计算指定分位数(0.95,即 95th percentile)的值。
  • 过程
    1. 累积分布:首先,根据每个桶的速率计算累积分布。累积分布函数 (CDF) 表示小于或等于某个值的请求的比例。
    2. 插值计算:然后,根据累积分布函数的结果插值计算 95th percentile 的值。也就是说,它在累积分布中找到 0.95 位置对应的延迟值。这个位置表示有 95% 的请求延迟小于或等于该值。

函数计算原理

rate

rate(http_requests_total[5m]) 返回的是 http_requests_total 指标在过去 5 分钟内的平均请求速率,通常可以解释为平均 QPS(每秒请求数)。

计算方法

假设 http_requests_total 是一个计数器,记录了从某个时间点开始累计的 HTTP 请求总数。计数器会随着每个新的 HTTP 请求递增。rate 函数通过以下步骤计算过去 5 分钟的平均速率:

  1. 选择指定时间范围内的所有数据点(例如过去 5 分钟内的所有数据点)。
  2. 进行线性插值,计算每个数据点之间的速率。
  3. 取这些速率的平均值,得到整个时间范围内的平均速率。
示例

假设我们有以下数据点在过去 5 分钟内:

  • 在时间 T0,http_requests_total 的值是 1000。
  • 在时间 T1(1 分钟后),http_requests_total 的值是 1100。
  • 在时间 T2(2 分钟后),http_requests_total 的值是 1150。
  • 在时间 T3(3 分钟后),http_requests_total 的值是 1200。
  • 在时间 T4(4 分钟后),http_requests_total 的值是 1250。
  • 在时间 T5(5 分钟后),http_requests_total 的值是 1300。

rate 函数会对这些数据点进行线性插值,并计算平均速率:

  • 速率=Δ值 / Δ时间

每分钟的速率分别为:

  • 从 T0 到 T1:1100−1000/60=1.67 QPS
  • 从 T1 到 T2:1150−1100/60=0.83 QPS
  • 从 T2 到 T3:1200−1150/60=0.83 QPS
  • 从 T3 到 T4:1250−1200/60=0.83 QPS
  • 从 T4 到 T5:1300−1250/60=0.83 QPS

然后,取这些速率的平均值:

  • 平均速率=(1.67+0.83+0.83+0.83+0.83)/5=1.00 QPS

irate

irate(http_requests_total[5m]) 返回的是 http_requests_total 指标在过去 5 分钟内的瞬时请求速率。与 rate 不同,irate 只使用时间范围内的最后两个数据点来计算速率,因此它更适合捕捉短期内的突发变化或尖峰。

计算方法
  1. 选择过去 5 分钟内的最后两个数据点。
  2. 计算这两个数据点之间的增量。
  3. 将增量除以这两个数据点之间的时间间隔,以得到瞬时速率。
示例

假设在时间 T1 和 T2 是过去 5 分钟内的最后两个数据点:

  • 在时间 T1 时,http_requests_total 的值是 1000。
  • 在时间 T2 时,http_requests_total 的值是 1300。
  • T1 和 T2 之间的时间间隔是 1 分钟(60 秒)。

那么,irate 的计算过程如下:

  • 瞬时速率= (1300 - 1000) / 60 秒 = 5 QPS

histogram_quantile

计算方法

假设你有以下桶的速率数据(单位是每秒请求数):

  • le="0.1": 10 req/s
  • le="0.2": 15 req/s
  • le="0.5": 20 req/s
  • le="1": 25 req/s
  • le="2": 30 req/s
  • le="+Inf": 35 req/s

计算过程如下:

  1. 计算累积分布
    • le="0.1": 10 req/s
    • le="0.2": 10 + 15 = 25 req/s
    • le="0.5": 25 + 20 = 45 req/s
    • le="1": 45 + 25 = 70 req/s
    • le="2": 70 + 30 = 100 req/s
    • le="+Inf": 100 + 35 = 135 req/s
  2. 计算总请求数:135 req/s
  3. 计算 95th percentile 的请求数
    • 95% 的请求数 = 135 * 0.95 = 128.25 req/s
  4. 查找对应的桶
    • le="1": 70 req/s < 128.25 req/s
    • le="2": 100 req/s < 128.25 req/s
    • le="+Inf": 135 req/s > 128.25 req/s
    • 95th percentile 的请求数为 128.25 req/s,落在 le="2" 桶和 le="+Inf" 桶之间。
  5. 插值计算
    • 因为 le="2" 桶已经包含了绝大部分请求,实际插值计算会让我们确定 95th percentile 的延迟值接近 le="2" 桶的上限(即 2 秒)。实际的插值计算会让我们在 le="2" 桶的上限附近找到精确的值。
插值计算公式中的“上限”

在给出的案例中:

  • le="2" 桶的上限是 2 秒。
  • le="+Inf" 桶的上限理论上是无限大,但在实际计算中,我们用 le="2" 的上限值来做插值,因为 le="+Inf" 的上限并不提供具体的延迟值。
插值计算的详细步骤

我们已经知道:

  • le="2" 桶的累积请求数是 100 req/s。
  • le="+Inf" 桶的累积请求数是 135 req/s。
  • 95th percentile 的请求数是 128.25 req/s。

我们需要在 le="2" 桶和 le="+Inf" 桶之间插值。由于 le="+Inf" 桶的具体上限不明确,我们通常将计算结果定在 le="2" 桶的上限附近。

  1. 计算差异
    • le="2" 桶的请求数:100 req/s
    • le="+Inf" 桶的请求数:135 req/s
    • 差异:135 req/s - 100 req/s = 35 req/s

计算插值

  • 95th percentile 的请求数是 128.25 req/s,落在 le="2" 桶和 le="+Inf" 桶之间。
  • 计算 95th percentile 在这两个桶之间的位置,可以用以下插值公式:
  • 延迟值=2+((128.25−100)/(135−100)×(上限−2))

在这里,上限是指 le="+Inf" 桶的理论上限,但实际插值会以 le="2" 桶的上限(即 2 秒)作为基准。

实际插值步骤

计算插值比例

  • 比例=(128.25−100)/(135−100)=28.25/35≈0.807

计算延迟值

  • 延迟值=2+(0.807×(上限−2))

由于 le="+Inf" 的上限理论上是无限大,实际中我们将插值结果定在 le="2" 的上限附近,即 2 秒。

插值结论

在实际情况下,因为 le="+Inf" 桶的上限是无限大,实际插值计算中我们通常将 95th percentile 的延迟值定在 le="2" 桶的上限附近,即 2 秒。因此:

  • 插值结果:95th percentile 的延迟值在 le="2" 桶的上限(2 秒)附近。

插值计算的主要目的是找出更精确的延迟值,但由于 le="+Inf" 的上限不具体,结果一般在 le="2" 桶的上限附近。

示例

假设我们有以下桶的定义:

  • http_request_duration_seconds_bucket{le="0.1"}: 包含所有延迟小于或等于 0.1 秒的请求。
  • http_request_duration_seconds_bucket{le="0.2"}: 包含所有延迟小于或等于 0.2 秒的请求。
  • http_request_duration_seconds_bucket{le="0.5"}: 包含所有延迟小于或等于 0.5 秒的请求。
  • http_request_duration_seconds_bucket{le="1"}: 包含所有延迟小于或等于 1 秒的请求。
  • http_request_duration_seconds_bucket{le="+Inf"}: 包含所有延迟小于或等于无限大(即所有请求)的数据。

在直方图中,每个桶的 le 标签提供了该桶的延迟上限,使得我们能够理解请求的延迟分布情况。例如,如果你看到 http_request_duration_seconds_bucket{le="0.5"} 中的请求数为 1000,http_request_duration_seconds_bucket{le="1"} 中的请求数为 2000,那么可以得出结论:在 0.5 秒和 1 秒之间的请求数是 1000。

总结

le 标签在 Prometheus 直方图中表示桶的最大延迟值,以 “less than or equal” 的方式来说明。这样设计可以更精确地反映数据分布,并方便进行数学计算和分析。

相关文章:

Grafana中的rate与irate以及histogram

用法 rate rate函数用于计算一个时间序列在给定时间范围内的平均速率。它对每个数据点进行线性插值来计算速率&#xff0c;因此对于平滑和稳定的数据来说&#xff0c;rate是一个不错的选择。语法如下&#xff1a; rate(metric_name[time_range])metric_name: 指标名称。time…...

什么是网络安全态势感知

态势感知是一种基于环境的、动态、整体地洞悉安全风险的能力&#xff0c;是以安全大数据为基础&#xff0c;从全局视角提升对安全威胁的发现识别、理解分析、响应处置能力的一种方式、最终是为了决策与行动&#xff0c;是安全能力的落地 态势感知的重要性 随着网络与信息技术的…...

php 在app中唤起微信app进行支付,并处理回调通知

<?phpnamespace app\api\controller;use think\facade\Db; use think\facade\Log;class Wxzf {...

高效同步与处理:ADTF流服务在自动驾驶数采中的应用

目录 一、ADTF 流服务 1、流服务源&#xff08;Streaming Source&#xff09; 2、流服务汇&#xff08;Streaming Sink&#xff09; 二、数据链路 1、数据管道&#xff08;Data Pipe&#xff09; 2、子流&#xff08;Substreams&#xff09; 3、触发管道&#xff08;Tri…...

【Arduino】ATmega328PB 连接 LSM6DS3 姿态传感器,并读数据(不确定 ESP 系列是否可行,但大概率是可行的)

总览 1.初始化 ATmega328PB&#xff0c;默认大家已经完成了 328 的配置准备工作&#xff0c;已经直接能够向里面写入程序 2.接线&#xff0c;然后验证 mega328 的 I2C 设备接口能否扫描到 LSM6DS3 3.编写代码&#xff0c;上传&#xff0c;查看串口数据。完成。 一、初始化 AT…...

live2d + edge-tts 优雅的实现数字人讲话 ~

震惊&#xff01;live2d数字人竟开口说话 ~ 之前有想做数字人相关项目&#xff0c;查了一些方案。看了一些三方大厂的商用方案&#xff0c;口型有点尴尬&#xff0c;而且很多是采用视频流的方案&#xff0c;对流量的消耗很大。后来了解了live2d 技术&#xff0c;常在博客网页上…...

二进制安装php

下载php二进制包&#xff1a; 官网地址&#xff1a;https://www.php.net/releases/ PHP: Releaseshttps://www.php.net/releases/在里边可以选择自己要下载的包进行下载&#xff1b; 下载完成后进行解压&#xff1a; tar xvzf php-7.3.12.tar.gz 解压后 进入目录进行预编…...

旧版Pycharm支持的python版本记录

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请贴上原博文链接&#xff1a;旧版Pycharm支持的python版本记录-CSDN博客 前言&#xff1a;近期由于打算研究GitHub上一个开源量化交易平台开发框架&#xff0c;但是该框架是基于python3.10的版本开发&#xff0c;所…...

java实现七牛云内容审核功能,文本、图片和视频的内容审核(鉴黄、鉴暴恐、敏感人物)

目录 1、七牛云内容审核介绍 2、查看内容审核官方文档 2.1、文本内容审核 2.1.1、文本内容审核的请求示例 2.1.2、文本内容审核的返回示例 2.2、图片内容审核 2.2.1、请求参数 2.2.2、返回参数 2.3、视频内容审核 3、代码实现 3.1、前期代码准备 3.2、文本内容审核…...

C++面试基础系列-struct

系列文章目录 文章目录 系列文章目录C面试基础系列-struct1.C中struct2.C中struct2.1.同名函数2.2.typedef定义结构体别名2.3.继承 3.总结3.1.C和C中的Struct区别 4.struct字节对齐5.struct与const 关于作者 C面试基础系列-struct 1.C中struct struct里面只能放数据类型&#…...

代码随想录算法训练营 | 动态规划 part05

完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 例子&#xff1a; 背包可容纳重…...

英特尔XPU大模型应用创新

...

仿Muduo库实现高并发服务器——socket网络通信模块

本项目就是基于TCP网络通信搭建的。 TCP: 客户端&#xff1a;socket(),connect(). 服务端&#xff1a;socket(),bind(),listen(),accept(). 下面代码就是对原生API网络套接字的封装。需要熟悉原生API网络套接字接口。 下面这段代码&#xff0c;没什么好讲的&#xff0c;就不…...

模型 神经网络(通俗解读)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。仿脑智能&#xff0c;深度学习&#xff0c;精准识别。 1 神经网络的应用 1.1 鸢尾花分类经典问题 神经网络的一个经典且详细的经典应用是鸢尾花分类问题 。主要是通过构建一个神经网络模型来自动区分…...

事务的使用

1.如何使用事务: 1.1.事务的完成过程&#xff1a; 1.步骤1&#xff1a;开启事务2.步骤2&#xff1a;一系列的DML操作3.步骤3&#xff1a;事务结束状态&#xff1a;提交事务(COMMIT)&#xff0c;中止事务&#xff08;事务回滚ROLLBACK&#xff09; 1.2.事务分类&#xff1a; …...

【免费】企业级大模型应用推荐:星环科技无涯·问知

无涯问知是星环科技发布的大模型应用系统&#xff0c;那么我们先简单了解下星环科技吧&#xff01; 星环科技&#xff08;股票代码&#xff1a;688031&#xff09;致力于打造企业级大数据和人工智能基础软件&#xff0c;围绕数据的集成、存储、治理、建模、分析、挖掘和流通等数…...

从〇 搭建PO模式的Web UI自动化测试框架

Page Object模式简介 核心思想 将页面元素和操作行为封装在独立的类中&#xff0c;形成页面对象&#xff08;Page Object&#xff09;。每个页面对象代表应用程序中的一个特定页面或组件。 优点&#xff1a; 代码复用性高 页面对象可以在多个测试用例中复用。 易于维护 …...

在Ubuntu中重装Vscode(没有Edit Configurations(JSON)以及有错误但不标红波浪线怎么办?)

在学习时需要将vscode删除重装&#xff0c;市面上很多方法都不能删干净&#xff0c;删除之后拓展都还在。因此下面的方法可以彻底删除。注意&#xff0c;我安装时使用的是snap方法。 如果你的VScode没有Edit Configurations(JSON)&#xff0c;以及有错误但不标红波浪线的话&…...

Oracle 用户-表空间-表之间关系常用SQL

问题&#xff1a; 当某一个表数据量特别大&#xff0c;突然插入数据一直失败&#xff0c;可能是表空间不足&#xff0c;需要查看表的使用率 用户-表空间-表之间关系&#xff1a;用户可以有多个表空间&#xff0c;表空间可以有多个表&#xff0c;表只能拥有一个表空间和用户 1.…...

家政服务管理系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;管理阿姨管理&#xff0c;家政公司管理&#xff0c;服务项目管理&#xff0c;家政预约管理&#xff0c;评价管理&#xff0c;留言板管理&#xff0c;系统管理 微信端账号功能包括…...

【算法】并查集的介绍与使用

1.并查集的概论 定义&#xff1a; 并查集是一种树型的数据结构&#xff0c;用于处理一些不相交集合的合并及查询问题&#xff08;即所谓的并、查&#xff09;。比如说&#xff0c;我们可以用并查集来判断一个森林中有几棵树、某个节点是否属于某棵树等。 主要构成&#xff1a; …...

Shell——运算符

在 Shell 编程中&#xff0c;运算符用于执行各种类型的操作&#xff0c;如算术运算、字符串比较、文件测试等。以下是 Shell 中常用的运算符分类和示例&#xff1a; 1. 算术运算符 Shell 中使用 expr 或 $(( ... )) 来进行算术运算。 : 加法-: 减法*: 乘法/: 除法%: 取余**:…...

SweetAlert2

1. SweetAlert2 SweetAlert2是一个基于JavaScript的库, 用于在网页上替换标准的警告框(alert), 确认框(confirm)和提示框(prompt), 并提供更加美观和用户友好的界面.需要在项目中引入SweetAlert2, 可以通过CDN链接或者将库文件下载到你的项目中来实现这一点. 通过CDN引入:<…...

c语言中比较特殊的输入函数

目录 一.getchar()函数 1.基本功能 2.使用方法 (1).读取单个字符 (2).读取多个字符&#xff08;直到遇到换行符&#xff09; (3).处理输入中的空白字符 3.返回值 4.应用场景 5.注意事项 二.fgets()函数 1.函数原型 2.工作原理 3.使用示例 (1).从标准输入读取一行…...

Java版自动化测试之Selenium

1. 准备 编程语言&#xff1a;Java JDK版本&#xff1a;17 Maven版本&#xff1a;3.6.1 2. 开始 声明&#xff1a;本次只测试Java的Selenium自动化功能 本次示例过程&#xff1a;打开谷歌游览器&#xff0c;进入目标网址&#xff0c;找到网页的输入框元素&#xff0c;输入指…...

【计算机网络】——计算机网络的性能指标

速率&#xff08;speed&#xff09; 连接在计算机网络上的主机在数字信道上传送数据的速率。 影响条件&#xff1a; 带宽&#xff08;band width&#xff09; 指在固定的时间可传输的资料数量 单位&#xff1a;bps或HZ 吞吐量&#xff08;throughtput&#xff09; 指对网络、…...

MongoDB数据类型介绍

MongoDB作为一种高性能、开源、无模式的文档型数据库&#xff0c;支持丰富的数据类型&#xff0c;以满足各种复杂的数据存储需求。本文将详细介绍MongoDB支持的主要数据类型&#xff0c;包括数值类型、字符串类型、日期和时间类型、布尔类型、二进制类型、数组、对象以及其他扩…...

【SpringBoot】SpringBoot 中 Bean 管理和拦截器的使用

目录 1.Bean管理 1.1 自定义Bean对象 1.2 Bean的作用域和生命周期 2.拦截器的使用 1.Bean管理 默认情况下&#xff0c;Spring项目启动时&#xff0c;会把我们常用的Bean都创建好放在IOC容器中&#xff0c;但是有时候我们自定义的类需要手动配置bean&#xff0c;这里主要介绍…...

Spring IoCDI(中)--IoC的进步

通过上文的讲解和学习, 我们已经知道了Spring IoC 和DI的基本操作, 接下来我们来系统的学习Spring IoC和DI 的操作. 前⾯我们提到IoC控制反转&#xff0c;就是将对象的控制权交给Spring的IOC容器&#xff0c;由IOC容器创建及管理对 象&#xff0c;也就是bean的存储。 1. Bean的…...

读软件开发安全之道:概念、设计与实施02经典原则

1. CIA原则 1.1. 软件安全都构建在信息安全的三大基本原则之上&#xff0c;即机密性(confidentiality)、完整性(integrity)和可用性(availability) 1.2. 双方交换的数据 1.2.1. 从技术上看&#xff0c;端点之间的数据交换本身就会削弱交互的机密性 1.2.2. 隐藏通信数据量的一…...