使用 logstash 日期过滤器插件匹配多种日期格式
match multiple date formats with logstash date filter plugin
我的日志中有一个日期,格式如下,
YYYY-M-dd and YYYY-MM-d and YYYY-M-d
2020-9-21
2020-11-1
2020-9-1
日期过滤器插件匹配
date {
match => [ "event_date" ,"yyyy-MM-dd"]
}
一些日志我因此得到日期解析异常。是否可以匹配所有这些。我的意思是如果不匹配另一种日期格式就匹配这种格式。
错误是
"failed to parse field [event_date] of type [date] in document with id '...'. Preview of field's value: '2017-11-2'", "caused_by"=>{"type"=>"illegal_argument_exception", "reason"=>"failed to parse date field [2017-11-2] with format [strict_date_optional_time||epoch_millis]", "caused_by"=>{"type"=>"date_time_parse_exception", "reason"=>"date_time_parse_exception: Failed to parse with all enclosed parsers"}}}}}}
我该如何解决?感谢您的回答
其中一个解决方案是采用一种机制,例如由具有 tag_on_failure 值的日期过滤器实现的开关。看起来像这样:
filter{
date {
match => [ "event_date" ,"yyyy-MM-dd"]
tag_on_failure => [ "not_format_date1"]
}
if "not_format_date1" in [tags] {
date {
match => [ "event_date" ,"yyyy-MM-d"]
tag_on_failure => [ "not_format_date2"]
}
}
if "not_format_date2" in [tags] {
date {
match => [ "event_date" ,"yyyy-M-d"]
tag_on_failure => [ "no_format"]
}
}
}
我尝试了第一个答案,但没有解决我的问题。 @YLR 的方法也是改进的好方法。
我已经通过在 if 条件下将 M 等字段更改为 MM 解决了我的问题。下面是一个例子。
if [monthday] == "1"{
mutate {
update => { "monthday" => "01" }
}
}else if [monthday] == "2"{
mutate {
update => { "monthday" => "02" }
}
}else if [monthday] == "3"{
mutate {
update => { "monthday" => "03" }
}
}
....
这解决了我的问题,但有点困难。
我的日志中有一个日期,格式如下,
YYYY-M-dd and YYYY-MM-d and YYYY-M-d
2020-9-21
2020-11-1
2020-9-1
日期过滤器插件匹配
date {
match => [ "event_date" ,"yyyy-MM-dd"]
}
一些日志我因此得到日期解析异常。是否可以匹配所有这些。我的意思是如果不匹配另一种日期格式就匹配这种格式。
错误是
"failed to parse field [event_date] of type [date] in document with id '...'. Preview of field's value: '2017-11-2'", "caused_by"=>{"type"=>"illegal_argument_exception", "reason"=>"failed to parse date field [2017-11-2] with format [strict_date_optional_time||epoch_millis]", "caused_by"=>{"type"=>"date_time_parse_exception", "reason"=>"date_time_parse_exception: Failed to parse with all enclosed parsers"}}}}}}
我该如何解决?感谢您的回答
其中一个解决方案是采用一种机制,例如由具有 tag_on_failure 值的日期过滤器实现的开关。看起来像这样:
filter{
date {
match => [ "event_date" ,"yyyy-MM-dd"]
tag_on_failure => [ "not_format_date1"]
}
if "not_format_date1" in [tags] {
date {
match => [ "event_date" ,"yyyy-MM-d"]
tag_on_failure => [ "not_format_date2"]
}
}
if "not_format_date2" in [tags] {
date {
match => [ "event_date" ,"yyyy-M-d"]
tag_on_failure => [ "no_format"]
}
}
}
我尝试了第一个答案,但没有解决我的问题。 @YLR 的方法也是改进的好方法。 我已经通过在 if 条件下将 M 等字段更改为 MM 解决了我的问题。下面是一个例子。
if [monthday] == "1"{
mutate {
update => { "monthday" => "01" }
}
}else if [monthday] == "2"{
mutate {
update => { "monthday" => "02" }
}
}else if [monthday] == "3"{
mutate {
update => { "monthday" => "03" }
}
}
....
这解决了我的问题,但有点困难。