2015-09-28 196 views
1

我想改進我的產品,我想爲它編寫一個複雜的分析器界面。我正在使用elasticsearch存儲日誌,每天存儲超過5000萬個日誌。所以重要的是可以在上述接口上創建不同的查詢,這將顯着限制要分析的日誌的數量。 wso2 cep組件會得到要測試的日誌,然後它將返回結果作爲json,這將顯示在我的應用程序中。如果我可以使用日誌的時間戳而不是內部時間(System.currentTimeMillis()),那麼WSO2 cep庫會很棒。WSO2 CEP序列和外部時間

https://docs.wso2.com/display/CEP300/Windows

,如果有使用屬性爲時間戳或使用send方法的時間戳參數的方式這將是很好。

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)}); 
    } 

存在用於上述查詢沒有結果。 Neverthless,它似乎應該是一個命中,因爲下面的日誌被髮送到siddhiManager。 輸出:

Sending event : time Wed Sep 23 11:06:24 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:26 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:28 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:30 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:32 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:34 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:36 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:38 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:40 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:42 CEST 2015 , ip : 192.10.1.1 
Sending event : time Wed Sep 23 11:06:44 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:46 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:48 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:50 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:52 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:54 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:06:56 CEST 2015 , ip : 192.10.1.2 
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 
Sending event : time Wed Sep 23 11:07:04 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:06 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:08 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:10 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:12 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:14 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:16 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:18 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:20 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:22 CEST 2015 , ip : 192.10.1.1 
Sending event : time Wed Sep 23 11:07:24 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:26 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:28 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:30 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:32 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:34 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:36 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:38 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:40 CEST 2015 , ip : 192.10.1.2 
Sending event : time Wed Sep 23 11:07:42 CEST 2015 , ip : 192.10.1.1 
Sending event : time Wed Sep 23 11:07:44 CEST 2015 , ip : 192.10.1.2 

以下事件應該已經匹配到「查詢」,但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 

此外,如果查詢類型是序列欲僅一對作爲結果。 假設以下日誌將被髮送到隊列:

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的命中,但是siddhi給了我所有可能的命中。

例如:

 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 
- 

回答

1

CEP 3.0.0是舊版本,與Siddhi 2.0.0一起。我建議你使用最新的WSO2 CEP 4.0.0,它已經重寫了Siddhi 3.0.0。您可以從here下載最新的CEP包。另一方面,Siddhi存儲庫位於GitHub

在Siddhi 3.0.0中,您可以使用外部時間窗口指定屬性名稱,如下所示。

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

詳情請參閱WSO2 documentation on Time Windows。對於模式問題,我認爲它更好,你檢查Siddhi 3.0 Within Test Case語法和實現你的邏輯。

+0

我覺得我們誤解了對方。我已經在使用最新版本的siddhi cep,並且我已經編寫了自己的externalTimeBatch插件。如果你看看我的入口結尾,可以看到一個日誌可以被多次使用。我想編寫一個警報系統,如果在指定的時間內發生了成功的身份驗證,它將發送一封電子郵件。這時siddhi cep會發出所有可能的情況。我只需要一對日誌。 – user2641625

+0

我正在使用externaltimebatch在siddhi查詢的exeuction計劃,它需要時間戳長,但我有一個字符串形式爲yyyy-MM-dd HH:mm,我怎樣才能將這個值轉換爲長? – aneela