Проблема разбора даты в ELK Logstash с пользовательским форматом временных меток журналов Java - PullRequest
0 голосов
/ 17 апреля 2019

Ниже приведены примеры журналов, полученных из Java-приложения.

2019-04-11 9:08:22:562 Log 1 
2019-04-11 9:08:22:660 Log 2 
2019-04-11 9:08:43:79 Log 3 
2019-04-11 9:08:43:156 Log 4 

. Из приведенных выше журналов я сталкиваюсь с проблемой Log 3, где значение миллисекунд составляет только 79, но после анализа в Logstash,значение установлено как 790 мс (синтаксический анализ Logstash является правильным, но значение журнала Java является неправильным).На самом деле значение должно быть 2019-04-11 9:08:43:079 в журнале для правильного синтаксического анализа.

Фильтр Logstash выглядит следующим образом:

date {
    match => [ "log_time", "yyyy-MM-dd HH:mm:ss:SSS", "ISO8601" ]
    target => "log_time"
    timezone => "CET"
}

При копании глубже я обнаружил, что проблема заключается в регистрации Java с этимформат времени, он будет разрешен, если формат yyyy-MM-dd HH:mm:ss.SSS.Но приложение для ведения журнала использует формат yyyy-MM-dd HH:mm:ss:SSS, который вызывает эту проблему (обратите внимание на разницу в формате :SSS и .SSS).

Я не могу изменить систему регистрации Java, поэтомуЕсть ли обходной путь с фильтром Logstash, чтобы исправить эту проблему.

1 Ответ

1 голос
/ 19 апреля 2019

Я получил решение, вставив префикс 0 в миллисекунды, имеющие только 2 цифры, используя gsub:

mutate { gsub => [ "log_time", "^([0-9-]+ [0-9]+:[0-9]{2}:[0-9]{2}:)([0-9])$", "\100\2",
"log_time", "^([0-9-]+ [0-9]+:[0-9]{2}:[0-9]{2}:)([0-9]{2})$", "\10\2" ] }

Получил помощь от эластичная группа обсуждения

...