1
我有一些RFC-5424格式的系統日誌消息。Logstash grok過濾器比Java正則表達式模式匹配慢
我使用logstash grok過濾器和java正則表達式模式匹配來解析日誌。我正在比較兩種方法的相同輸入。
java的正則表達式語法分析從stdin讀取輸入並在單個線程中運行。以便所有的消息都在一個批次處理
Logstash還讀取從stdin輸入和我已經配置工作線程一個和管道批量大小等於消息的數目。
我可以看到,Java正則表達式解析比神交過濾器快得多。
觀察:
輸入 - 300K的消息
Java的正則表達式 - 1500個米利斯
Logstash神交 - 每次超過1分鐘。
爲什麼Logstash神交比Java正則表達式這個慢得多。 Grok也應該在後端使用java正則表達式。
在神交過濾器,我使用我使用的格式**(?模式在這裏)**用我的Java模式,相同的正則表達式。在java中,我使用緩衝讀取器從標準輸入讀取時逐行解析輸入。在logstash中,我使用** stdin {} **進行輸入。 在這兩次嘗試中,我放棄輸出。 **我認爲有一個原因可能是grok是使用JRuby和Ruby實現的。這可能是緩慢的原因嗎?** –
@Rahulkhandelwal:這*可能是原因,但它不一定。正則表達式引擎在它們的行爲,它們支持的語法和性能/穩定性方面*有所不同。 –
「*我還會提及我們在JRuby中多次發現 的性能的真相:如果您沒有快速的核心類,那麼您不需要 具有快速的Ruby實現。 「VE調查歷年來可以追溯到核心類 實現,這在大多數的實現都已經寫在 像C或Java中的‘快’的語言(Rubinius的有C++和Ruby 爲最核心的類,但具有。重點紅寶石)等一大批在Ruby中 性能較差的系統都可以直接歸因於濫用 或緩慢實施的核心方法*」 –