代码之家  ›  专栏  ›  技术社区  ›  Olivier

Logstash:TZInfo::解析JDBC列Logstash时出现歧义异常

  •  4
  • Olivier  · 技术社区  · 7 年前

    当使用Logstash JDBC输入插件获取数据时,我遇到了这个异常:

    error:
      26413962
      Sequel::InvalidValue
      TZInfo::AmbiguousTime: 2017-11-05T01:30:00+00:00 is an ambiguous local time.
    

    这可能是因为我已经在用这个参数转换JDBC插件中的时区了:

       jdbc_default_timezone => "America/New_York"
    

    因此,11月5日凌晨1:30发生了两次,我怀疑Logstash不知道该做什么,它陷入了一个无限循环。

    作为一种解决方法,我删除了jdbc\u default\u timezone参数,而是在select语句中转换UTC值,如下所示:

     DATEADD(hh, DATEDIFF(hh, GETDATE(), GETUTCDATE()), th.[DueDate]) as DueDate 
    

    有没有办法强迫它从两个可能的时间中选择一个,或者更优雅的方式?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Olivier    7 年前

    这似乎是Logstash JDBC输入插件中的一个已知错误,它被标记为P2增强。 https://github.com/logstash-plugins/logstash-input-jdbc/issues/121

    同时,解决方法是将SQL查询中的所有日期和时间戳转换为UTC,如问题(MS SQL版本)中所述,或类似于Oracle版本:

    select from_tz(cast(<column> as timestamp), 'CET') at time zone ('EST') "@timestamp"
        from <table>
        where ...
    

    如果适用,我们还需要删除输入文件和过滤器中的jdbc\u default\u时区参数。