【问题标题】:Linear interpolation in PromQL or MetricsQLPromQL 或 MetricsQL 中的线性插值
【发布时间】:2020-10-15 07:13:35
【问题描述】:

我正在评估 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,或接近它的时间)。

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

【问题讨论】:

    标签: promql metricsql victoriametrics


    【解决方案1】:

    最终答案

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

    原创建议

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

    尝试通过以下方式将predict_linear 函数与来自MetricsQLdefault 运算符结合起来:

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

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

    【讨论】:

    • 有趣的想法,但在predict_linear 上阅读它似乎不会做我正在寻找的那种插值。我在问题中添加了一个部分,阐明了我正在寻找的确切行为(我认为这与 TimescaleDB 的interpolate() 相同,供参考)。 predict_linear 会做到这一点吗?还是有别的办法?
    • 感谢更新问题!我刚刚在 VictoriaMetrics 中添加了 interpolate 函数 - 有关详细信息,请参阅 this commit。它将包含在下一个版本中。同时,您可以根据these docs 从源代码构建 VictoriaMetrics
    • 优秀。我期待着尝试一下。
    • 仅供参考,interpolate 函数在 VictoriaMetrics 中可用,从 v1.38.0 开始
    猜你喜欢
    • 2021-01-27
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2022-11-24
    • 2013-07-27
    • 2020-07-31
    相关资源
    最近更新 更多