我用logstashparsing多行log4j日志,我得到了最奇怪的问题。
以下是一些相关日志条目的示例:
2016-01-05 13:55:26,275 DEBUG [class] [thread] - bla 2016-01-05 13:55:26,275 DEBUG [class] [thread] - blaa 2016-01-05 13:55:26,275 DEBUG [class] [thread] - blaaa 2016-01-05 13:55:26,275 DEBUG [class] [thread] - blaaaa 2016-01-05 13:55:26,282 DEBUG [class] [thread] - blaaaaa 2016-01-05 13:55:26,282 DEBUG [class] [thread] - blaaaaaa 2016-01-05 13:55:27,030 DEBUG [class] [thread] - blaaaaaaa
这是我log4j的logstashconfiguration:
如果[type] ==“log4j”{
多行{
pattern =>“(^%d {yyyy-MM-dd HH:mm:ss,SSS})”
什么=>以前
否定=>真实
}
grok {
match => [“message”,“%{TIMESTAMP_ISO8601:logdate}%{LOGLEVEL:loglevel}(?。*)”]
}
date{
match => [“logdate”,“yyyy-MM-dd HH:mm:ss,SSS”,“ISO8601”]
时区=>“欧洲/巴黎”
}
}
结果很好; 没有grokparsing错误,date是好的,日志级别是好的,但是,消息内容是重复的:
2016-01-05 13:55:26,275 DEBUG [class] [thread] - bla 2016-01-05 13:55:26,275 DEBUG [class] [thread] - blaa 2016-01-05 13:55:26,275 DEBUG [class] [thread] - blaaa 2016-01-05 13:55:26,275 DEBUG [class] [thread] - blaaaa 2016-01-05 13:55:26,282 DEBUG [class] [thread] - blaaaaa 2016-01-05 13:55:26,282 DEBUG [class] [thread] - blaaaaaa 2016-01-05 13:55:27,030 DEBUG [class] [thread] - blaaaaaaa [class] [thread] - bla 2016-01-05 13:55:26,275 DEBUG [class] [thread] - blaa 2016-01-05 13:55:26,275 DEBUG [class] [thread] - blaaa 2016-01-05 13:55:26,275 DEBUG [class] [thread] - blaaaa 2016-01-05 13:55:26,282 DEBUG [class] [thread] - blaaaaa 2016-01-05 13:55:26,282 DEBUG [class] [thread] - blaaaaaa 2016-01-05 13:55:27,030 DEBUG [class] [thread] - blaaaaaaa
并且时间戳和日志级别从重复内容的第一行中丢失!
任何人都知道这是为什么发生?
任何帮助是受欢迎的。
473183469的发言后再编辑
多行筛选器中的date模式不能按预期工作。
我已经修改logstash的configuration来结合仅来自exception的行(就像un 文档一样 )
如果[type] ==“log4j”{
多行{
pattern =>“^ \ s”
什么=>“前一个”
}
多行{
pattern =>“^引起”
什么=>“前一个”
}
grok {
match => [“message”,“%{TIMESTAMP_ISO8601:logdate}%{LOGLEVEL:loglevel}(?。*)”]
}
date{
match => [“logdate”,“yyyy-MM-dd HH:mm:ss,SSS”,“ISO8601”]
时区=>“欧洲/巴黎”
}
}
我已经添加了另一个多行filter,以防在堆栈跟踪中出现“由…引起”行。
这工作正常,除了消息的内容以相同的方式重复! 再次缺less时间戳和日志级别:
016-01-06 09:46:00,842错误[coyntry.org.web.LoaderListener] [线程-6] - java.lang.RuntimeException:java.io.FileNotFoundException:file(No such file or directory)
在coyntry.org.web.WebProperties.getDatabaseProperties(WebProperties.java:174)
在coyntry.org.web.WebProperties.getServiceLocator(WebProperties.java:156)
在coyntry.org.web.LoaderListener $ LoaderThread.run(LoaderListener.java:74)
在java.lang.Thread.run(Thread.java:745)
引起:java.io.FileNotFoundException:文件(没有这样的文件或目录)
在java.io.FileInputStream.open(Native Method)
在java.io.FileInputStream。(FileInputStream.java:146)
在coyntry.org.web.WebProperties.getDatabaseProperties(WebProperties.java:168)
[coyntry.org.web.LoaderListener] [Thread-6] - java.lang.RuntimeException:java.io.FileNotFoundException:file(No such file or directory)
... 3更多,
在coyntry.org.web.WebProperties.getDatabaseProperties(WebProperties.java:174)
在coyntry.org.web.WebProperties.getServiceLocator(WebProperties.java:156)
在coyntry.org.web.LoaderListener $ LoaderThread.run(LoaderListener.java:74)
在java.lang.Thread.run(Thread.java:745)
引起:java.io.FileNotFoundException:文件(没有这样的文件或目录)
在java.io.FileInputStream.open(Native Method)
在java.io.FileInputStream。(FileInputStream.java:146)
在coyntry.org.web.WebProperties.getDatabaseProperties(WebProperties.java:168)
... 3更多
我真的不明白是怎么回事。
你真的需要multiline吗?
是不是multiline用来再次连接一个由rsyslog分割的日志?
典型的例子是java堆栈错误跟踪消息。
如果rsyslog在“\ n”分割堆栈跟踪错误,我们将不再了解任何东西,所以我们需要重新安排消息。
您的示例是不同的,因为每个日志行看起来独立于其他日志行。
总之:重复以及标题抑制来自multiline 。 要么根据您的使用情况修复multiline ,要么(正如我怀疑的那样)将其移除。