Использование Logstash 1.4.2 с ElasticSearch 1.3 (я знаю, что это не последняя версия ES) на Ubuntu 14.04 LTS.Logstash удаляет поле после JSON-разбора
У нас есть поток событий, который содержит JSON внутри одного из полей с именем «message».
Мы хотели бы заменить поля события JSON этого поля, если оно найдено.
Мы также хотели бы удалить ОРИГИНАЛЬНОЕ поле «сообщение» (тот, который содержит строку JSON), если он найден и проанализирован.
Проблема заключается в том, что объект JSON внутри текста поля может определять новое поле «сообщение», которое мы должны сохранить.
Следующая удаляет поле «сообщение» всегда после разбора его:
json {
source => "message"
remove_field => [ "message" ]
}
Что это неправильно, мы хотим, чтобы держать его в случае, если было поле «сообщение» в значении оригинала «сообщение "поле.
Я пытался сделать следующий трюк, но, кажется, до сих пор удалить поле «сообщение» от результата:
mutate {
rename => [ "message", "___temp_logstash_filter_message___" ]
}
json {
source => "___temp_logstash_filter_message___"
}
mutate {
remove_field => [ "___temp_logstash_filter_message___" ]
}
т.е. я пытаюсь переименовать исходное поле «сообщение» для произвольного внутреннего имени который я не ожидаю появляться во входном значении, проанализируйте строку JSON с использованием этого временного имени в качестве источника, а затем удалите переименованное исходное поле.
Таким образом, я надеялся различать «исходное» поле сообщения и любое поле «сообщение», которое может содержаться внутри его значения JSON. Но это, похоже, не имеет значения - поле «сообщение» по-прежнему отсутствует в результате.
Есть ли способ достичь того, что мне нужно?
Спасибо.
Попробуйте поместить оригинальный мутировать {} в отдельный фильтр {} блока. Я обнаружил, что это иногда помогает в области поля. –
Кроме того, поместите remove_field внутри блока json {}, поэтому поле temp будет удалено только в том случае, если оно будет выполнено успешно. –
Спасибо за советы. Перенос первого мутанта {} может быть проблемой, потому что все это делается внутри блока условий. О втором мутате {} - я выразился в отдельной строфе, чтобы сделать логику более удобочитаемой, но я попробую то, что вы тоже скажете. BTW - поле ___temp_logstash_fileter_message___ НЕ появлялось на выходе, поэтому я считаю, что эта часть не является проблемой. –