Linux——Logstash时区问题

有时候Linux系统重启或者有修改后会造成时区被修改,默认一般是UTC时间,有时候会变成CST时间
在阿里云主机扩展后出现过一次,造成了Logstash 使用JDBC连接数据库时读取报错:大概是JavaLang::IllegalArgumentException: HOUR_OF_DAY: 2 -> 3这样的错


解决方案:

改系统时区

  • 将系统的时区改回去,然后重启
    1
    2
    3
    4
    # 修改时区命令:	
    timedatectl set-timezone UTC
    # 重启命令:
    shutdown -r now

重启后继续运行之前出错的程序,成功解决问题

链接时加参数

  • 在连接mysql-connector时加上一个时区参数

  • 以logstash为例子

    • 在mysql.config中修改连接语句原来为(连接到名称为”docker“的数据库,但是没有指定参数)

      1
      jdbc:mysql://localhost:3306/docker
    • 修改后连接语句为(制定参数为UTC)

      1
      jdbc:mysql://localhost:3306/docker?serverTimezone=UTC

注意,这种方式修改后我的系统时区可为任意的,比如我的系统时区就一直为CST

替换JDBC版本【未测试】

  • 网上有博客指出可以通过换jdbc connector的版本解决问题