如何使用多个工作线程处理 logstash 中的多行?

How to process multilines in logstash with multiple worker threads?

我想使用多个工作线程使用 logstash 处理多行日志以提高性能,但多行过滤器不起作用: - https://github.com/elastic/logstash/pull/1591 - https://github.com/elastic/logstash/issues/1590

目前的解决方案:

显然 none 这些都很好,那么有没有人对此有合适的解决方案?

我最终使用了单独的 logstash 来处理多行。它被配置为使用一个工作线程并使用多行过滤器。如果性能仍然不佳,您可以添加更多仅使用一个工作线程的 logstash。然后当有人修复它时,我们将删除这个额外的 logstash 实例。

另一种方法是使用 log-courier 而不是 logstash-forwarder。它在将其发送到 logstash 之前执行多行:

https://github.com/driskell/log-courier/blob/master/docs/codecs/Multiline.md

在 logstash-forwarder 中也有支持此功能的请求:

https://github.com/elastic/logstash-forwarder/issues/309

我很好奇,您是如何将多行日志发送到特定的单线程 logstash 而将其余日志发送给其他人的?

还有一个选择:

  1. 使用 multiline 编解码器直接在输入中进行多行处理。显然这个位将是每个输入的单线程。

  2. 然后正常使用其余过滤器。如果提供了 -w <threads>,这将是多线程的,每个过滤器工作者。

Logstash Pipeline's Thread Model记录如下:

The thread model in Logstash is currently:

input threads | filter worker threads | output worker

尝试类似的东西,

 multiline {
        pattern => "(Stack trace:)|(^#.+)|(^\"\")|(  thrown+)|(^\s)"
        what    => "previous"
      }

我将它用于 Php 致命错误。