java - Logstash grok 过滤器比 Java 正则表达式模式匹配慢

标签 java regex logstash logstash-grok

我有一些 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/

相关文章:

java - SLF4J 链接错误

java - 获取最接近数组中数字的值

regex - grails的任何BDD框架(spock/geb/easyb/other)是否支持人类可读描述的正则表达式解析?

PHP获取字符串中每个第一个字符的位置到数组中

elasticsearch - 用于 php monolog 多行(stacktrace)日志的 Logstash grok 过滤器配置

elasticsearch - 从 filebeat 到 logstash 的连接被拒绝

json - 如何配置 JBoss AS 7/EAP 6 以 JSON 格式登录?

java - 我是否达到了最大允许的 HDFS block 大小

regex - 正则表达式用于替换未用方括号括起来的子字符串出现的情况

java - 需要帮助了解 Logback 的参数化日志记录优化