簡體   English   中英

使用 NEsper 讀取日志文件以用於報告目的

[英]Using NEsper to read LogFiles for reporting purposes

我們正在評估 NEsper。 我們的重點是監控企業環境中的數據質量。 在一個應用程序中,我們將記錄許多字段的每次更改 - 例如在“訂單”中。 所以我們有像這樣的字段

  • 收貨人姓名
  • 收貨人街
  • 訂購日期

....還有更多的領域。 可以想象,日志文件會變得越來越大。

因為數據是由不同的客戶發送的,並且是在應用程序中導入的,所以我們要分析有多少(以及哪些)字段從“無值”更新為“有值”(僅作為示例)。

我試圖用字段構建一個測試用例

  • 訂單參考
  • 字段名
  • 字段值

對於我的測試用例,我添加了兩個帶有上下文信息的語句。 第一個應該只計算每個訂單的一般變化:

epService.EPAdministrator.CreateEPL("create context RefContext partition by Ref from LogEvent");
var userChanges = epService.EPAdministrator.CreateEPL("context RefContext select count(*) as x, context.key1 as Ref from LogEvent");

第二個語句應該計算從“無值”到“有值”的更新:

epService.EPAdministrator.CreateEPL("create context FieldAndRefContext partition by Ref,Fieldname from LogEvent");
var countOfDataInput = epService.EPAdministrator.CreateEPL("context FieldAndRefContext SELECT context.key1 as Ref, context.key2 as Fieldname,count(*) as x from pattern[every (a=LogEvent(Value = '') -> b=LogEvent(Value != ''))]");

要讀取測試日志文件,我使用 csvInputAdapter:

CSVInputAdapterSpec csvSpec = new CSVInputAdapterSpec(ais, "LogEvent");
csvInputAdapter = new CSVInputAdapter(epService.Container, epService, csvSpec);
csvInputAdapter.Start();

我不想使用更新偵聽器,因為我只對所有事件的結果感興趣(可能這是不可能的,這是我的失敗)。

因此,在讀取 csv(csvInputAdapter.Start() 返回)后,我讀取了所有事件,這些事件存儲在語句 NewEvents-Stream 中。

在 CSV 文件中使用 10 個條目一切正常。 使用 100 萬行需要很長時間。 我試過沒有 EPL-Statement(所以只有 CSV 導入) - 大約需要 5 秒。 對於第一個語句(不是復雜的模式語句),我總是在 20 分鍾后停止 - 所以我不確定需要多長時間。

然后我更改了第一條語句的 EPL:我引入了 group by 而不是 context。

select Ref,count(*) as x from LogEvent group by Ref

現在它真的很快 - 但是在 CSVInputAdapter 返回后,我的 NewEvents Stream 中沒有任何結果......

我的問題:

  1. 我想使用 NEsper 的方式是受支持的用例還是這是我失敗的根本原因?

  2. 如果這是一個有效的用例:我的錯誤在哪里? 我怎樣才能以高性能的方式獲得我想要的結果?

  3. 當使用“group by”而不是“context”時,為什么我的 EPL 語句中沒有 NewEvents?

對 1),是的

2) 這是有效的,您的 EPL 設計可能有點低效。 您可能想通過使用過濾器索引和索引條目來了解模式的工作原理,它們的創建成本更高,但在丟棄不需要的事件方面速度非常快。 閱讀: http : //esper.espertech.com/release-7.1.0/esper-reference/html_single/index.html#processingmodel_indexes_filterindexes以及http://esper.espertech.com/release-7.1.0/esper-reference /html_single/index.html#pattern-walkthrough也許嘗試“上一個”。 分別衡量每個語句的性能。 此外,我認為 CSV 適配器並未針對處理大文件進行優化。 我認為 CSV 可能無法流式傳輸。

3)檢查你的代碼? 不要將 CSV 文件用於大文件。 確保已附加偵聽器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM