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

Regex 如何使用多个工作线程处理logstash中的多行?,regex,multithreading,logstash,multiline,logstash-forwarder,Regex,Multithreading,Logstash,Multiline,Logstash Forwarder,为了提高性能,我想使用多个工作线程处理带有logstash的多行日志,但多行筛选器不起作用: - - 目前的解决方案: 使用多个logstash转发器,并将其发送到不同的伐木工人端口(缩放效果非常差:每个具有多行的日志文件都有新的logstash转发器) 使用具有redis输出的额外日志存储接收器和从redis读取并使用一个工作线程的额外日志存储索引器 () 作为一个黑客,我尝试在logstash输出部分中设置一个类型检查,使多行与lumberjack输出一起,并将它们重新发送到同一log

为了提高性能,我想使用多个工作线程处理带有logstash的多行日志,但多行筛选器不起作用: - -

目前的解决方案:

  • 使用多个logstash转发器,并将其发送到不同的伐木工人端口(缩放效果非常差:每个具有多行的日志文件都有新的logstash转发器)
  • 使用具有redis输出的额外日志存储接收器和从redis读取并使用一个工作线程的额外日志存储索引器 ()
  • 作为一个黑客,我尝试在logstash输出部分中设置一个类型检查,使多行与lumberjack输出一起,并将它们重新发送到同一logstash实例的不同lumberjack输入(不同端口),该输入具有编解码器多行,但不处理它们
  • 我也可以使用读取事件的rabbitMQ,但在将多行发送到rabbitMQ之前,我应该合并多行(我应该怎么做?)
  • rsyslog也可以发送日志,但它需要特殊格式的多行日志,不能与regexp()一起使用

显然,这些都不好,那么有没有人有一个合适的解决方案呢?

我最终使用了一个separate logstash来处理多行。它被配置为使用一个工作线程并使用多行筛选器。如果性能仍然不好,可以添加更多只使用一个工作线程的日志存储。然后,当有人修复它时,我们将删除这个额外的logstash实例。

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

logstash forwarder中也有支持这一点的请求:


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

还有另一种选择:

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

  • 然后正常使用其余的过滤器。如果提供了
    -w
    ,则这将是多线程的,每个筛选器工作线程

  • 文件记录如下:

    Logstash中的线程模型当前为:

    input threads | filter worker threads | output worker
    
    试一试

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

    我使用它来处理Php致命错误。

    多行筛选器没有帮助?您好@Magnubsäck,不幸的是,多行筛选器无法处理多个工作线程,因此我无法使用此参数。我询问并估计了修复时间,但仍在等待答复。()你找到了正确的答案(“你不能”)。您可能会考虑运行两个LogSTASH索引器,一个是多行的,另一个是(多个工作者)。谢谢您的建议,我在GITHUB站点也得到了类似的答案:@ BalassValgGyi你找到了解决这个问题的方法吗?我现在正遇到这个问题。我启动了第二个使用不同端口的日志存储,以及第二个发送到此端口的日志存储转发器。例如: