irate() 函数用于计算时间序列的即时变化率。与 rate() 函数不同,irate() 考虑的是最近两个数据点之间的变化,而不是在指定的时间范围内的平均变化率。因此,irate() 适用于捕捉时间序列的短期、突发性的变化。
irate() 函数计算的是时间序列中每个点相对于其前一个点的变化率。由于它只考虑最近的两个数据点,因此它能够迅速响应时间序列中的突发变化,即使这些变化只持续很短的时间。
需要注意的是,由于 irate() 函数只考虑最近两个数据点,因此它对数据采样的频率和规律性非常敏感。如果数据点之间的时间间隔不均匀,或者数据采样率很低,irate() 函数的结果可能会不稳定或不准确。此外,由于 irate() 计算的是即时变化率,因此它可能会受到噪声数据或偶然因素的影响。
在实际应用中,你应该根据具体的需求和数据特性选择使用 irate() 还是 rate() 函数。如果你关心的是时间序列的长期趋势或平均变化率,那么 rate() 函数可能更适合。如果你想要捕捉短期的、突发性的变化,那么 irate() 函数可能更合适。
irate() 函数的基本语法如下:
irate(<vector expr> [<duration>])
参数说明:
<vector expr>:一个向量表达式,通常是一个时间序列选择器。
<duration>:一个可选的持续时间参数,指定了计算变化率的时间窗口。如果省略,则默认为2分钟。
假设你有一个 prometheus_http_requests_total 指标,记录了 Prometheus HTTP 请求总数,下面的示例表达式将返回 HTTP 请求的每秒速率,该速率可追溯到 5 分钟前的两个最新数据点,以及范围向量中的每个时间序列:
irate(prometheus_http_requests_total[5m])
执行上述查询,如下图:
请注意,在将 irate() 与聚合运算符(如 sum())或随时间聚合的函数(任何以 _over_time 结尾的函数)结合使用时,一定要先执行 irate(),然后再进行聚合。否则,当目标重启时,irate() 无法检测到计数器的重置。