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 等,则将它们重新组装成单一堆栈转储会变得更加困难。这仍然可以做到,但需要更广泛的过滤器。
- 输入编解码器是不是多行;如果是每行一个事件,则多行编解码器无法处理。
- Grok 过滤器将系统日志消息分成几部分,并将 SYSLOGMESSAGE 部分放入其自己的字段中。
- 使用
multiline {}
SYSLOGMESSAGE 字段上的过滤器重新组装您的堆栈转储。 - 仅使用一个 filter-worker(
-w
标志),这是确保收集整个堆栈跟踪的唯一方法。
如果可能的话,最好file {}
在发出堆栈跟踪的文件上使用编解码器,并使用已经找到的缩进方法。