如何使用 logstash 处理跨行日志 ?

Posted 大数据学徒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用 logstash 处理跨行日志 ?相关的知识,希望对你有一定的参考价值。

问题

有时一条日志会跨多行,比如 Java 的错误 stacktrace,logstash 如何将多行日志合并成一条进行处理?

例如,想要把这样的日志:

[2020-01-15] ERROR some exception: second exception third exception

处理成如下形式

[2020-01-15] ERROR some exception:\n second exception\n third exception

思路

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

1.multiline 插件可以实现该功能,但是输入不能是来自多个主机的(比如各种 beat),因为多个主机的日志会混在一起,产生未知的结果。2.multiline 插件的基本原理是:当一行日志匹配或不匹配某个预定义的模式时,将这条日志与上一条或下一条日志合并成一条。3.multiline 有三个重要参数:pattern,negate,what。pattern 是模式字符串,可以是正则表达式,也可以是预定义的模式名;negate 的可选值为 true 或者 false,true 表示匹配了 pattern 进行合并,false 表示不匹配 pattern 时进行合并;what 的可选值为 previous 或者 next,previous 表示合并到上一行,next 表示合并到下一行。

答案

参考配置如下:

input { file { path => ["/Users/iamabug/1.log"] codec => multiline { # 可以不用写完整的正则表达式,只写开头,能够区分是换行的日志即可 pattern => "^\[\d{4}-\d{2}-\d{2}\]\s+[a-zA-Z]+\s+[\s\S]+" negate => true what => "previous" } }}
output { # 为了测试方便,直接输出在终端 stdout {}}

验证

1.在 logstash 安装目录执行如下命令:

bin/logstash --path.config config/logstash.conf

    2.向 /Users/iamabug/1.log 末尾添加如下日志

[2020-01-15] ERROR some exception:second exceptionthird exception[2020-01-15] INFO no problem

注意:这里额外添加了一条符合模式的单行日志,否则 logstash 会一直等待。

    3.观察 logstash 的输出:

可以看到,多行日志被使用换行符拼接成了一条日志,存储在 message 中。




以上是关于如何使用 logstash 处理跨行日志 ?的主要内容,如果未能解决你的问题,请参考以下文章

安装logstash及logstash的初步使用-处理DNS日志

如何使用Logstash

日志收集工具logstash简介

logstash之multiline插件,匹配多行日志

利用Logstash plugins做更多的事情

Logstash5.4.1解析日志报错处理