java - Logstash 2.3.3 多行过滤器不适用于多个工作人员

标签 java logstash jruby elastic-stack

我已经与多个工作人员启动了logstash > 16。

我有多行消息,例如 java 异常/java 跟踪,并希望将它们合并到单个事件中。早些时候,它按预期工作,但升级我的 ELK 堆栈后它就崩溃了:-(

我的logstash过滤器:

filter {
  multiline {

    pattern => "(^[a-zA-Z.]+(?:Error|Exception): .+)|(^\s+at .+)|(^\s+... \d+ more)|(^\s*Caused by:.+)"
    what => "previous"
  }
}

logstash 日志:

:message=>"Warning: Manual override - there are filters that might not work with multiple worker threads", :worker_threads=>16, :filters=>["multiline"], :level=>:warn}
Exception in pipelineworker, the pipeline stopped processing new events, please check your filter configuration and restart Logstash.

最佳答案

如果您已从 Logstash 版本 1.5 升级,这是正常的。
在 2.0 版本中引入了工作线程,但由于多行过滤器不是线程安全的,因此它阻止使用多个工作线程。

所以你必须:

  • 使用multiline codec .
    例如加入java异常堆栈跟踪:

    input {
      stdin {
        codec => multiline {
          pattern => "(^.+Exception: .+)|(^\s+at .+)|(^\s+... \d+ more)|(^\s*Caused by:.+)"
          what => "previous"
        }
      }
    }
    
  • 在您的 Shipper 上执行多行操作(beaver 和 filebeat 都可以配置为执行此操作)

  • 仅使用一个工作线程(在这种情况下,您可以使用 Logstash 的多个实例来使用所有 CPU 核心,但请记住,多行过滤器最终将被删除)。

关于java - Logstash 2.3.3 多行过滤器不适用于多个工作人员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37999355/

相关文章:

java - 如何在JAVA中合并2个while循环以避免重复

java - Spring Boot 应用程序 : Could not resolve placeholder in application. 属性?

elasticsearch - Logstash将Mongo数据同步到ElasticSearch

java - 锯齿状阵列 : Illegal Start of Expression

elasticsearch - 如果我可以通过 REST 将数据发送到 elasticsearch,为什么要安装 logstash?

csv - 将 csv 导入 elasticsearch

java - Java、Scala、Groovy 和 jRuby 的平台将用什么语言实现?

ruby-on-rails - output_safety.rb :34 warning: regexp match/. ../n 对 UTF-8 字符串

java - 在 JRuby 生成的 .class/.java 文件上实现 Java 接口(interface)

Java 扫描仪问题,Notecard 类