ELK Stack插件——使用multiline插件处理Java等多行日志

TangLu 运维 2017-04-25 8168 0

在Java日志中每一行at其实都属于同一个事件,但是又被分行显示,所以如果不做处理的话会造成阅读上的不便。为了解决这个问题,可以使用multiline插件,该插件在Logstash和Filebeat中都可以进行配置。官方对于multiline插件的描述是“Merges multiline messages into a single event”,翻译过来就是将多行信息合并为单一事件。下图是没有经过处理的Java日志,可以看到每一行at都被当成了单独的日志:

multiline1.png


通过分析日志可以看出每一个单独的事件都是以“[ ]”方括号开始的,所以可以把这个方括号当做特征,一个“[”开头的行,与下一个“[“开头的行合并成一个事件如果是其他日志的话也有固定的特征,这个根据实际情况做调整即可。使用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}"
    }
  }
}


经过插件整理后的信息直观多了,如下图:

multiline2.png


评论