PromQL 或 MetricsQL 中的线性插值

Linear interpolation in PromQL or MetricsQL

我正在为一个 IoT 应用程序评估 VictoriaMetrics,在该应用程序中,我们有时会因硬件或通信问题而在系列中出现间隙。在某些时间序列报告情况下,为缺失的时间间隔插入值对我们很有帮助。我看到 MetricsQL (它扩展了 PromQL)有一个 keep_last_value() 函数,它将通过保持最后一个观察值来填补空白,直到出现一个新的值(这对我们有帮助),但在某些情况下是线性的差距前后的值之间的插值是对缺失部分的更现实的估计。 PromQL 或 MetricsQL 中是否有一个函数可以对系列中的缺失数据进行线性插值,或者是否可以构建一个更复杂的查询来实现这一点?

阐明所需的插值

我想要的是在间隙前后的点之间进行简单的插值;我相信,这就是 TimescaleDB 的 interpolate() 函数的作用。也就是说,如果我的时间序列是:

(1:00, 2)
(2:00, 4)
(3:00, NaN)
(4:00, 5)
(5:00, 1)

我希望内插的 3:00 值为 4.5,在紧接前后的点之间。我不希望它是 6(这是我从丢失的点之前的点推断得到的结果,忽略之后的点)而且我不想要如果我对整体进行线性回归会得到的任何值系列并在 3:00 处进行插值(大概是 3,或接近它的值)。

当然,这是一个简单的例子,差距也有可能持续不止一个时间步长。但在那种情况下,我仍然希望插值完全基于间隙之前和之后的点,忽略系列的其余部分。

最终答案

使用 interpolate 函数,从 v1.38.0 开始在 VictoriaMetrics 中可用。

原建议

这没有实现修改后问题中要求的精​​确插值,但可能对其他要求略有不同的人有用

尝试按以下方式组合 predict_linear function with default operator from MetricsQL

metric default predict_linear(metric[1h], 0)

尝试修改方括号中的值以获得所需的插值级别。