首页 文章

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

提问于
浏览
1

我已经开始使用多个 Worker > 16的logstash .

我有多行消息,如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.

1 回答

  • 2

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

    所以你必须要么:

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

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

相关问题