如何在drools中积累具有相同字段值的事实

时间:2016-01-12 06:09:33

标签: drools accumulate

我写了一条规则,用“密码失败”来警告ssh事件。这条规则在这里:

rule "Hello World"
  when
    accumulate(m:Message(eventType=="Failed password") over window:time( 59s );s:count(m);s>3)
  then
     System.out.println( "success" );
     Alert alert=new Alert("ssh","test");
     insert(alert);
end

这适用于第一种情况。但我想延长这条规则。我想使用相同的Src_ip地址累积带有“密码失败”的ssh事件。例如,如果我在三个不同的src_ip中的59s中有4个失败的密码ssh事件,则规则不匹配,但是当我在一个src_ip中的59s中有4个失败的密码ssh事件时,规则匹配。我应该如何为这种情况重写这条规则。

1 个答案:

答案 0 :(得分:0)

您需要一条消息来选择某个IP地址;然后你可以积累其他具有相同价值的人。

rule "Four or more"
when
   $ml: Message( eventType == "Failed password", $ip: src_ip )
   not Message( eventType == "Failed password", src_ip == $ip, this after $ml )
   accumulate( Message(eventType == "Failed password", src_ip == $ip )
        over window:time( 59s ); s:count(1); s > 3 )
then
   System.out.println( "success" );
   Alert alert=new Alert("ssh","test");
   insert(alert);
 end