Logstash: Как заменить значение полей на основании содержимого

Добрый день.
Столкнулся с такой проблемой. У меня в логах вместо источников событий указываются индексы этих источников. Так как перечень источников конечен, то нет большой проблемы составить таблицу сопоставлений индексов и названий источников:


Индекс, Название
1, source_name_1
2, source_name_2


Сейчас вижу два пути решения этой задачи:

  1. filter -> if (значение равно индексу) -> mutate -> replace
  2. filter -> alter -> condrewrite

Первый вариант работает, но использование данной конструкции занимает слишком много места в конфиге и при этом сложночитаемо:
filter {
if [source] == "1" {
mutate { replace => [ "source", "source_name_1" ] }
}
if [source] == "2" {
mutate { replace => [ "source", "source_name_2" ] }
}
}

Получается много строк и много ифов.

Второй вариант намного лаконичнее, по, почему-то не работает(((
filter {
alter {
condrewrite => [
"[source]", "1", "source_name_1",
"[source]", "2", "source_name_2"
]
}
}
Такой вариант тоже не работает:
filter {
alter {
condrewrite => ["[source]", "1", "source_name_1" ]
condrewrite => [ "[source]", "2", "source_name_2" ]
}
}

Прошу подсказать, правильно ли использовать фильтр alter для решения подобной задачи, или я совсем не тем занимаюсь и существует другое, правильное решение

A "source", "1", "source_name_1",.... (без [ ] ) не пробовали?

Попробовал. Логсташ выдает ошибку и отказывается запускаться

Проблема решена.
Вот такой вариант работает корректно:
filter {
alter {
condrewrite => ["[source]", "1", "source_name_1" ]
condrewrite => [ "[source]", "2", "source_name_2" ]
}
}

Ошибка возникла из-за неправильных исходных данных. Амазон некорректно формирует json:
image

А элемент массива нельзя подать на вход фильтру alter.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.