Я нахожусь в процессе установки 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 в поле