遇到个奇奇怪怪的错误,我log中的时间是2023/08/24 12:01:39 AM,我写的格式化时间和转成东八区时间,但是就是一直报错_dateparsefailure,我反复检查了format没有问题,[xxxx][timestamp]这个字段从grok读出来也是正确的,百思不得其解。
如果是这种的format的话,在grok就直接可以用TIMESTAMP_ISO8601提取,但是如果有AM或者PM的情况这样的grok就不可以了。
//2023-08-21 14:58:51,707
%{TIMESTAMP_ISO8601:[xxxx][timestamp]}
就需要这样了,单独用年月日时分秒提取,然后拼接成具体时间,之后remove掉temp字段就可以了
grok {
match => {
"message" => [
"%{YEAR:[xxxx][temp][year]}/%{MONTHNUM:[xxxx][temp][month]}/%{MONTHDAY:[xxxx][temp][day]}\s%{HOUR:[xxxx][temp][hour]}:%{MINUTE:[xxxx][temp][minute]}:%{SECOND:[xxxx][temp][second]}\s%{WORD:[xxxx][temp][ampm]}"
]
}
break_on_match => true
}
mutate {
add_field => { "[xxxx][timestamp]" => "%{[xxxx][temp][year]}/%{[xxxx][temp][month]}/%{[xxxx][temp][day]} %{[xxxx][temp][hour]}:%{[xxxx][temp][minute]}:%{[xxxx][temp][second]} %{[xxxx][temp][ampm]}"}
}
mutate{
remove_field => [ "[xxxx][temp]" ]
}
date {
match => [ "[xxxx][timestamp]", "yyyy/MM/dd HH:mm:ss a"]
timezone => "Asia/Singapore"
target => "[xxxx][timestamp]"
}
然后结合我之前遇到类似问题的经验,尝试了一个办法就是把laptop的Region Format改成东八区的英文(需要重启laptop), 这样之后就没有出现问题了。具体的原因不清楚,不知道为什么本地的regional format会影响整个parse。但是就是解决了,如果之后我找到了具体的原因之后我会更新blog的,现在展示提出一个我可以解决的方案。
参考我之前的Blog:
can'kDate.toLocaleString()不同系统语言之会返回不同的format(可能导致我查的出来数据别人查不出来)_Damien_J的博客-CSDN博客
Update
找到问题原因了,我直接问new bing,它不会考虑到这个东西,必须我提到region format它才会返回这个解决方案.
总结就是手动指定local来避免laptop不同的region format导致的parse问题。
date {
match => [ "[xxxx][timestamp]", "yyyy/MM/dd HH:mm:ss a"]
timezone => "Asia/Singapore"
target => "[xxxx][timestamp]"
locale => "en"
}