Kibana/Logstash Проблема со временем

Задача: отправить записи в формате CSV в logstash для разбора.

Достоинства: Все синтаксические анализы работают. Все части CSV разбиты на отдельные поля, которые можно увидеть в кибане.

Плохое: все поля, содержащие дату, неверны. Дата отстает на день и включает время, которое всегда равно 18:00:00. В CSV никогда не было указано время перед синтаксическим анализом. Время никогда не добавлялось в конфигурацию logstash. Но по какой-то причине есть время, когда его видели в кибане.

Подробности: формат дат из CSV: ГГГГ-ММ-ДД.

Конфигурация logstash ТОЛЬКО анализирует поля. Он не делает никаких преобразований и никаких других модификаций. Это очень простая конфигурация.

Проблема должна заключаться где-то в кибане или в эластичном поиске.

Любые мысли о том, как это исправить? *Примечание: такая же проблема возникает в контейнере докера.

Вот снимок экрана: введите здесь описание изображения

Время: точное.

Поле SMF30DTE: на день позади и включает время, которого не должно быть.

SMF30TME: Точно.

Вот мой фильтр logstash:

filter {
    split {
    }
    mutate { 
        add_field => {"[@metadata][indexname]" => "%{[sourceType]}-%{[sysplexName]}"}
    }
    mutate { 
        lowercase => [ "[@metadata][indexname]" ]
    }
    if [source] =~ "table" {
        csv{ columns => [  "Correlator", "SMF30LEN", "SMF30SEG", "SMF30FLG", "SMF30RTY","<shortened for ease of reading>" ]
        separator => "," }
    }
}

person Jim Thunder    schedule 15.11.2019    source источник
comment
Где-то ваша дата обрабатывается так, как будто это отметка времени в полночь UTC, а затем преобразуется в местное время с использованием смещения часового пояса UTC-6 (например, по центральному стандартному времени США). Поскольку вы не показали нам свой код, конфигурацию, схему и т. д., трудно сказать вам больше. См. Как задать хороший вопрос? и Как создать минимальный воспроизводимый пример из справочного центра. Спасибо.   -  person Matt Johnson-Pint    schedule 15.11.2019
comment
Хорошо, я добавил свой код из моего фильтра Logstash. Я действительно не так много еще могу добавить. Думаю, я надеюсь на кого-то, кто знает, как работает индексация эластичного поиска, потому что именно в этом заключается проблема.   -  person Jim Thunder    schedule 16.11.2019


Ответы (2)


Все даты, хранящиеся в Elasticseach, указаны в формате UTC. Когда вы используете Kibana для визуализации данных elasticsearch, он по умолчанию преобразует время в формате UTC в соответствующий часовой пояс браузера.

Поскольку ваше поле SMF30DTE имеет только дату в формате YYYY-MM-DD, оно будет проиндексировано как полночь даты по времени UTC, поэтому 2019-11-15 будет проиндексировано как 2019-11-15 00:00:00.000 и будет отображаться в Kibana в соответствии с часовым поясом вашего браузера, что кажется быть UTC -0600, потому что вы видите дату как 2019-11-14 18:00:00.000

Я не думаю, что Kibana в данный момент поддерживает отображение полей даты без времени, поэтому для решения вашей проблемы вы можете использовать фильтр mutate, чтобы добавить время в свое поле, а затем фильтр date, чтобы преобразовать его в свой часовой пояс, что-то вроде этого:

mutate {
    add_field => { "SMF30DTE" => "%{SMF30DTE} 00:00:00.000" }
}
date {
    match => [ "SMF30DTE", "YYYY-MM-dd HH:mm:ss.SSS"]
    target => "SMF30DTE"
    timezone => "-0600"
}

Это должно, по крайней мере, сделать так, чтобы ваши даты отображались в кибане с правильным днем.

Другой вариант — создать сопоставление для вашего индекса и сопоставить поле SMF30DTE как строку вместо того, чтобы позволить elasticsearch выполнять динамические сопоставления, но таким образом вы увидите значение 2019-11-15, если только вы не используете комбинацию mutate и date фильтрует, чтобы изменить строку на November 15th, 2019

person leandrojmp    schedule 16.11.2019
comment
Тогда я собираюсь изменить свой код, похоже, он должен ответить на мой вопрос. Я думаю, что вы можете быть совершенно правы, потому что все это имеет смысл для меня! Я дам вам знать, если это сработает. Благодарю вас! - person Jim Thunder; 19.11.2019
comment
Так что это сработало, за исключением того, что я не смог перезаписать поле SMF30DTE. Вместо этого я создаю новое поле под названием SMF30DATE, которое представляет собой комбинацию SMF30DTE и SMF30TME (время), и это точно! Спасибо за помощь! - person Jim Thunder; 20.11.2019

Я не очень хорошо знаком с этими технологиями, но, похоже, проблема в том, что в Logstash нет синтаксического анализа только даты. Вместо этого он предполагает полночь UTC во время синтаксического анализа, а затем Kibana отображает его в зависимости от вашего местного часового пояса. Существует открытая проблема на GitHub, где другие упомянули проблему, которую вы описываете.

Я также нашел некоторую информацию здесь о том, как настроить часовой пояс Kibana. Вы можете попробовать настроить часовой пояс Kibana так, чтобы он соответствовал исходному входу. Конечно, тогда все ваши другие метки времени также будут в формате UTC.

В качестве альтернативы вы можете попробовать установить timezone => "America/Chicago" в фильтре даты Logstash. Хотя это поможет только при просмотре по центральному времени США.

person Matt Johnson-Pint    schedule 15.11.2019