prometheus rate/increase/delta/sum等函数不符合预期或出现小数的原理
大概是一周前遇到这个问题,我期望通过 delta(process[5m])
来统计 5m 内 process 失败的数量,从在阅读了文档之后我确认这句 PromQL 是正确的,符合我的需求的(数据比较特殊,每一个 metric 都只有 1,我期望在 metric 范围外为 0,这样 delta 可以计算到得到 1)。
情况大概是这样
data 为[2, 2, 7, 7, 7, ...]
但是做 1m 的 delta 之后会得到[10, 10, 0, 0, 0, ...]
甚至于 2m 的 delta 曲线更奇怪
看到 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/