繁体   English   中英

Logstash Grok解析问题

[英]Logstash Grok Parsing Issue

我正在使用Logstash读取一些日志文件。 这是一些数据源记录

<2016-07-07 00:31:01>  Start
<2016-07-07 00:31:59>  Warning - Export_Sysem 6 (1) => No records to be exported
<2016-07-07 00:32:22>  Export2CICAP (04) => Export PO : 34 record(s)
<2016-07-07 00:32:22>  Export2CICAP (04) => Export CO : 87 record(s)
<2016-07-07 00:32:22>  Export2CICAP (04) => Export FC

这是我的conf文件

grok{
    match => {"message" => [
    '<%{TIMESTAMP_ISO8601:Timestamp}> (%{WORD:Level} - )%{NOTSPACE:Job_Code} => %{GREEDYDATA:message}',     
    '<%{TIMESTAMP_ISO8601:Timestamp}>  %{WORD:Parameter} - %{GREEDYDATA:Message}',
    '<%{TIMESTAMP_ISO8601:Timestamp}>  %{WORD:Status}',
    ]}
}

这是我的输出的一部分

   {
       "message" => "??2016-07-07 00:31:01>  Start\r?",
      "@version" => "1",
    "@timestamp" => "2016-07-08T03:22:01.076Z",
          "path" => "C:/CIGNA/Export.log",
          "host" => "SIMSPad",
          "type" => "txt",
          "tags" => [
        [0] "_grokparsefailure"
    ]
}
{
       "message" => "<2016-07-07 00:31:59>  Warning - Export_Sysem 6 (1) => No records to be exported\r?",
      "@version" => "1",
    "@timestamp" => "2016-07-06T16:31:59.000Z",
          "path" => "C:/CIGNA/Export.log",
          "host" => "SIMSPad",
          "type" => "txt",
     "Timestamp" => "2016-07-07 00:31:59",
     "Parameter" => "Warning",
       "Message" => "Export_Sysem 6 (1) => No records to be exported\r?"
}
{
       "message" => "<2016-07-07 00:32:22>  Export2CICAP (04) => Export CO : 87 record(s)\r?",
      "@version" => "1",
    "@timestamp" => "2016-07-06T16:32:22.000Z",
          "path" => "C:/CIGNA/Export.log",
          "host" => "SIMSPad",
          "type" => "txt",
     "Timestamp" => "2016-07-07 00:32:22",
        "Status" => "Export2CICAP"
}

从输出中可以看出, 第一个输出消息具有grok解析错误,而其他两个结果未完全解析该消息 我应该如何修改我的grok语句,以便它可以完全解析消息?

对于第一个消息,问题来自两个?? 不会出现在模式中,从而创建_grokparsefailure

第二和第三条消息未完全解析,因为前两个模式与消息不匹配,因此该消息由最后一个模式进行解析。

对于第二条消息,如果您希望使用第一种模式( <%{TIMESTAMP_ISO8601:Timestamp}> (%{WORD:Level} - )%{NOTSPACE:Job_Code} => %{GREEDYDATA:message}<%{TIMESTAMP_ISO8601:Timestamp}> (%{WORD:Level} - )%{NOTSPACE:Job_Code} => %{GREEDYDATA:message} ,模式为假:

  • ()%{WORD:Level} -周围%{WORD:Level} -不会出现在日志中。
  • :Timestamp}>%{WORD:Level}之间缺少空格。 在日志中,模式中只有两个,只有一个。 请注意,您可以使用%{SPACE}来避免此问题(因为%{SPACE}将匹配任意数量的空格)
  • %{NOTSPACE:Job_Code}匹配一个字符序列,没有任何空格,但是Export_Sysem 6 (1)有一个空格,因此Job_Code将是Export_Sysem并且模式中的=>将阻止与第一个模式的成功匹配。

正确的模式:

<%{TIMESTAMP_ISO8601:Timestamp}>  %{WORD:Level} - %{DATA:Job_Code} => %{GREEDYDATA:message}

对于第三条消息,我看不到应该使用哪种模式。

如果您添加更多详细信息,我将更新我的答案。

供参考: grok模式定义

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM