sql-server - 为什么logstash会抛出与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 这样的值。
我的 LogStash 配置如下:
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 定义为 DateTime。
对此的任何帮助将不胜感激。
解决方案
在Logstash 中,如果datetime
字符串没有TZ part
,则假定为UTC time
.
如果您知道日期时间是本地时间字符串,那么您需要告诉日期过滤器生成日期的时区。您可以使用 Joda 时区之一,
例如America/New_York
,America/Detroit
或EST5EDT
- 这些只是指向时区 Java 代码的标签,这些 Java 代码知道过去相当长一段时间内所有时区的时钟发生了哪些变化。
有关如何遵循更新的信息,请参阅此页面。http://www.oracle.com/technetwork/java/javase/tzdata-versions-138805.html 100
一旦 datetime 字符串被转换为 Timestamp 对象(通过日期过滤器),它就被认为是UTC time
.
推荐阅读
- node.js - 如何使用路径参数为 url 提取 prometheus 指标
- docker - 尝试使用 PyPy docker 映像安装 Mecab 时出现“'gcc' failed with exit status 1”
- php - 在php中反转数组
- java-8 - 如何确定java8中xml的编码
- python - Django URL 上的错误:在 website.urls 中定义的 URLconf,Django 尝试了这些 URL 模式
- java - 尝试在数据库中搜索具有用户名的用户
- javascript - 我们能否确定我们是否使用 JS 从浏览器中的粘贴事件中进行了剪切或复制?
- vue.js - VueJS - 在 ag-grid-vue 中弯曲列/适合屏幕的任何宽度
- r - R:循环只保存最终迭代?
- javascript - 将 Django 对象传递给 Javascript