Logstash解析CSV数据时将首列微秒时间字段映射为@timestamp的配置问题
Logstash解析CSV时间写入@timestamp的修正方案
原配置的两处核心问题
date插件的target参数指向错误:你将解析得到的时间值赋值给了自定义的datetime字段,没有指向内置的@timestamp字段,自然无法替换内置时间值。- 时间精度兼容:样例数据的时间为6位微秒精度,Logstash
date插件的格式规则中,单个S对应小数部分的一位字符,6位微秒对应6个S的写法本身可正常匹配;低版本Logstash若存在兼容问题可做格式适配。
修正后的可直接运行配置
filter { csv { separator => "," columns => ["datetime","value"] convert => { "value" => "float" } } date { match => ["datetime", "yyyy-MM-dd HH:mm:ss.SSSSSS"] # 关键修正:将解析后的时间写入内置@timestamp字段 target => "@timestamp" # 可选:解析完成后删除冗余的临时datetime字段,减少不必要的字段输出 remove_field => ["datetime"] } }
排错参考
- 若时间解析失败,可在
date插件中追加tag_on_failure => ["date_parse_failure"],通过查看事件携带的自定义标签判断解析状态。 - 若运行环境的Logstash版本对6位微秒解析存在兼容问题,可先通过
mutate插件将时间截取为3位毫秒精度再匹配:
此时对应的mutate { gsub => ["datetime", "(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3})\d{3}", "\1"] }date插件匹配格式修改为yyyy-MM-dd HH:mm:ss.SSS即可。
内容的提问来源于stack exchange,提问作者Tahseen
相关产品推荐
相关产品推荐

