我有一些RFC-5424格式的系统日志消息。
我正在使用logstash grok过滤器和java正则表达式模式匹配来解析日志。我正在比较两种相同输入的方法。
java regex解析是从stdin读取输入并在单线程中运行。
Logstash也从stdin读取输入,我已将工作线程配置为1,管道批处理大小等于消息数,以便一批处理所有消息。
我可以看到java正则表达式解析比grok过滤器快得多。
观察:
输入 - 300K讯息
Java Regex - 1500毫升
Logstash Grok - 每次超过1分钟。
为什么Logstash Grok比java正则表达式要慢得多。 Grok也应该在后端使用java正则表达式。
答案 0 :(得分:0)
如果没有更多细节,很难说Grok或Java中特定模式为何更慢或更快,但有一点是肯定的:正则表达式引擎不同。
Java使用特殊的java.util.regex
模块和Grok uses Oniguruma正则表达式引擎。他们可以按照自己的方式处理相同的模式和字符串。