为什么日志存储抛出与SQL Server数据的夏令时时差的错误



我们使用 LogStash 版本 7.3.2 来获取 SQL Server 数据。

它工作正常,但有时它会抛出异常:

Exception when executing JDBC query {:exception=>#
transition (daylight savings time 'gap'): 1942-09-01T00:00:00.000 (Asia/Kolkata)>}

当我签入SQL服务器时,没有像1942-09-01T00:00:00.000这样的值。

我的日志存储配置如下:

jdbc_connection_string => "jdbc:sqlserver://HOST:PORT;databaseName=DB_NAME;integratedSecurity=false
jdbc_user => "USERNAME"
jdbc_password => "PASSWORD"
jdbc_driver_library => "/home/user/LOGSTASH/mssql-jdbc-7.4.1.jre8.jar"
jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
statement => "SELECT * FROM TABLE_NAME  where   INCR_COLUMN  >  :sql_last_value  "
schedule => "*/60 * * * * *"
use_column_value => true
tracking_column => "INCR_COLUMN"
tracking_column_type => "timestamp"
record_last_run => true
last_run_metadata_path => "/home/user/LOGSTASH/LAST_RUN/.mssql_USERS_logstash_jdbc_last_run"
connection_retry_attempts => "1000"
connection_retry_attempts_wait_time => "60"
jdbc_default_timezone => "UTC"

注意: 在 SQL Server 中,INCR_COLUMN定义为日期时间。

任何这方面的帮助将不胜感激。

Logstash中,如果一个datetime字符串没有TZ part则假定它是一个UTC time

如果您知道日期时间是本地时间字符串,则需要告诉日期筛选器日期是在哪个时区生成的。您可以使用乔达时区之一,

例如America/New_YorkAmerica/DetroitEST5EDT- 这些只是指向时区Java代码的标签,这些代码知道过去相当长的一段时间内所有时区中时钟发生了哪些变化。

有关如何跟踪更新的信息,请参阅此页面。 http://www.oracle.com/technetwork/java/javase/tzdata-versions-138805.html 100

一旦日期时间字符串转换为时间戳对象(通过日期过滤器(,它就被认为是UTC time

最新更新