Logstash date filter解析MSI纯时间日志报_dateparsefailure问题求助
问题原因排查
- 首次date匹配对象错误
你配置的第一个date过滤器直接尝试匹配完整的message字段,但你的日志message前缀包含MSI (c) (F0:8C) [等大量无关字符,并非纯时间字符串,匹配直接失败,logtime字段根本不会生成,后续拼接出的tmp_field内容无效,第二次date匹配自然也会失败。 - 标签判断条件可能未触发
你给过滤器加了if "curl" in [tags]的前置判断条件,如果你导入MSI日志时没有提前给日志事件打上curl标签,整个过滤器代码块完全不会执行,时间解析逻辑不会运行,自然会生成_dateparsefailure标签。 - 存在跨天日期匹配隐患
你使用%{+YYYY-MM-dd}获取的是Logstash处理事件时的服务器当前日期,如果日志是跨天产生(比如当天23:59的日志次日凌晨才被采集),会出现日期和实际日志产生日期不符的问题。
修正后的配置
首先需要用grok过滤器先从日志中提取出纯时间字段,再进行日期拼接解析,参考配置如下:
filter { # 确认标签判断符合你的实际打标逻辑,如果不需要可以删除该if包裹 if "curl" in [tags] { # 第一步:从日志中提取方括号内的时间字符串 grok { match => { "message" => "%{GREEDYDATA}\[%{TIME:raw_log_time}\]%{GREEDYDATA}" } } # 第二步:拼接日期和时间 mutate { add_field => { "log_date" => "%{+YYYY-MM-dd}" "tmp_full_time" => "%{log_date}_%{raw_log_time}" } } # 第三步:解析完整时间戳 date { locale => "en" match => ["tmp_full_time", "YYYY-MM-dd_HH:mm:ss:SSS"] timezone => "+0200" # 这里默认会把解析后的时间写入@timestamp字段,如果要写入自定义字段可以加target参数 remove_field => ["log_date", "raw_log_time", "tmp_full_time"] } } }
内容的提问来源于stack exchange,提问作者Alex G
相关产品推荐
相关产品推荐

