哈尔滨网站建设论坛,家在深圳光明业主论坛,上什么网站做会计教育,找工程项目去哪个平台用法
rate
rate函数用于计算一个时间序列在给定时间范围内的平均速率。它对每个数据点进行线性插值来计算速率#xff0c;因此对于平滑和稳定的数据来说#xff0c;rate是一个不错的选择。语法如下#xff1a;
rate(metric_name[time_range])metric_name: 指标名称。time…用法
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{le0.1}http_request_duration_seconds_bucket{le0.2}http_request_duration_seconds_bucket{le0.5}http_request_duration_seconds_bucket{le1}http_request_duration_seconds_bucket{le2}http_request_duration_seconds_bucket{leInf}
要计算 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” 的缩写用来指定每个桶能容纳的最大值。因此le0.1 表示这个桶包含了所有延迟时间小于或等于 0.1 秒的请求。功能将速率按桶的标签 le 进行分组求和。过程将每个桶的速率汇总以便能够按桶的上限le 标签进行分组。le 标签表示每个桶的最大延迟值。例如le0.1 表示 延迟在0.1 秒以内的请求。
3. histogram_quantile(0.95, ...)
功能计算指定分位数0.95即 95th percentile的值。过程 累积分布首先根据每个桶的速率计算累积分布。累积分布函数 (CDF) 表示小于或等于某个值的请求的比例。插值计算然后根据累积分布函数的结果插值计算 95th percentile 的值。也就是说它在累积分布中找到 0.95 位置对应的延迟值。这个位置表示有 95% 的请求延迟小于或等于该值。
函数计算原理
rate
rate(http_requests_total[5m]) 返回的是 http_requests_total 指标在过去 5 分钟内的平均请求速率通常可以解释为平均 QPS每秒请求数。
计算方法
假设 http_requests_total 是一个计数器记录了从某个时间点开始累计的 HTTP 请求总数。计数器会随着每个新的 HTTP 请求递增。rate 函数通过以下步骤计算过去 5 分钟的平均速率
选择指定时间范围内的所有数据点例如过去 5 分钟内的所有数据点。进行线性插值计算每个数据点之间的速率。取这些速率的平均值得到整个时间范围内的平均速率。
示例
假设我们有以下数据点在过去 5 分钟内
在时间 T0http_requests_total 的值是 1000。在时间 T11 分钟后http_requests_total 的值是 1100。在时间 T22 分钟后http_requests_total 的值是 1150。在时间 T33 分钟后http_requests_total 的值是 1200。在时间 T44 分钟后http_requests_total 的值是 1250。在时间 T55 分钟后http_requests_total 的值是 1300。
rate 函数会对这些数据点进行线性插值并计算平均速率
速率Δ值 / Δ时间
每分钟的速率分别为
从 T0 到 T11100−1000/601.67 QPS从 T1 到 T21150−1100/600.83 QPS从 T2 到 T31200−1150/600.83 QPS从 T3 到 T41250−1200/600.83 QPS从 T4 到 T51300−1250/600.83 QPS
然后取这些速率的平均值
平均速率(1.670.830.830.830.83)/51.00 QPS
irate
irate(http_requests_total[5m]) 返回的是 http_requests_total 指标在过去 5 分钟内的瞬时请求速率。与 rate 不同irate 只使用时间范围内的最后两个数据点来计算速率因此它更适合捕捉短期内的突发变化或尖峰。
计算方法
选择过去 5 分钟内的最后两个数据点。计算这两个数据点之间的增量。将增量除以这两个数据点之间的时间间隔以得到瞬时速率。
示例
假设在时间 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
计算方法
假设你有以下桶的速率数据单位是每秒请求数
le0.1: 10 req/sle0.2: 15 req/sle0.5: 20 req/sle1: 25 req/sle2: 30 req/sleInf: 35 req/s
计算过程如下
计算累积分布 le0.1: 10 req/sle0.2: 10 15 25 req/sle0.5: 25 20 45 req/sle1: 45 25 70 req/sle2: 70 30 100 req/sleInf: 100 35 135 req/s 计算总请求数135 req/s计算 95th percentile 的请求数 95% 的请求数 135 * 0.95 128.25 req/s 查找对应的桶 le1: 70 req/s 128.25 req/sle2: 100 req/s 128.25 req/sleInf: 135 req/s 128.25 req/s95th percentile 的请求数为 128.25 req/s落在 le2 桶和 leInf 桶之间。 插值计算 因为 le2 桶已经包含了绝大部分请求实际插值计算会让我们确定 95th percentile 的延迟值接近 le2 桶的上限即 2 秒。实际的插值计算会让我们在 le2 桶的上限附近找到精确的值。
插值计算公式中的“上限”
在给出的案例中
le2 桶的上限是 2 秒。leInf 桶的上限理论上是无限大但在实际计算中我们用 le2 的上限值来做插值因为 leInf 的上限并不提供具体的延迟值。
插值计算的详细步骤
我们已经知道
le2 桶的累积请求数是 100 req/s。leInf 桶的累积请求数是 135 req/s。95th percentile 的请求数是 128.25 req/s。
我们需要在 le2 桶和 leInf 桶之间插值。由于 leInf 桶的具体上限不明确我们通常将计算结果定在 le2 桶的上限附近。
计算差异 le2 桶的请求数100 req/sleInf 桶的请求数135 req/s差异135 req/s - 100 req/s 35 req/s
计算插值
95th percentile 的请求数是 128.25 req/s落在 le2 桶和 leInf 桶之间。计算 95th percentile 在这两个桶之间的位置可以用以下插值公式延迟值2((128.25−100)/(135−100)×(上限−2))
在这里上限是指 leInf 桶的理论上限但实际插值会以 le2 桶的上限即 2 秒作为基准。
实际插值步骤
计算插值比例
比例(128.25−100)/(135−100)28.25/35≈0.807
计算延迟值
延迟值2(0.807×(上限−2))
由于 leInf 的上限理论上是无限大实际中我们将插值结果定在 le2 的上限附近即 2 秒。
插值结论
在实际情况下因为 leInf 桶的上限是无限大实际插值计算中我们通常将 95th percentile 的延迟值定在 le2 桶的上限附近即 2 秒。因此
插值结果95th percentile 的延迟值在 le2 桶的上限2 秒附近。
插值计算的主要目的是找出更精确的延迟值但由于 leInf 的上限不具体结果一般在 le2 桶的上限附近。
示例
假设我们有以下桶的定义
http_request_duration_seconds_bucket{le0.1}: 包含所有延迟小于或等于 0.1 秒的请求。http_request_duration_seconds_bucket{le0.2}: 包含所有延迟小于或等于 0.2 秒的请求。http_request_duration_seconds_bucket{le0.5}: 包含所有延迟小于或等于 0.5 秒的请求。http_request_duration_seconds_bucket{le1}: 包含所有延迟小于或等于 1 秒的请求。http_request_duration_seconds_bucket{leInf}: 包含所有延迟小于或等于无限大即所有请求的数据。
在直方图中每个桶的 le 标签提供了该桶的延迟上限使得我们能够理解请求的延迟分布情况。例如如果你看到 http_request_duration_seconds_bucket{le0.5} 中的请求数为 1000http_request_duration_seconds_bucket{le1} 中的请求数为 2000那么可以得出结论在 0.5 秒和 1 秒之间的请求数是 1000。
总结
le 标签在 Prometheus 直方图中表示桶的最大延迟值以 “less than or equal” 的方式来说明。这样设计可以更精确地反映数据分布并方便进行数学计算和分析。