logstash7.2报错inputs.jdbc query 时区偏移导致的错误。

环境:winserver2016,elk7.2,sqlserver2017,采集sqlserver 30多个表的全部记录,用于全文检索,所以一个索引下有几十个列名不同的日期字段datetime类型

最终存在es的记录上所有datetime,时间都减了8个小时,在kibana里查询2017-03-15,会出现2017-3-16的记录,在logstash导入遇到到特定几个夏令时时间时还会报错

错误信息:logstash.inputs.jdbc
exception when executing jdbc query
illegal instant due to time zone offset transition (daylight savings time 'gap') 1989-4-16T00:00:000 [Asia/Shanghai]

大概意思就是时区偏移转换产生的非法错误,应该是logstash的input从sqlserver查询采集数据就开始出现时区问题了,所以改filter过滤插件应该是解决不了

所以先从源头查看,本机winserver2016,时区设置正常+8北京时间没问题

在配置input{jdbc{}}是已经增加了

jdbc_default_timezone => "Asia/Shanghai"

问题是没解决的,查询到老版本的logstash可以改配置 timestamp.rb文件来改

然后找提示的路径:

/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.1.0-java/lib/logstash/timestamp.rb

emmmmmm 这个路径在7.2版本已经没了,不存在logstash-core-版本号-java的文件夹了,研究了一下,有个新路径:

logstash-7.2.0logstash-coreliblogstashtimestamp.rb

打开一看

# The contents of this file have been ported to Java. It is included for for compatibility
# with plugins that directly require "logstash/timestamp".

文件仅是为了兼容,已经移植到java了,请教下这个该怎么弄??

最终是要解决logstash源头采集查询数据出现的时区问题,任何办法都行,先行谢过各位大佬🙏
--------------更新分割线--------------------
在sqlserver数据库把日期类型改成datetimeoffset,就没有时区偏移错误了,但是最终到es又加了9个小时

阅读 4.1k
1 个回答
新手上路,请多包涵

老哥有什么好的解决方案么?