Logstash:解析JDBC列Logstash时的TZInfo :: AmbiguousTime异常

时间:2017-11-07 19:52:49

标签: logstash logstash-configuration logstash-jdbc

使用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_default_timezone参数,而是在select语句中将我的值转换为UTC,如下所示:

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

但是这种解决方法很烦人,因为我需要修改所有logstash输入日期列。

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

1 个答案:

答案 0 :(得分:0)

似乎这是Logstash JDBC Input插件中的已知错误,它被标记为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_default_timezone参数(如果适用)。