在平台系统集群整体升级过程中,发现早期的平台系统部分数据通过logstash组件写入到elasticsearch时存在报错,错误日志输出"1965-3-7" is malformed at "-3-7"
通过排查发现,这是由于上游请求日期字段参数没有按照ISO 8601标准对日期格式进行请求,导致出现2024-01-011965-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"'
    ]
  }
}

通常保存配置后会自动重新加载配置,无需手动重启。

END

本文标题:利用logstash规则替换日期格式

本文作者:宇宙最帅的男人

本文链接:https://lolicp.com/linux/202406729.html

版权声明:转载或者引用本文内容请注明来源及原作者,本文著作权归 (lolicp.com) 所有。

除非另有说明,本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

最后修改:2024 年 12 月 06 日
如果觉得我的文章对你有用,请随意赞赏