在平台系统集群整体升级过程中,发现早期的平台系统部分数据通过logstash组件写入到elasticsearch时存在报错,错误日志输出"1965-3-7" is malformed at "-3-7"
。
通过排查发现,这是由于上游请求日期字段参数没有按照ISO 8601
标准对日期格式进行请求,导致出现2024-01-01
和1965-3-7
两种类型的数据请求,从而导致无法写入到ES中。
解决办法
添加logstash配置,匹配时间格式中无0日期的规则,自动填充0。
全局替换日期格式,通常放在最上面即可,注意顺序。
编辑logstash.conf配置,增加mutate规则。
filter {
# mutate 先处理 message 中的日期格式,注意双引号的处理
mutate {
gsub => [
# 处理格式:"2024-1-1" -> "2024-01-01"
"message", "\"(\d{4})-(\d{1})-(\d{1})\"", '"\1-0\2-0\3"',
# 处理格式:"2024-10-1" -> "2024-10-01"
"message", "\"(\d{4})-(\d{2})-(\d{1})\"", '"\1-\2-0\3"',
# 处理格式:"2024-1-10" -> "2024-01-10"
"message", "\"(\d{4})-(\d{1})-(\d{2})\"", '"\1-0\2-\3"'
]
}
}
通常保存配置后会自动重新加载配置,无需手动重启。