You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PromQL中delta与increase函数的差异解析:基于counter指标的疑问

Delta与Increase在Prometheus Counter指标中的核心差异

基础定义回顾

  • delta(http_requests_total[5m]):直接计算时间范围首尾两个样本的数值差,逻辑简单直接。
  • increase(http_requests_total[5m]):先通过rate()计算时间范围内的平均每秒增长率,再乘以时间跨度得到总增量,且内置Counter重置处理逻辑。

核心差异场景

1. Counter重置的处理(最关键区别)

Counter指标在进程重启、实例扩容等场景下会重置为0,两者表现完全不同:

  • delta会直接计算首尾差值,得到负数或错误的小值(比如重置前值为100,重置后为50,delta结果是50-100=-50)。
  • increase会自动识别Counter重置(检测到数值下降时判定为重置),将每次重置后的增量累加,最终得到正确的总请求量(上述场景下会计算重置后的增量50-0=50,忽略重置前的无效差值)。

2. 样本缺失/不均匀时的计算逻辑

当时间范围内的样本间隔不均匀或存在缺失时,结果会出现偏差:

  • delta只取时间范围的首尾两个样本,完全忽略中间数据的缺失或间隔差异。
  • increase基于rate()的线性插值逻辑,会根据样本的实际时间戳计算平均增长率,再推导总增量。例如:

    时间范围4秒,样本仅在t0=5、t3=30存在。

    • delta结果:30-5=25
    • increase结果:先计算每秒平均增量为(30-5)/(3-0)=25/3,再乘以4秒得到≈33.33

3. 适用指标类型不同

  • delta可用于Gauge指标(如内存使用率、CPU温度),计算一段时间内的变化量(可正可负)。
  • increase专为Counter指标设计,确保返回非负值,符合Counter只能递增或重置的特性。

为什么你的例子中结果一致?

你给出的样本是均匀生成且无重置的理想场景,此时时间范围内的总增量等于首尾差值,同时rate()计算的平均增长率乘以时间跨度也等于总增量,因此两者结果相同。但这只是特殊情况,实际生产环境中几乎都会遇到重置或样本不均匀的场景,差异会立刻显现。

内容的提问来源于stack exchange,提问作者ggradnig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:55:27