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

时间:2016-06-23 18:38:15

标签: java logstash jruby elastic-stack

我已经开始使用多个工作人员进行logstash> 16。

我有多行消息,例如java exception / java trace,并希望将它们合并到一个事件中。早些时候,它按预期工作,但在升级我的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.

1 个答案:

答案 0 :(得分:2)

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

所以你必须要么:

  • 使用multiline codec
    例如,加入java异常stacktrace:

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

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