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 во входном файле и в фильтре, если это применимо.