首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Kapacitor Lambda均值

Kapacitor Lambda均值
EN

Stack Overflow用户
提问于 2017-08-02 02:26:20
回答 3查看 684关注 0票数 0

我正在尝试使用Kapacitor batch|query生成基线,方法是从InfluxDB 1、2、3和4周前查询相同的时间间隔,然后将其向前移动并像这样连接在一起:

代码语言:javascript
运行
复制
var w1 = batch
    |query('SELECT mean(""value"") FROM ""MyDB"".""autogen"".""MetricName""')
        .offset(1w).period(period).every(1m).align().groupBy(time(1m))
    |shift(1w)

var w2 = batch
    |query('SELECT mean(""value"") FROM ""MyDB"".""autogen"".""MetricName""')
        .offset(2w).period(period).every(1m).align().groupBy(time(1m))
    |shift(2w)

var w3 = batch
    |query('SELECT mean(""value"") FROM ""MyDB"".""autogen"".""MetricName""')
        .offset(3w).period(period).every(1m).align().groupBy(time(1m))
    |shift(3w)

var w4 = batch
    |query('SELECT mean(""value"") FROM ""MyDB"".""autogen"".""MetricName""')
        .offset(4w).period(period).every(1m).align().groupBy(time(1m))
    |shift(4w)

var bj = w1
    |join(w2, w3, w3)
        .as('w1', 'w2', 'w3', 'w4')
        .fill('null')

var b = bj
    |eval(lambda: (""w1.mean"" + ""w2.mean"" + ""w3.mean"" + ""w4.mean"") / float(4.0))
        .as('avg')

我使用完全外连接,因为有些星期可能缺少一个值,在这种情况下,我会将基线计算为3个当前值的平均值。

但是,lambda似乎不支持Mean()或任何类似的数学函数。它似乎也不支持对空值进行检查。

有没有像这样计算基线的方法?

此外,一旦计算出基线,如何缓存它,以便可以根据基线检查传入的流数据?

如有任何帮助,我们不胜感激!谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-09-14 02:43:27

我最终使用C# .NET核心创建了一个自定义函数,作为一个并排运行的进程,查询InfluxDB,计算数学并缓存结果。

票数 0
EN

Stack Overflow用户

发布于 2018-02-27 20:18:26

首先,尝试在批处理变量上使用offset而不是shift。

偏移量将从x之前的分钟、小时、天数中获取值...

在联接过程中应使用shift节点,例如:

代码语言:javascript
运行
复制
previous
    |shift(1w)
    |join(current)
    ......

下面是一个示例:https://github.com/influxdata/kapacitor/issues/746

关于加入4个不同的流,使用不同的时间,并且由于我之前的评论,我猜它不会使用联合而不是连接节点工作,但不确定!

您可以始终有3个滴答,检查当前到过去的一周,2周,等等…

票数 0
EN

Stack Overflow用户

发布于 2019-04-26 18:12:43

“因为某些星期可能缺少一个值”- join将永远等待此值,而不会发出其他相应的批处理并导致内存泄漏。

障碍()节点可能有助于泄漏,但您仍然会在尝试访问缺少的点属性时遇到eval错误。

你想把它拆分成多个脚本,例如一个计算所有4个句号的脚本,在每个脚本中添加一个类似这样的标签

代码语言:javascript
运行
复制
|default().tag('stream', 'w1')

并将它们发送到

代码语言:javascript
运行
复制
|kapacitorLoopback()

第二个脚本监听您的环回流,|window()所有到达的点都没有分组并计算|mean("mean"),而不管它实际得到了多少个周期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45445193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档