Logstash grok匹配模式的消息字段

时间:2015-07-10 11:47:17

标签: regex logstash logstash-grok

我的日志数据就像,

log messages in the file

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

我的格言模式是:

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

问题是:

我只收到了 msg (GREEDYDATA)的一些数据。

EX:

第4行解析

数据缺失

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 个答案:

答案 0 :(得分:2)

日志存储通常一次解析每一行。 对于java异常,您需要查看multiline plugin。 请在此处查看示例:https://gist.github.com/smougenot/3182192

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

答案 1 :(得分:1)

只需将%{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}" }
}
}
}