prometheus rate/increase/delta/sum等函数不符合预期或出现小数的原理

in 默认分类 with 0 comment

大概是一周前遇到这个问题,我期望通过 delta(process[5m]) 来统计5m内process失败的数量,从在阅读了文档之后我确认这句PromQL是正确的,符合我的需求的(数据比较特殊,每一个metric都只有1,我期望在metric范围外为0,这样delta可以计算到得到1)。

情况大概是这样
2022-08-23T07:55:28.png
data为[2, 2, 7, 7, 7, ...]
但是做1m的delta之后会得到[10, 10, 0, 0, 0, ...]
甚至于2m的delta曲线更奇怪
2022-08-23T07:57:08.png
看到2m的曲线就可以判断是prometheus的推断导致的了,具体可以看 link

但奇怪的是在线上环境类似语句工作良好,与预期相符。

经过很长时间的搜索,才找到 victoria的这个issue

简单来说就是同样的PromQL在victoria和prometheus的返回结果是不一致的,原因是prometheus使用了推断(并且这个特性无法关闭),victoria的实现方式与其不一致。

然后去线上看了一下,grafana使用的数据源就是来自victoria的...

所以最终解决方案就是使用第三方tsdb查询,prometheus并未提供精确的计算函数(有pr,但被驳回了)

Responses