2015-07-10 106 views
-1

我的日志数据就像,Logstash grok匹配模式的消息字段

log messages in the file

总共有4行(从时间的日期开始)。

我神交模式是:

grok { 
match => { "message" => "%{TIMESTAMP_ISO8601:time} \[%{NUMBER:thread}\] %{LOGLEVEL:loglevel} %{JAVACLASS:class} - %{GREEDYDATA:msg} " } } 

问题是:

我只得到味精(GREEDYDATA)的一些数据提出。

EX:

下面数据缺失当第四线解析

missed data

日志是:

2015-01-31 15:58:57,400 [9] ERROR NCR.AKPOS.Enterprise_Comm.EventSender - EventSender.SendInvoice() Generate Message Error: System.ArgumentNullException: Value cannot be null. 
Parameter name: value 
    at System.Xml.Linq.XAttribute..ctor(XName name, Object value) 
    at NCR.AKPOS.Enterprise_Comm.MessageHandlerObjecttoXMLHelper.CreateXMLFromInvoice(Invoice invoice, Customer_ID customer_id 

回答

2

登录藏匿通常解析每个线在时间。 对于java例外,您需要查看multiline plugin。 在这里看到一个例子:https://gist.github.com/smougenot/3182192

你的grok格式似乎没问题,但没有一个例子无法测试。 您可以使用grok调试器应用程序来测试您的模式。 https://grokdebug.herokuapp.com/

+0

我已经使用GrokDebugger @Yogesh_D进行了检查。我发现下面的页面为我的问题,但无法解决我的问题http://stackoverflow.com/questions/22172879/how-to-process-logstash-multiline-filters-message-field –

+0

那么你需要编辑你的问题有日志,你正试图解析,所以我们可以去看看它 –

+0

请参阅编辑的帖子添加日志在帖子的末尾 –

0

距离%除去后空格{GREEDYDATA:MSG} “}至 %{GREEDYDATA:MSG}”}

所以,总过滤器的配置是:

filter { 
multiline{ 
     pattern => "^%{TIMESTAMP_ISO8601}" 
     what => "previous" 
     negate=> true 
    } 
# Delete trailing whitespaces 
    mutate { 
    strip => "message" 
    } 
# Delete \n from messages 
mutate { 
    gsub => ['message', "\n", " "] 
} 

# Delete \r from messages 
mutate { 
    gsub => ['message', "\r", " "] 
} 
grok { 
    match => { "message" => "%{TIMESTAMP_ISO8601:time} \[%{NUMBER:thread}\] %{LOGLEVEL:loglevel} %{JAVACLASS:class} - %{GREEDYDATA:msg}" } 
} 
if "Exception" in [msg] { 
mutate { 
    add_field => { "msg_error" => "%{msg}" } 
} 
} 
}