ELK Stack插件——使用multiline插件处理Java等多行日志
在Java日志中每一行at其实都属于同一个事件,但是又被分行显示,所以如果不做处理的话会造成阅读上的不便。为了解决这个问题,可以使用multiline插件,该插件在Logstash和Filebeat中都可以进行配置。官方对于multiline插件的描述是“Merges multiline messages into a single event”,翻译过来就是将多行信息合并为单一事件。下图是没有经过处理的Java日志,可以看到每一行at都被当成了单独的日志:
通过分析日志可以看出每一个单独的事件都是以“[ ]”方括号开始的,所以可以把这个方括号当做特征,把一个“[”开头的行,与下一个“[“开头的行合并成一个事件。如果是其他日志的话也有固定的特征,这个根据实际情况做调整即可。使用multiline插件语法如下:
vim /etc/logstash.conf input{ file{ path => "/var/log/*" type => "java" start_position => "beginning" codec => multiline{ pattern => "^\[" #正则表达式,用来做规则匹配 negate => true #negate是对pattern的结果做判断是否匹配,默认值是false代表匹配,而true代表不匹配,这里并没有反,因为negate本身是否定的意思,在这里就是不以大括号开头的内容才算符合条件,后续才会进行合并操作 what => previous #next或者previous二选一,previous代表codec将把匹配内容与之前的内容合并,next代表之后的内容 } } } output{ if [type] == "java" { elasticsearch { hosts=> ["192.168.44.129:9200"] index=> "javatest-%{+YYYY-MM}" } } }
经过插件整理后的信息直观多了,如下图:
版权声明:本文章版权归数据库运维网(www.ywdba.cn)所有。如需引用本站内容,请注明来源及作者。
评论