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

大概是一周前遇到这个问题,我期望通过 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,但被驳回了)


prometheus rate/increase/delta/sum等函数不符合预期或出现小数的原理
https://hunsh.net/archives/131/
发布于
2022年8月23日
许可协议