Java WSO2 CEP序列和外部时间

Java WSO2 CEP序列和外部时间,java,wso2,complex-event-processing,wso2cep,siddhi,Java,Wso2,Complex Event Processing,Wso2cep,Siddhi,我想改进我的产品,我想为它编写一个复杂的分析器接口。我使用elasticsearch存储日志,每天存储超过5000万条日志。因此,重要的是可以在上述接口上创建不同的查询,这将大大限制要分析的日志数量。wso2 cep组件将获取要测试的日志,然后它将以json的形式返回结果,该结果将显示在我的应用程序上。如果我可以使用日志的时间戳而不是内部时间(System.currentTimeMillis()),WSO2 cep库将非常棒 如果有一种方法可以使用属性作为时间戳,或者使用send方法的time

我想改进我的产品,我想为它编写一个复杂的分析器接口。我使用elasticsearch存储日志,每天存储超过5000万条日志。因此,重要的是可以在上述接口上创建不同的查询,这将大大限制要分析的日志数量。wso2 cep组件将获取要测试的日志,然后它将以json的形式返回结果,该结果将显示在我的应用程序上。如果我可以使用日志的时间戳而不是内部时间(System.currentTimeMillis()),WSO2 cep库将非常棒

如果有一种方法可以使用属性作为时间戳,或者使用send方法的timestamp参数,那就更好了

public void send(long timeStamp, Object[] data) throws InterruptedException
与此同时,我发现了另一个问题: 我需要这些事件,然后是指定的事件

例如:

        query = " from every a1=LoginEvents[ip == '192.10.1.2']<2> -> " +
            "            b1=LoginEvents[ip == '192.10.1.1']<1> " +
            " within 10 sec " +
            " select a1[0].myTime, a1[0].ip, b1[0].ip as b1ip, b1[0].myTime as b2Time " +
            " insert into OutPut for all-events ";

    siddhiManager.addCallback(queryReference, new QueryCallback() {
        @Override
        public void receive(long timeStamp, Event[] inEvents, Event[] removeEvents) {
            if (inEvents != null) {
                for (Event e : inEvents) {
                    System.out.printf(" Ip1 : %s Time1 : %s Ip2: %s Time2 : %s \n", e.getData(1), new Date((Long) e.getData(0)).toString(), e.getData(2), new Date((Long) e.getData(3)).toString());
                }
            }
        }
    });


    InputHandler inputHandler = siddhiManager.getInputHandler("LoginEvents");
    Calendar c = Calendar.getInstance();
    c.add(Calendar.HOUR, 1);
    c.add(Calendar.SECOND, 1);
    int i = 0;
    String ip = null;
    for (i = 0; i <= 50; i++) {
        ip = "192.10.1.2";
        c.add(Calendar.SECOND, 2);
        if (i % 10 == 0) {
            ip = "192.10.1.1";
        }
        System.out.printf("Sending event : time %s , ip : %s \n", c.getTime().toString(), ip);
        inputHandler.send(c.getTime().getTime(), new Object[]{c.getTime().getTime(), ip, "1", new Random().nextInt(1000)});
    }
以下事件本应与“查询”匹配,但instaed没有给我任何信息。 以下日志应为输出:

Sending event : time Wed Sep 23 11:06:58 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:00 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:02 CEST 2015 , ip : 192.10.1.1 
此外,如果查询类型是sequence,那么结果只需要一对。 假设以下日志将被发送到队列:

    Sending event : time Mon Sep 28 14:49:01 CEST 2015 , ip : 192.10.1.1 
Sending event : time Mon Sep 28 14:49:03 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:05 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:07 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:09 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:11 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:13 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:15 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:17 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:19 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:21 CEST 2015 , ip : 192.10.1.1 
Sending event : time Mon Sep 28 14:49:23 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:25 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:27 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:29 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:31 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:33 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:35 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:37 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:39 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:41 CEST 2015 , ip : 192.10.1.1 
Sending event : time Mon Sep 28 14:49:43 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:45 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:47 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:49 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:51 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:53 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:55 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:57 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:49:59 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:01 CEST 2015 , ip : 192.10.1.1 
Sending event : time Mon Sep 28 14:50:03 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:05 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:07 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:09 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:11 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:13 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:15 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:17 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:19 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:21 CEST 2015 , ip : 192.10.1.1 
Sending event : time Mon Sep 28 14:50:23 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:25 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:27 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:29 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:31 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:33 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:35 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:37 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:39 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 14:50:41 CEST 2015 , ip : 192.10.1.1 
我只需要后跟指定事件的那些事件。我只需要那些日志,然后是ip 192.10.1.1的日志(如果有已分析的事件,则不应再次分析)。所以结果应该是6-7命中率,但西迪给了我所有可能的命中率

例如:

     query = " from  a1=LoginEvents[ip == '192.10.1.2']+, " +
        "            b1=LoginEvents[ip == '192.10.1.2']+," +
        "            c1=LoginEvents[ip == '192.10.1.1']  " +
        " within 10 sec " +
        " select a1[0].myTime, a1[0].ip, b1[0].ip as b1ip, b1[0].myTime as b2Time " +
        " insert into OutPut for current-events ";
;
模式也是如此

   query = " from every a1=LoginEvents[ip == '192.10.1.2'] -> " +
                "            b1=LoginEvents[ip=='192.10.1.1'] " +
                " within 10 sec " +
                " select a1[0].myTime, a1[0].ip, b1[0].ip as b1ip, b1[0].myTime as b2Time " +
                " insert into OutPut for all-events ";
        ;
输出如下:

Sending event : time Mon Sep 28 15:13:21 CEST 2015 , ip : 192.10.1.1 
log4j:WARN No appenders could be found for logger (org.wso2.siddhi.core.query.processor.handler.sequence.SequenceInnerHandlerProcessor).
log4j:WARN Please initialize the log4j system properly.
Sending event : time Mon Sep 28 15:13:23 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 15:13:25 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 15:13:27 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 15:13:29 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 15:13:31 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 15:13:33 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 15:13:35 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 15:13:37 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 15:13:39 CEST 2015 , ip : 192.10.1.2 
Sending event : time Mon Sep 28 15:13:41 CEST 2015 , ip : 192.10.1.1 
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:23 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:25 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:23 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:27 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:25 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:27 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:23 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:29 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:25 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:29 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:27 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:29 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:23 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:31 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:25 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:31 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:27 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:31 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:29 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:31 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:23 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:33 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:25 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:33 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:27 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:33 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:29 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:33 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:31 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:33 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:23 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:35 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:25 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:35 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:27 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:35 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:29 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:35 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:31 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:35 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:33 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:35 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:23 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:37 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:25 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:37 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:27 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:37 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:29 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:37 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:31 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:37 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:33 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:37 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:35 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:37 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:23 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:39 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:25 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:39 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:27 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:39 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:29 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:39 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:31 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:39 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:33 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:39 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:35 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:39 CEST 2015 
--------
--------
event
 Ip1 : 192.10.1.2 Time1 : Mon Sep 28 15:13:37 CEST 2015 Ip2: 192.10.1.2 Time2 : Mon Sep 28 15:13:39 CEST 2015 
-

CEP3.0.0是SIDDHI2.0.0附带的旧版本。我建议您使用最新的WSO2 CEP 4.0.0,它与重新编写的Siddhi 3.0.0相比有显著的改进。您可以从下载最新的CEP包。另一方面,Siddhi存储库在中可用

在Siddhi 3.0.0中,可以使用外部时间窗口指定属性名称,如下所示

from LoginEvents#window.externalTime(timeStamp,5 sec) 
select timeStamp, ip
insert all events into uniqueIps

有关更多详细信息,请参阅。关于模式问题,我认为最好检查siddhi3.0语法并实现逻辑

我想我们彼此误解了。我已经在使用最新版本的siddhi cep,并且我已经编写了自己的externalTimeBatch插件。如果你看一下我条目的末尾,就会发现一个日志可以被多次使用。我想写一个警报系统,如果在指定的时间内发生了成功的身份验证,它会发送一封电子邮件。此时,siddhi cep将发送所有可能的案例。我只需要日志中的一对。我在执行计划的siddhi查询中使用externaltimebatch,它需要的时间戳一样长,但我有一个yyyy MM dd HH:MM格式的字符串,如何将该值转换为long?
from LoginEvents#window.externalTime(timeStamp,5 sec) 
select timeStamp, ip
insert all events into uniqueIps