Используйте переменную ruby ​​в состоянии фильтра logstash

У меня есть следующая конфигурация logstash:

input { stdin { } }

output {
  elasticsearch { hosts => ["localhost:9200"] }
  stdout { codec => rubydebug }
}

filter {


  ruby {
    code => "
      @@exists_pattern = ['foo', 'bar'].any?{ |pattern| event.get('message').include?(pattern) }
      event.add('keep_line', @@exists_pattern)
    "
  }


  if not [keep_line] { drop { } }


  grok {
    match => {
      "message" => '%{IP:serverip} \[%{HTTPDATE:my_timestamp}\]'
    }
  }

  date {
    match => [ "my_timestamp", "dd/MMM/YYYY:HH:mm:ss Z"]
    target => "@timestamp"
  }
}

Но когда я пытаюсь запустить logstash с этим файлом конфигурации, я получаю эту ошибку:

[ERROR][logstash.agent] Cannot create pipeline {:reason=>"Expected one of #, ( at line 30, column 10 (byte 923) after filter {\n  # grok...

Как я могу использовать переменную, которая была установлена ​​в блоке кода ruby ​​(событие ['keep_line']) в инструкции if?

1 ответ

Решение

Вы не можете использовать отрицание, если условия в фильтре Logstash. Попробуйте преобразовать логическое условие в положительное.

Другие вопросы по тегам