我有一个在Docker容器中运行的ELK 5.5.1,它将解析我的大多数日志,除了源自我的Spring应用程序的日志 . 有点用完了想法 .
我已将其追溯到logstash-> elasticsearch管道 . Filebeat正在完成它的工作,Logstash正在根据tailing lostash的stdout日志从相关应用程序接收日志 .
我擦除了存储我的ELK数据的docker卷,并使用filebeat开始新鲜,只是转发有问题的日志 .
采取这样的日志行:
FINEST|8384/0|Service tsoft_spring|17-08-31 14:12:01|2017-08-31 14:12:01.260 INFO 8384 --- [ taskExecutor-2] c.t.s.c.s.a.ConfirmationService : Will not persist empty response notes
使用非常小的logstash配置,它将最终保留在elasticsearch中:
input {
beats {
port => 5044
ssl => false
}
}
filter {
if [message] =~ /tsoft_spring/ {
grok {
match => [ "message", "%{GREEDYDATA:logmessage}" ]
}
}
}
output {
stdout { }
elasticsearch { hosts => ["localhost:9200"] }
}
使用更完整的配置,日志被弹性忽略,没有grokparsefailure,没有dateparsefailure:
input {
beats {
port => 5044
ssl => false
}
}
filter {
if [message] =~ /tsoft_spring/ {
grok {
match => [ "message", "%{WORD}\|%{NUMBER}/%{NUMBER}\|%{WORD}%{SPACE}%{WORD}\|%{TIMESTAMP_ISO8601:timestamp}\|%{TIMESTAMP_ISO8601}%{SPACE}%{LOGLEVEL:loglevel}%{SPACE}%{NUMBER:pid}%{SPACE}---%{SPACE}%{SYSLOG5424SD:threadname}%{SPACE}%{JAVACLASS:classname}%{SPACE}:%{SPACE}%{GREEDYDATA:logmessage}" ]
}
date {
match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss" ]
}
}
}
output {
stdout { }
elasticsearch { hosts => ["localhost:9200"] }
}
我已经检查过这个模式会解析那条线,使用http://grokconstructor.appspot.com/do/match#result,我可以发誓它上周末正在工作,但可能是我的想象力 .
1 回答
也许这里的问题不在你的grok过滤器中,而是在日期匹配中 . 结果是0017年,而不是2017年 . 也许这就是为什么你在ES找不到这个活动的原因?你能试试这个: