Ситуация:Logstash: Если на основе падение на Событии После Сплите
Мои входные журналы выглядеть примерно так:
{
"key1":"value1"
"key2":"value2"
"events":
[{
"Level":"Information",
"Code":"100"
},
{
"Level":"Information",
"SomeKey":"SomeValue"
},
{
"Level":"Error",
"Message":"Something went wrong"
}
]}
Я хочу:
разделить массив событий для создания отдельных объектов со всеми полями внешнего уровня, которые все еще заполнены (key1 и key2).
выборочно отбрасывать журналы после разделения. Я только хочу сохранить журналы «Информационный уровень», если они содержат свойство «Код».
Мой logstash конфиг выглядит
filter {
split {
field => "[events]"
}
}
filter {
if ![events][Code]
{ drop {} }
}
output {
elasticsearch {}
}
Проблема:
Logstash не кажется, чтобы отделить события перед выполнением второго фильтра.
Другими словами, если какое-либо из событий в журнале не имеет поля «Код», весь журнал отбрасывается, включая информацию об уровне «Ошибка», которую я должен сохранить.
Я был на этом целый день, и это действительно нервничает. Я бы вручную попытался создать свой собственный плагин, но я никогда не использовал Ruby.
Я уверен, что это не имеет значения, но я запускаю стек ELK в Docker. Я уверен, что файлы конфигурации загружаются должным образом и что они используются в Logstash.
Этот хак сделал работу, спасибо! Должен ли я беспокоиться о том, что хак перестанет работать в будущих обновлениях? –
Этот конкретный хак не должен ломаться с новыми версиями ... он копирует поле из одного места в другое, а затем проверяет, является ли оно '% {[events] [Code]}' - это будет точная строка если нет [событий] [Код], потому что logstash не выполняет замену значений, которые не заданы. – Alcanzar