Logstash8.3.3 parse 包含a(AM PM)时间报错_dateparsefailure

遇到个奇奇怪怪的错误,我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的,现在展示提出一个我可以解决的方案。

Logstash8.3.3 parse 包含a(AM PM)时间报错_dateparsefailure_第1张图片

参考我之前的Blog:

can'kDate.toLocaleString()不同系统语言之会返回不同的format(可能导致我查的出来数据别人查不出来)_Damien_J的博客-CSDN博客

Update

        找到问题原因了,我直接问new bing,它不会考虑到这个东西,必须我提到region format它才会返回这个解决方案.
        总结就是手动指定local来避免laptop不同的region format导致的parse问题。

Logstash8.3.3 parse 包含a(AM PM)时间报错_dateparsefailure_第2张图片

date {
			match => [ "[xxxx][timestamp]", "yyyy/MM/dd HH:mm:ss a"]
			timezone => "Asia/Singapore"
			target => "[xxxx][timestamp]"
			locale => "en"
		}

你可能感兴趣的:(elk,java,前端,服务器)