Записи Logstash с сервера, отклоненные ElasticSearch из-за неправильного формата даты

Я нахожусь в процессе установки ELK, включая REDIS, и успешно получил один сервер/процесс, доставляющий свои журналы в ElasticSearch(ES). Больше всего этому рад. Однако при обновлении существующего сервера/процесса, чтобы начать использовать logstash, я вижу, что дата журнала появляется в форме гггг-мм-дд ЧЧ: мм: сс, сс. Обратите внимание на отсутствие T между датой и временем. ЕС не в восторге от этого.

Шаблон Log4j, используемый обоими серверами:

<PatternLayout pattern="~%d{ISO8601} [%p] [%t] [%c{1.}] %m%n"/>

Конфигурация Logstash идентична, за исключением пути к исходному файлу журнала.

input{

    file{
        type => "log4j"
        path => "/var/log/restapi/*.log"
        add_field => {
            "process" => "restapi"
            "environment" => "DEVELOPMENT"
        }
        codec => multiline {

           pattern => "^~%{TIMESTAMP_ISO8601} "
           negate => "true"
           what => "previous"
        }
    }


}

filter{

    if [type] == "log4j"{
        grok{
            match => {
                message => "~%{TIMESTAMP_ISO8601:logdate}%{SPACE}\[%{LOGLEVEL:level}\]%{SPACE}\[%{DATA:thread}\]%{SPACE}\[%{DATA:category}\]%{SPACE}%{GREEDYDATA:messagetext}"
            }            
        }


    }

}

output{
    redis{
        host => "sched01"
        data_type => "list"
        key => "logstash"
        codec => json
    }

    stdout{codec => rubydebug}

}

Строка stdout предназначена для текущих целей отладки, из чего видно, что на правильно работающем сервере эта дата журнала правильно формируется фильтром GROK. Хороший формат даты журнала

по сравнению с неправильно сформированным выводом. Неверный формат даты журнала

Единственное отличие от высокого уровня заключается в том, когда были построены серверы. Ищу идеи о том, что может быть причиной, или способ добавить T в поле


person Jerome Green    schedule 29.10.2015    source источник
comment
Затем я вижу, что исходное значение даты проходит без T в файле журнала, что делает это теперь больше проблемой log4j. Почему аналогичный шаблон log4j дает другой результат.   -  person Jerome Green    schedule 29.10.2015
comment
И это было так. Обнаружено, что более старая служба использовала бета-версию log4j2 после того, как обнаружила, что ошибка была идентифицирована и исправлена ​​в log4j2. Обновление POM и сборка позже, и я вижу поток данных.   -  person Jerome Green    schedule 29.10.2015


Ответы (1)


Ошибка, возникшая в разделе DatePatternConverter ISO8601_PATTERN, не соответствует ISO8601 https://issues.apache.org/jira/browse/LOG4J2-670 заставил меня проверить версию библиотеки log4j2, которая использовалась в старом приложении. Оказалось, что это Бета. Обновлено до версии 2.3, и значение dateTime стало правильно заполняться. Теперь значение правильно сформировано, и ElasticSearch с удовольствием его примет.

person Jerome Green    schedule 29.10.2015