阿里云 Prometheus 与 VictoriaMetrics 计算差异

更新时间:
复制为 MD 格式

本文描述阿里云 Prometheus 与 VictoriaMetrics 的计算差异

适用范围

  • VictoriaMetrics 对比版本:v1.93.12。

  • 阿里云 Prometheus 的 PromQL 计算基于开源 Prometheus 2.x,行为无特殊之处。

新增时间序列开始位置 Counter 计算方法

在时间序列开始位置用 increase 计算,容易发现 VictoriaMetrics 将头部处理为非零值,而开源 Prometheus 完全忠实于 increase 本身的语义,严格遵循在两个点上计算,算出来始终为1。

  • Prometheus,例如新时间序列 up

    image.pngimage.png

    直接计算 increase,要从 [2m] 能取到至少两个点的位置开始算,结果自然全是 0。

  • VictoriaMetrics,例如新时间序列 vm_app_version

    image.png

    image.png

    时间序列何时创建出来,对应的 increase 结果就从何时开始,并且存在类似默认补点的行为,使得 increase 结果从1开始,2m 后转为正常的 0。

窗口函数语义自动补齐

众所周知,在 Prometheus 语义下,用窗口函数不写窗口值是错误的:

image.png

Prometheus 毫无疑问报错了

image.png

VictoriaMetrics 容忍这种情况,默认补齐为采样间隔,正常返回结果,将用户错误的写法吞掉了。

Counter 类函数线性补偿行为差异

这部分的差异也主要在于 VictoriaMetrics 的 Rollup 行为:

image.png

VictoriaMetrics 提供了 increase / increase_pure / increase_prometheus 三种实现,其中 increase_prometheus 是跟开源 Prometheus 一致的。

image.png