【问题标题】:Logstash grok parse error parsing log fileLogstash grok 解析错误解析日志文件
【发布时间】:2015-05-01 14:38:12
【问题描述】:

我正在尝试解析这种日志格式:

http://localhost:8080/,200,OK,11382,date=Mon  27 Apr 2015 12:56:33 GMT;newheader=foo;connection=close;content-type=text/html;charset=ISO-8859-1;server=Apache-Coyote/1.1;

使用这个配置文件:

input {
  stdin{}
}


filter {
  grok {
        match => [ "message" , "%{URI:uriaccessed},%{NUMBER:httpcode},%{WORD:httpcodeverb},%{NUMBER:bytes},date=%{TIMESTAMP_ISO8601:logtimestamp};%{GREEDYDATA:msg}"]   
  }
  mutate{
        convert => ["httpcode","integer"]
        convert => ["bytes","integer"]
  }


  date {
    locale => "en"
    match => [ "logtimestamp" , "EEE dd MMM yyy HH:mm:ss" ] #Mon  27 Apr 2015 12:56:33 GMT
  }
}


output {
  stdout { codec => rubydebug }
}

但是,我遇到了 grok prase 失败,我不确定问题是什么。 似乎无法确定导致问题的模式。 任何想法/cmets 将不胜感激。

【问题讨论】:

    标签: parsing logstash grok


    【解决方案1】:

    TIMESTAMP_ISO8601 匹配:

    %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
    

    而且您的日期不是那种格式。似乎没有适合您的预定义模式,所以这里有一个可行的模式:

    %{DAY} +%{MONTHDAY} %{MONTH} %{YEAR} +%{TIME} %{WORD}
    

    请注意,%{TZ} 不喜欢 GMT,所以我使用了 %{WORD}。

    祝你好运。

    【讨论】:

      【解决方案2】:

      您的日志示例中的时间戳与 TIMESTAMP_ISO8601 模式不匹配。您可以尝试其他模式,但我怀疑“Mon”和“27”之间的双空格会出现问题,而且我看不到“GMT”与 TZ 模式匹配。您可以尝试使用 TZORGMT 条目添加您自己的模式文件,然后在这样的匹配中使用它:

      TZORGMT (?:[PMCE][SD]T|UTC|GMT)
      %{URI:uriaccessed},%{NUMBER:httpcode},%{WORD:httpcodeverb},%{NUMBER:bytes},date=%{DAY}  %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{TZORGMT}
      

      https://grokdebug.herokuapp.com/ 的 grok 调试器有助于调试此类事情。

      如果您接下来要进行 date { match },则需要为此编写一个模式,例如:

      "dd MM YYYY HH:mm:ss ZZ"
      

      【讨论】:

      • 谢谢!对于 grokdebug 链接,我之前已经检查过,并且总是尝试将其中的 logstash 模式文件中的模式作为自定义模式放入其中。这次当我重新访问该站点时,我意识到它确实内置了所有的 logstash 模式。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2013-06-24
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多