当前位置: 首页 > 知识库问答 >
问题:

Drools融合规则上的滑动窗口

弘柏
2023-03-14

我正在制作一个应用程序,其中通过每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 windows: time(Xs),即使X秒尚未通过,规则仍然被触发。这是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 windows: time(Xs)部分的更“虚拟”的规则也会被触发。此外,屏幕上会出现以下错误,紧挨着over windows: time(Xs)JAVA_IDENTIFIER预期的,得到了“窗口”

我正在使用Drools版本5.1.1。

共有1个答案

黄景胜
2023-03-14

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

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

在OP的评论后编辑。

关于Drools中滑动窗口的一些澄清:

  • Drools中的时间滑动窗口不会在开火前等待配置的任何大小。例如,像“window:time(10s)这样的窗口应解释为“0s”

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

希望有帮助,

 类似资料:
  • 我正在使用drools fusion,我想根据实现的规则数测试这个cep系统的性能。现在,我有了一个简单的规则文件。drl扩展。我想动态生成大约1000条规则。那么,如何在不让他们在中创建一对一的情况下自动完成此操作呢。drl文件?

  • 我是一个流口水的新手(6.3版),我很难想出一个具体的规则。我有一个名为Steps的类,只有一个简单的字段

  • 我需要编写一条规则,统计过去10秒内我在流中收到的事实数量,如果它们符合特定标准。 例如,如果两辆黑色汽车在最后10秒内通过十字路口,我想提醒某人。 我有以下规则: 当我乘坐一辆黑色汽车经过时,这是有效的,但是,除非有两辆黑色汽车,否则我不希望它开火。我找不到一个很好的例子。 谢谢

  • 我尝试在Drools 5.4.0中使用滑动时间窗口。最终版本,并提供以下官方文档片段: 和 我认为混合形式是有效的: 但是,除非我弄错了,否则它的行为并不像预期的那样(即只考虑在过去2分钟内发生的RHT股票滴答声)。我不明白结果的逻辑。 有人能给我解释一下这个把戏吗? 谢谢

  • 我是规则引擎新手,我的应用程序需要从文件系统动态加载xml文件中的规则,因为管理员可以在运行时创建规则。(Java) 我的问题是:有没有可能流口水?如果是,那么请分享知识,如果不是,那么还有其他选择吗?