用于 Java 堆栈跟踪的 Logstash 多行编解码器

用于 Java 堆栈跟踪的 Logstash 多行编解码器

logstash 文档表明您可以使用多行编解码器将 Java 堆栈跟踪日志条目中的多个缩进行折叠为单个事件:

https://www.elastic.co/guide/en/logstash/current/plugins-codecs-multiline.html

input {
   syslog {
       type => syslog
       port => 8514
       codec => multiline {
            pattern => "^\s"
            what => "previous"
       }
  }
}

这是基于 logstash 在行首找到一个缩进并将其与前一行相结合。

但是,我只能在 logstash 文档中找到对此的参考。一般用户社区似乎正在使用精心设计的 grok 过滤器来实现相同的效果。

我尝试了 logstash 提供的基本缩进模式,但不起作用。有没有其他人通过匹配缩进模式成功实现此功能?

答案1

是的,但输入不行syslog {}。我已经用输入和 Tomcat 日志完成了file {}。如果堆栈跟踪进入系统日志时每行都有一个新事件,并且仍然具有常见的系统日志前缀 datestamp 等,则将它们重新组装成单一堆栈转储会变得更加困难。这仍然可以做到,但需要更广泛的过滤器。

  1. 输入编解码器是不是多行;如果是每行一个事件,则多行编解码器无法处理。
  2. Grok 过滤器将系统日志消息分成几部分,并将 SYSLOGMESSAGE 部分放入其自己的字段中。
  3. 使用multiline {}SYSLOGMESSAGE 字段上的过滤器重新组装您的堆栈转储。
  4. 仅使用一个 filter-worker(-w标志),这是确保收集整个堆栈跟踪的唯一方法。

如果可能的话,最好file {}在发出堆栈跟踪的文件上使用编解码器,并使用已经找到的缩进方法。

相关内容