我正在尝试配置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"}
它表示它结束后的日期不正确。为什么会发生这种情况,不应该“停止搜索”,因为日期已经匹配了?
答案 0 :(得分:2)
在使用date
过滤器之前,首先必须使用grok
分隔日期和邮件的其余部分。 date
过滤器仅接受时间戳。如果您在该字段中有任何其他信息,则会出现您所描述的错误。
使用您提供的日志我会建议:
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timedate} %{GREEDYDATA}"}
}
date {
match => [ "timedate" => "yyyy-MM-dd HH:mm:ss,SSS"]
}
}
在这个最小的示例中,我匹配timedate
字段中的时间戳,然后通过日期过滤器将其压缩。