本文描述阿里云 Prometheus 与 VictoriaMetrics 的计算差异
适用范围
VictoriaMetrics 对比版本:v1.93.12。
阿里云 Prometheus 的 PromQL 计算基于开源 Prometheus 2.x,行为无特殊之处。
新增时间序列开始位置 Counter 计算方法
在时间序列开始位置用 increase 计算,容易发现 VictoriaMetrics 将头部处理为非零值,而开源 Prometheus 完全忠实于 increase 本身的语义,严格遵循在两个点上计算,算出来始终为1。
Prometheus,例如新时间序列 up


直接计算 increase,要从 [2m] 能取到至少两个点的位置开始算,结果自然全是 0。
VictoriaMetrics,例如新时间序列 vm_app_version


时间序列何时创建出来,对应的 increase 结果就从何时开始,并且存在类似默认补点的行为,使得 increase 结果从1开始,2m 后转为正常的 0。
窗口函数语义自动补齐
众所周知,在 Prometheus 语义下,用窗口函数不写窗口值是错误的:

Prometheus 毫无疑问报错了

VictoriaMetrics 容忍这种情况,默认补齐为采样间隔,正常返回结果,将用户错误的写法吞掉了。
Counter 类函数线性补偿行为差异
这部分的差异也主要在于 VictoriaMetrics 的 Rollup 行为:

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

该文章对您有帮助吗?