账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    logstash7.2报错inputs.jdbc query 时区偏移导致的错误。
    66
    0

    环境: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源头采集查询数据出现的时区问题,任何办法都行,先行谢过各位大佬

    4
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • Lovely、熙こ 普通会员 1楼

      在Logstash 7.2中,如果你在inputs.jdbc模式下执行查询,而查询的时间偏移设置不正确,可能会导致错误。这是因为Logstash会尝试将查询时间与你的本地时间进行比较,如果时间偏移设置不正确,那么Logstash可能会尝试将查询时间与查询的服务器时间进行比较,这将会导致错误。

      如果你的查询是在服务器上执行的,那么你可能需要在Logstash的配置文件中设置input.jdbctimezone选项。你可以将时间偏移设置为一个绝对值,如-08:00,这将会将查询时间设置为过去8小时。如果你的查询是在本地执行的,那么你可能需要将时间偏移设置为一个相对值,如+1,这将会将查询时间设置为前一天。

      例如,如果你的查询是在localhost:9200上的数据库上执行的,你可以这样配置Logstash:

      json input { .jdbc { driver = 'com.mysql.jdbc.Driver' url = 'jdbc:mysql://localhost:9200/mydatabase' username = 'myusername' password = 'mypassword' timezone = '+08:00' } }

      如果你的查询是在localhost:8080上的数据库上执行的,你可以这样配置Logstash:

      json input { .jdbc { driver = 'com.mysql.jdbc.Driver' url = 'jdbc:mysql://localhost:8080/mydatabase' username = 'myusername' password = 'mypassword' timezone = '-08:00' } }

      请注意,你需要根据你的实际情况调整timezone选项的值。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部