我有一些 RFC-5424 格式的系统日志消息。
我使用logstash grok过滤器和java正则表达式模式匹配来解析日志。我正在比较相同输入的两种方法。
java 正则表达式解析正在从 stdin 读取输入并在单线程中运行。
Logstash 还从标准输入读取输入,我已将工作线程配置为 1,并且管道批量大小等于消息数,以便所有消息都在一批中处理。
我可以看到java正则表达式解析比grok过滤器快得多。
观察结果:
输入 - 300K 消息
Java 正则表达式 - 1500 毫秒
Logstash Grok - 每次超过 1 分钟。
为什么 Logstash Grok 比 java regex 慢这么多。 Grok 还应该在后端使用 java 正则表达式。
最佳答案
如果没有更多细节,很难说出为什么特定模式在 Grok 或 Java 中更快或更快,但有一件事是肯定的:正则表达式引擎不同。
Java 使用特殊的 java.util.regex
模块和 Grok uses Oniguruma正则表达式引擎。他们可以用自己的方式处理相同的模式和字符串。
关于java - Logstash grok 过滤器比 Java 正则表达式模式匹配慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43222863/