logstash 读取MySQL数据到elasticsearch 相差8小时解决办法

李玉志 2020-05-11

logstash和elasticsearch是按照UTC时间的,kibana却是按照正常你所在的时区显示的,是因为kibana中可以配置时区信息。
具体看这个:

logstash 读取MySQL数据到elasticsearch 相差8小时解决办法

有如下两种解决办法:
1.jdbc_connection_string配置上使用CTT(Asia/shanghai)时间

jdbc_connection_string => "jdbc:mysql://192.168.0.145:3306/db_example?useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT"

或者

jdbc_connection_string => "jdbc:mysql://192.168.0.145:3306/db_example?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/shanghai"

2.新增时区参数

  • jdbc_default_timezone

值类型为字符串,此设置没有默认值。

时区转换。Logstash(和Elasticsearch)期望时间戳以UTC术语表示。如果您的数据库记录了相对于另一个时区的时间戳,则将记录该数据库的时区,然后将此设置设置为数据库使用的时区。但是,由于SQL不允许在时间戳字段中提供时区数据,因此我们无法逐条记录地进行计算。此插件将以ISO8601格式的相对UTC时间自动将您的SQL时间戳字段转换为Logstash时间戳。

使用此设置将手动分配指定的时区偏移,而不是使用本地计算机的时区设置。

jdbc_default_timezone => "Asia/Shanghai"
  • plugin_timezone
    值可以是任何的:utc,local,默认值为 "utc"。

如果您希望此插件将时间戳偏移到UTC以外的时区,则可以将此设置设置为local,插件将使用OS时区进行偏移调整。

注意:当指定plugin_timezone和/或时jdbc_default_timezone,偏移量调整在两个地方进行,如果sql_last_value是时间戳,并且在语句中用作参数,则偏移量调整将从插件时区到数据时区,并且在处理记录时,时间戳从数据库时区偏移到插件时区。如果您的数据库时区为UTC,则无需设置这些设置中的任何一个。

相关推荐