使用 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" }
    }
}
....

这解决了我的问题,但有点困难。