【问题标题】:Sliding window on Drools Fusion rulesDrools Fusion 规则的滑动窗口
【发布时间】:2018-08-06 11:37:31
【问题描述】:

我正在制作一个应用程序,其中通过每 5 秒一次的 HTTP 请求间隔收集来自虚拟机的与 CPU 使用率、内存使用率、磁盘使用率等相关的数据。收集的数据如下所示:

timeStamp (long): 1533554434
memUsagePerc (double): 5.384678498028317
cpuUsagePerc (double): 24.8756219
diskSizePerc (double): 31.880938915483163
diskUtilPerc (double): 1.0505864

我在 Drools Fusion 上创建了一些规​​则,试图查看以下内容: 例如,当 CPU 使用率在最后 10 秒内达到 10% 以上时,然后在屏幕上打印一些内容,但我的问题是,即使我在规则中输入了命令 over window:time(Xs),即使 @987654323 仍然会触发该规则@尚未通过。以下是 CPU 使用率的规则:

declare Netdata
    @role( event )
end
rule "CPU usage over 10%"
    salience -1
    when
        $cpu : Netdata(cpuUsagePerc > 10)
        over window:time (10s)
        from entry-point Netdata
    then
        System.out.println("CPU usage over 10%");
end

Netdata 是从 HTTP 响应中收集所有数据并每次创建一个对象的类。然后 Drools Fusion 使用该对象。 请注意,没有over window:time(Xs) 部分的更“虚拟”规则也会被触发。此外,屏幕上会出现以下错误,在over window:time(Xs) 旁边:JAVA_IDENTIFIER expected, got 'window'

我使用的是 Drools 5.1.1 版。

【问题讨论】:

  • 您是否修复了 IDE 中的 JAVA_IDENTIFIER expected, got 'window' msg?

标签: java drools complex-event-processing drools-fusion


【解决方案1】:

这是关于滑动窗口的常见误解。它们不是固定的,它们是滑动的。这意味着即使 t

据我所知,您正在尝试做的事情没有开箱即用的支持。我过去所做的是手动创建一个“桶”事实来收集事件,然后使用这些桶而不是单个事件来编写规则。


在 OP 发表评论后编辑。

关于 Drools 中滑动窗口的一些说明:

  • Drools 中的时间滑动窗口不会等待它们在触发前配置的任何大小。例如像window:time (10s) 这样的窗口应该被解释为0s <= t <= 10s。如果每 1 秒有事件发生,则窗口将在 t=1t=2t=3、...、t=n 处执行。
  • Drools 中的滑动窗口不是离散的。它们不是固定的时间/大小桶。例如,假设我们有这个定时窗口:window:time (3s)。假设我们每隔 1 秒就有事件 (e)。该窗口将按如下方式执行:t(1):[e1]t(2):[e1,e2]t(3):[e1,e2,e3]t(4):[e2,e3,e4]t(5):[e3,e4,e5]。如您所见,窗口将在t(3) 之后开始“滑动”。

如果您想要分析事件的离散“桶”,那么您需要自己创建该机制。 Drools 不支持这种窗口对我来说听起来也很奇怪,但显然它们不像滑动窗口那么常见。

希望对你有帮助,

【讨论】:

  • 我不太明白你的建议。我的问题可能不够清楚,所以我会改写它。我每 5 秒收集一次数据,并且我希望仅在最后 10 秒 CPU 使用率超过 10% 时触发规则(上述规则),所以如果最后收集的两个数据显示 CPU 超过 10 %,不是每次 CPU 达到 10% 以上。您建议在规则(存储桶)之外执行此操作,然后触发规则?如果 Drools 不能做到这一点,那么首先使用它有什么意义呢?我的意思是,对于我脑海中的规则引擎来说,我所问的听起来很基本:/
  • 非常感谢您的回复。事实证明你是对的。我无法用 Drools Fusion 提供的产品做到这一点,所以我听取了您的建议并创建了一个存储桶作为解决方法,它可以正常工作。
猜你喜欢
  • 2012-09-10
  • 2015-04-17
  • 2016-09-09
  • 1970-01-01
  • 2014-04-04
  • 2015-08-10
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
相关资源
最近更新 更多