Java logstash 2.3.3多行过滤器不与多个工作人员一起工作

Java logstash 2.3.3多行过滤器不与多个工作人员一起工作,java,logstash,jruby,elastic-stack,Java,Logstash,Jruby,Elastic Stack,我已经开始与超过16名的多个工人进行日志存储 我有多行消息,比如java异常/java跟踪,希望将它们合并到一个事件中。早些时候,它按预期工作,但在升级我的麋鹿堆栈后,它正在崩溃:-( 我的日志存储过滤器: filter { multiline { pattern => "(^[a-zA-Z.]+(?:Error|Exception): .+)|(^\s+at .+)|(^\s+... \d+ more)|(^\s*Caused by:.+)" what =>

我已经开始与超过16名的多个工人进行日志存储

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

我的日志存储过滤器:

filter {
  multiline {

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

: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版中引入了工作线程,但由于多行筛选器不是线程安全的,因此它阻止使用多个工作线程

因此,您必须:

  • 使用。
    例如,要加入java异常stacktrace:

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

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

您可以查看此文件以了解更多信息:,谢谢您的回复。我使用logstash forwarder作为发货人,如果您可以在其上添加一些lite,那将非常好。如果您可以共享配置示例服务器和客户端,那将非常好。我需要使用将java异常以及其他日志从所有应用程序服务器发送到logstash服务器logstash转发器,示例日志:com.example.myproject.Book.getTitle(Book.java:16)处的线程“main”java.lang.NullPointerException中的异常,com.example.myproject.Author.getBookTitles(Author.java:25)处的异常,com.example.myproject.Bootstrap.main(Bootstrap.java:14)我不知道logstash转发器的配置。我已经更新了多行编解码器的答案,但您必须检查它是否按照您的用例预期工作。正则表达式来自。它工作正常,但不符合预期。当有大量消息/日志时,出于某种原因,它会停止工作。目前,在单个框中,我运行了两个inst一个,我已经配置了16个工人,而另一个,我只有1个工人(我在这里推多条消息/日志)。我知道这不是永久的解决方案,但它对我来说是有用的:Hi @ MITTHUNSIHHUKUR,如果答案已经解决了你的问题,请考虑接受它。这向更广泛的社区表明,您已经找到了解决方案。但没有义务这样做。