我已经与多个工作人员启动了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/