项目地址:https://gitee.com/lwydyby/springcloud-adplatform
该项目的日志目前可以分为三种:
(1)项目启动日志
(2)controller层的操作日志(通过aop实现记录)
(3)项目非controller层异常日志
由于分为3种格式,则需要三种macth进行匹配:
grok {
match => ["message","%{TIMESTAMP_ISO8601:timestamp} \[%{NOTSPACE:thread}\] %{WORD:type} com.gameley.common.Interceptor.HttpAspect - %{GREEDYDATA:log_json}",
"message","%{TIMESTAMP_ISO8601:timestamp} \[%{NOTSPACE:thread}\] %{WORD:type} %{NOTSPACE:classname} \- (?<error>[\s\S]*)",
"message","%{TIMESTAMP_ISO8601:timestamp} \[%{NOTSPACE:thread}\] %{WORD:type} %{NOTSPACE:classname} \- %{GREEDYDATA:otherinfo}" ]
}
使用logstash自带表达式的格式一般为:%{SYNTAX:SEMANTIC}
即: SYNTAX代表匹配值的类型,例如,
0.11可以
NUMBER类型所匹配,
10.222.22.25可以使用
IP匹配。
SEMANTIC
*表示存储该值的一个变量声明,
client_ip_address`这个字段里边,类似数据库的列名
具体可参考:http://blog.csdn.net/liukuan73/article/details/52318243
而自定义匹配需要使用正则表达式,格式为
( ?<列名>正则表达式)
注:[\s\S]*为匹配剩余所有的字符,我这里是用来匹配错误日志的详细信息的
由于controller层日志是以json格式进行的存储,除使用grok之外还需使用 json进行解析
json {
source => "log_json"
target => "content"
remove_field=>["logjson"]
}
完整配置文件为:
input {
beats {
port => 5044
}
}
filter{
grok {
match => ["message","%{TIMESTAMP_ISO8601:timestamp} \[%{NOTSPACE:thread}\] %{WORD:type} com.gameley.common.Interceptor.HttpAspect - %{GREEDYDATA:log_json}",
"message","%{TIMESTAMP_ISO8601:times