Logstash: передать содержимое поля в фильтр

#filter #logstash

#Фильтр #logstash

Вопрос:

Я пишу фильтр, и мне нужно передать ему поле, но я не знаю как. Я могу указать только имя поля, а не его содержимое:

 filter {
  if [path] =~ "access" {
    :
    enhance {
      ref => uri  # or "uri", [uri]
    }
  }
}
  

Для всех будет установлена ref строка «uri». Строка конфигурации в фильтре

   config :ref, :validate => :string, :required => true
  

Конечно, я могу сделать event[ref] это в фильтре, но передача содержимого кажется более элегантной. Что мне нужно сделать?

Ответ №1:

Если я понимаю ваш вопрос, вы хотите знать, как использовать ref написанный вами код Ruby. Поскольку вы уже определили

 config :ref, :validate => :string, :required => true
  

вы просто используете @ref , чтобы получить значение.

Например, event['somefield'] = @ref

Комментарии:

1. Использование @ref обрабатывает ref как переменную экземпляра фильтра. Я не очень разбираюсь в Ruby-кодировании, но по какой-то причине это не имеет значения, использую ли я @ref или ref в функции фильтра. Другими словами, ref и @ref содержать строку «uri», а не содержимое uri-поля в конфигурации, которое в основном является тем, что у меня уже есть.

2. Я думаю, тогда ваш вопрос неясен. @ref — это то, что вы указываете в правой части ref => в файле конфигурации. Если вы хотите получить поле, на которое ссылается ссылка, это просто событие [@ref]

3. Если я помещу @uri его в правую часть файла конфигурации, я получу ошибку синтаксического анализа, поскольку «@» там недопустимо. Я не уверен, что неясно в моем вопросе. Я процитировал фрагменты файла конфигурации и фильтра. Я хочу получить содержимое поля «uri» в фильтр, а не имя поля.

4. Я считаю, что вы ищете ref => "%{[url]}"

5. Нет, пусть ref это будет строка «%{[url]}». К настоящему времени я начинаю верить, что это невозможно… :/