1

我正在评估 VictoriaMetrics 的 IoT 应用程序,由于硬件或通信问题,我们有时会在系列中出现差距。在某些时间序列报告情况下,为缺失的时间间隔插入值对我们很有帮助。我看到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,或接近它)。

当然,这只是一个简单的说明,间隔也有可能持续超过一个时间步长。但在那种情况下,我仍然希望插值仅基于间隙之前和之后的点,忽略系列的其余部分。

4

1 回答 1

3

最终答案

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

原始建议

这没有达到修订问题中要求的精​​确插值,但可能对其他要求略有不同的人有用

尝试通过以下方式将 predict_linear 函数与来自 MetricQL 的运算default组合

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

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

于 2020-07-01T14:36:19.153 回答