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,是旧的符号。真的,我也尝试了你的新变体,它也起了作用:)谢谢