当日期已经匹配时,_dateparsefailure

时间:2016-09-21 10:17:11

标签: logstash date-parsing

我正在尝试配置logstash来处理一些测试日志,但我不断得到一个dateparsefailure,我不明白为什么。我的意见是

2016-09-18 00:00:02,013 UTC, idf="639b26a731284b43beac8b26f829bcab"

我的配置(我也尝试将时区包含在模式中):

input {
  file {
    path => "/tmp/test.log"
    start_position => "beginning"
  }
}

filter {
  date {
        match => ["message", "yyyy-MM-dd HH:mm:ss,SSS"]
        timezone => "UTC"
        add_field => { "debug" => "timestampMatched"}
   }
  grok {
    match => { "message" => "%{YEAR:year}-%{MONTHNUM:month}-%{MONTHDAY:day} %{HOUR:hour}:%{MINUTE:minute}:%{SECOND:second},%{NUMBER:milis} UTC, idf=\"%{WORD:idf}\""}
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
  }
  stdout {
    codec => rubydebug
  }
}

最后,错误:

{:timestamp=>"2016-09-21T10:04:32.060000+0000", :message=>"Failed parsing date from field", :field=>"message", :value=>"2016-09-18 00:00:02,013 UTC, idf=\"639b26a731284b43beac8b26f829bcab\"", :exception=>"Invalid format: \"2016-09-18 00:00:02,013 UTC, idf=\"639b26a731284b4...\" is malformed at \" UTC, idf=\"639b26a731284b4...\"", :config_parsers=>"yyyy-MM-dd HH:mm:ss,SSS", :config_locale=>"default=en_US", :level=>:warn, :file=>"logstash/filters/date.rb", :line=>"354", :method=>"filter"}

它表示它结束后的日期不正确。为什么会发生这种情况,不应该“停止搜索”,因为日期已经匹配了?

1 个答案:

答案 0 :(得分:2)

在使用date过滤器之前,首先必须使用grok分隔日期和邮件的其余部分。 date过滤器仅接受时间戳。如果您在该字段中有任何其他信息,则会出现您所描述的错误。

使用您提供的日志我会建议:

filter {
    grok {
        match => { "message" => "%{TIMESTAMP_ISO8601:timedate} %{GREEDYDATA}"}
    }
    date {
        match => [ "timedate" => "yyyy-MM-dd HH:mm:ss,SSS"]
    }
}

在这个最小的示例中,我匹配timedate字段中的时间戳,然后通过日期过滤器将其压缩。