Logstash 读取tomcat错误日志

By | 2017年2月24日

最近搭建了elk日志分析系统、想读取一下tomcat的错误日志、但是一个异常由于换行总是分多次存储展示、导致不是很清晰的看一个错误日志信息、摸索了半天、搜索、测试终于搞定。

tomcat.conf 配置文件如下

input {
file {
type => “tomcat_error”
tags => [ “tomcat_error”, “log4j” ]
path => “/home/tomcat7/log/*.txt” # tomcat错误日志存放路径 自行定义
}
}
filter {
if [type] == “tomcat_error” {
multiline {
pattern => “^[^\[]”
what => “previous”
}
mutate {
split => [“message”, “|”]
}
grok {
match => {
“message” => “(?m)%{TIMESTAMP_ISO8601:logtime}”
}
}
}
}
output {
stdout {
codec => rubydebug
}
redis {
host => “115.28.240.103”
port => 6379
data_type => “list”
key => “logstash-tomcat”
password => “123456”
db => 0

}
}

==========================代码说明================================
logstash一般会只记录一行,所以这类的日志就看不全了。怎么办呢?logstash提供了一个功能解决了这个问题就是”multiline”
这个filter的功能顾名思义就是对多行的日志进行处理 这个是官网上的说明
multiline filter
This filter will collapse multiline messages into a single event.
The multiline filter is for combining multiple events from a single source into the same event.

下面看下格式

filter {
multiline {
type => “type” #类型,不多说
pattern => “pattern, a regexp” #参数,也可以认为是字符,有点像grep ,如果符合什么字符就交给下面的 what 去处理
negate => boolean
what => “previous” or “next” #这个是符合上面 pattern 的要求后具体怎么处理,处理方法有两种,合并到上面一条日志或者下面的日志
}
}

复制代码
The ‘negate’ can be “true” or “false” (defaults false). If true, a message not matching the pattern will constitute a match of the multiline filter and the what will be applied. (vice-versa is also true)
这个 negate 有两种 true 或者 false,默认是 true,如果选了false 的话估计就是取反的意思。
看看例子

filter {
multiline {
pattern => “^[^\[]”
what => “previous”
}
}

复制代码

这个例子是针对我上面的java日志写的,意思就是 如果不是以 “[“开头的日志 都跟上一个日志合并在一起。以此类推遇到其他的多行日志也可以按照这个方法来做合并。

Category: os 标签:

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注