#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]}». К настоящему времени я начинаю верить, что это невозможно… :/