Подтвердить что ты не робот

Logstash проверить, существует ли поле

У меня есть файлы журналов, входящие в стек ELK. Я хочу скопировать поле (foo), чтобы выполнять различные мутации на нем, но поле (foo) не всегда присутствует.

Если foo не существует, тогда бар все еще создается, но ему назначается строка литерала "%{foo}"

Как я могу выполнить мутацию только в том случае, если поле существует?

Я пытаюсь сделать что-то подобное.

if ["foo"] {
  mutate {
    add_field => "bar" => "%{foo}
  }
}
4b9b3361

Ответ 1

Чтобы проверить, существует ли поле foo:

1) Для полей числового типа используйте:

 if ([foo]) {
    ...
 }

2) Для типов, отличных от числовых, таких как boolean, используйте строку:

if ("" in [foo]) {
    ...
}

Ответ 2

"foo" - буквальная строка.

[foo] - поле.

# technically anything that returns 'true', so good for numbers and basic strings:
if [foo] {
}

# contains a value
if [foo] =~ /.+/ {
}

Ответ 3

В Logstash 2.2.2 конструктор ("" in [field]) не работает для меня.

if ![field] { }

для нечислового поля.