Logstash 特殊情况下的日志存储日期过滤器

Logstash 特殊情况下的日志存储日期过滤器,logstash,Logstash,我的日志采用以下格式: 201407022000.log:2014-07-02 20:00;10.112.64.250;3;972819;ULC Primeline 因为它是csv,所以我可以很容易地拆分第一部分,如下所示: csv { columns => ["fulldate","ip","port","electricity","customer"] separator => ";" remove_field => "message" } d

我的日志采用以下格式:

201407022000.log:2014-07-02 20:00;10.112.64.250;3;972819;ULC Primeline
因为它是csv,所以我可以很容易地拆分第一部分,如下所示:

csv {
    columns => ["fulldate","ip","port","electricity","customer"]
    separator => ";"
    remove_field => "message" 
}
date {
    match => [ "fulldate", "YYYY-MM-dd HH:mm" ]
    timezone => "Europe/Berlin"
}
现在,我想将fulldate字段拆分为“日期之前的任何内容”(
201407022000.log:
)和实际日期字段(
2014-07-02 20:00

我试着像这样使用日期过滤器:

csv {
    columns => ["fulldate","ip","port","electricity","customer"]
    separator => ";"
    remove_field => "message" 
}
date {
    match => [ "fulldate", "YYYY-MM-dd HH:mm" ]
    timezone => "Europe/Berlin"
}
我收到以下错误

从字段{:field=>“date”分析日期失败, :value=>“201407022000.日志:2014-07-02 20:00”, :exception=>java.lang.IllegalArgumentException:无效格式: “201407022000.日志:2014-07-02 20:00”在中的格式不正确 “000.log:2014-07-02 20:00”,:level=>:warn}


不幸的是,这不起作用。logstash解析失败。

它失败的原因是您正在尝试解析它:

201407022000.log:2014-07-02 20:00
使用与格式匹配的筛选器:

"YYYY-MM-dd HH:mm"
您可以在解析该字段之前在该字段上使用grok:

filter {
  grok {
    match => { "fulldate" => "[0-9.]+log:%{TIMESTAMP_ISO8601:date}" }
  }
}
如果您还希望在开始时捕获文件名,可以创建一个新模式,如(在基于UNIX的系统中,该模式将位于模式目录中的文件中,通常为/opt/logstash/patterns),如下所示:

那么你的工作就会变成:

filter {
  grok {
    match => [ "fulldate" => "%{LOGFILENAMEPATTERN:filename}:%{TIMESTAMP_ISO8601:date}" ]
  }
}
date {
    match => [ "date", "yyyy-MM-dd HH:mm" ]
    timezone => "Europe/Berlin"
}
最后,您的约会模式将变成:

filter {
  grok {
    match => [ "fulldate" => "%{LOGFILENAMEPATTERN:filename}:%{TIMESTAMP_ISO8601:date}" ]
  }
}
date {
    match => [ "date", "yyyy-MM-dd HH:mm" ]
    timezone => "Europe/Berlin"
}

请注意,我已经更改了您要匹配的字段的名称,因为我在grok中对其进行了重命名,并且我用YYYY替换了YYYY,因为Y是纪年,Y是年,它们不一样(根据)

您太棒了:D我必须在grok匹配中替换“=>”for“”,但随后一切都正常了!:)很高兴它有帮助:)我把sytax for grok弄混了,现在更正了,它应该是{}with=>或[]with,IIRC[]with,是旧的符号。真的,我也尝试了你的新变体,它也起了作用:)谢谢