首页/云/可观测性速查/rate 与 irate:计数器变化率
Prometheus 与采集64 条

rate 与 irate:计数器变化率

rate() 用窗口内样本做外推,曲线平滑,适合告警与容量趋势;irate() 只用窗口内后两个样本,反应快但抖动大,适合观察瞬时突变。

可观测性速查云更新于 2026-10-13

rate 与 irate 的区别

rate 用窗口内的全部样本做外推,得到平均变化速率,曲线平滑,适合告警与容量观察;irate 只取窗口内最后两个样本计算瞬时速率,反应快但抖动明显,适合在图表上观察突变。两者都要求输入是计数类序列,并自动处理进程重启带来的归零。

为什么要转成速率

计数类指标只在进程重启时归零,原始值本身是单调上升的累计量,直接画图只能看到一条斜线。转成速率后才能回答每秒发生多少次,才具备跨实例可比性,也才能与阈值比较。

基本信息

输入要求计数类序列,窗口内至少两个样本
rate 行为窗口内所有样本参与、结果平滑
irate 行为只用末尾两个样本、结果灵敏
外推特性rate 会按窗口长度外推,短窗口数值可能略高于手工计算
窗口含义rate 是平均窗口,irate 的窗口只决定回看多远

典型使用场景

  • 告警表达式:用 rate 得到平稳信号,避免尖刺造成误报
  • 故障期观察:用 irate 快速看到流量与错误的瞬时变化
  • 容量趋势:用 rate 的长期曲线判断是否需要扩容
  • 发布对比:用同一窗口对比发布前后速率差异
  • 重置确认:计数类归零后两条序列的曲线都会出现短暂下凹

两种速率对比

两种速率对比
# 平滑:5 分钟平均速率,适合告警
rate(http_requests_total[5m])

# 灵敏:末尾两个样本的瞬时速率,适合看板观察
irate(http_requests_total[5m])

# 按维度聚合后使用,避免同时画出过多曲线
sum by (service) (rate(http_requests_total{code=~"5.."}[5m]))

两者对照

维度rateirate
参与样本窗口内全部窗口内最后两个
曲线形态平滑抖动明显
适用场景告警、趋势、容量突变观察、故障期手动排查
窗口长度作用决定平均范围只决定回看范围

窗口与采样点的关系

抓取间隔推荐窗口原因
15 秒1 到 5 分钟保证窗口内有足够采样点
1 分钟5 到 15 分钟窗口过短会让速率剧烈跳动
5 分钟15 分钟以上否则可能只覆盖两三个点
窗口至少要覆盖四个采样点才能得到稳定的速率:抓取间隔调整后,原来的窗口设置通常需要一并放宽。
irate 参数写成 5 分钟但实际只看末尾两个样本,容易被误解为窗口平均;对稳定性有要求的地方优先用 rate。

计数器重置怎么被处理

进程重启会让计数类序列归零,rate 与 irate 都按重置处理,把下降点视作新一轮累加,因此不会出现负值。自己用原始值做差值就没有这层保护,重启时刻会出现明显负尖峰,这也是推荐用函数而不是手工运算的原因。

选取速率窗口的经验

  • 先看抓取间隔:窗口至少要覆盖四个采样点
  • 告警用长窗口:稳定性优先,允许几十秒到几分钟的判定延迟
  • 排查用短窗口:灵敏度优先,接受曲线抖动
  • 看板统一宏:交给与步长联动的宏自动计算窗口,避免写死固定值

选错窗口的典型表现

写法表现修正方式
窗口小于采样间隔结果为空或时有时无窗口放大到覆盖多个采样点
窗口远大于抓取间隔变化被抹平,突发看不到缩短窗口或改用瞬时速率
两种速率混用在同一图曲线尺度不一致,难以比较同一面板统一使用一种
速率类查询要看趋势而不是精确值:短窗口下的外推会带来少量偏差,做容量估算时应使用更长的窗口与更完整的采样。

易错点

  • 对瞬时数值类指标使用 rate:结果没有意义,应直接读取或用变化率函数
  • 窗口小于抓取间隔:取不到两个样本,结果为空
  • 长期告警使用 irate:偶发尖刺频繁触发,值班很快就会对告警脱敏
  • 忽略计数器重置:手工做差值会出现负值尖峰,交给 rate 与 increase 处理

数据来源与参考

  • Prometheus 文档 · rate() / irate()
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌