Prometheus 的 rate() 与 increase() 函数有什么区别?

rate() 返回计数器每秒的平均增速,increase() 返回时间窗口内的总增量——两者都自动处理计数器重置,increase 的结果就等于 rate 乘以窗口秒数。本文用实例讲清两者区别与选用场景。

最佳实践
Prometheus 的 rate() 与 increase() 函数有什么区别?封面

一句话区别:rate(http_requests_total[5m]) 回答"每秒多少个请求",increase(http_requests_total[5m]) 回答"这 5 分钟一共多少个请求"——后者数值上等于前者乘以 300 秒。

rate:每秒平均增速

rate(http_requests_total[5m])

取 5 分钟窗口内计数器的首尾差值,除以窗口秒数,得到"平均每秒增长多少"。画 QPS 曲线、配速率告警都用它。计数器重启归零会被自动识别并修正,不会算出负数。

increase:窗口内总增量

increase(http_requests_total[5m])

同一窗口内的绝对增量,适合"过去 1 小时总共多少错误"这类总量问题:

increase(errors_total[1h])

怎么选?

需求 函数
画趋势曲线、看每秒速率 rate
统计一段时间的总量(订单数、错误数) increase
计算百分比(错误率) 两个 increase 相除

两个函数都有外推特性:窗口内首尾样本不一定恰好落在边界上,Prometheus 会按斜率外推到窗口边界,所以增量可能是小数——这是正常现象。

观测云对照

在观测云中无需手写 PromQL 函数:指标查看器里选择指标后,聚合方式(速率/增量/均值)是界面选项,DQL 也提供等价的速率计算函数,对计数器重置的处理同样内置。

常见问题(FAQ)

Q:窗口选多大合适? 至少是抓取间隔的 4 倍(如 15s 抓取用 1m 以上),太短会漏样本出现锯齿。

Q:increase 的结果为什么不是整数? 外推机制导致,属预期行为;要精确计数请用更长的窗口。

Q:Gauge 能用 rate 吗? 不能——rate/increase 只适用于只增的 Counter;Gauge 求变化用 deriv()delta()

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台