Logstash: исключение TZInfo::AmbiguousTime при разборе столбца JDBC Logstash

Я получаю это исключение при получении моих данных с помощью входного плагина 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"

Поэтому 1:30 произошло дважды 5 ноября, и я подозреваю, что Logstash не знает, что делать, и он попадает в бесконечный цикл.

В качестве обходного пути я удалил параметр jdbc_default_timezone и вместо этого преобразовал свои значения в UTC в операторе выбора, например так:

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

Но этот обходной путь раздражает, так как мне нужно изменить все мои столбцы даты входов logstash.

Есть ли способ заставить его выбрать любой из двух возможных вариантов или более элегантный?

1 ответ

Решение

Кажется, что это известная ошибка в плагине Logstash JDBC Input, она помечена как расширение P2. https://github.com/logstash-plugins/logstash-input-jdbc/issues/121

Между тем, обходной путь заключается в преобразовании в UTC всех дат и временных отметок в запросе SQL, как описано выше в вопросе (версия MS SQL), или, например, для версии Oracle:

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

Нам также необходимо удалить параметр jdbc_default_timezone во входном файле и в фильтре, если это применимо.

Другие вопросы по тегам