2

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

目前的解决方案:

  • 使用多个 logstash-forwarder 并将它们发送到不同的伐木工人端口(扩展性非常差:每个具有多行的日志文件的新 logstash-forwarder)
  • 使用带有redis输出的额外logstash-receiver和从redis读取并使用一个工作线程的额外logstash索引器(https://groups.google.com/forum/#!msg/logstash-users/fUhulxmZ0Ek/HfGev7BOhCUJ
  • 作为一个黑客,我尝试进行类型检查,该类型检查可以在具有伐木工人输出的logstash输出部分中具有多行,并将它们重新发送到具有编解码器多行但它不处理它们的同一个logstash实例的不同伐木工人输入(不同端口)
  • 我也可以使用读取事件的rabbitMQ,但是我应该在将多行发送到rabbitMQ之前合并多行(我应该怎么做?)
  • rsyslog 也可以发送日志,但它需要特殊格式的多行日志,并且不适用于正则表达式(https://serverfault.com/questions/622035/how-do-i-configure-rsyslog-to-deal-with-mysql -slow-query-log-multi-line-messages )

显然这些都不是很好,那么有没有人对此有一个体面的解决方案?

4

4 回答 4

2

另一种方法是使用 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

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

于 2015-05-28T12:52:08.557 回答
2

还有另一种选择:

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

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

Logstash Pipeline线程模型记录如下:

Logstash 中的线程模型目前是:

input threads | filter worker threads | output worker
于 2015-08-21T18:39:27.803 回答
0

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

于 2015-03-26T22:19:44.190 回答
-2

尝试类似的东西,

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

我将它用于 Php 致命错误。

于 2016-02-18T13:15:50.237 回答