Я пытаюсь захватить поле IP-адреса из входящего события logstash и передать его сценарию оболочки для сравнения со статическим черным списком. Проблема в том, что я могу напечатать IP-адрес, используя puts, но не смог захватить, чтобы передать его на system()
вызов в ruby-фильтр. Вот мой пример конфигурации.Logstash ruby filter и поля событий
Я использую logstash 2.0
Sample input = {"name":"xyz", "source_ip":"8.8.8.8"}
input {
stdin {
codec => json
}
}
filter {
ruby {
code => "
# puts event['source_ip'] # This always works
ip = event['source_ip']
system('echo ${ip}') # This echoes ${ip} instead of value !
"
}
}
Я также попытался 'echo #${ip}
', но он просто печатает 0
.
Он не отвечает на рубиновый вопрос, но вы рассмотрели перевести {} фильтр? –
Я не знал о переводе {}, просто посмотрел на него. Это хорошая идея, но многие другие вещи в моем файле conf уже сделаны с использованием рубинового фильтра, который, я считаю, более гибким. Модули вывода exec() и pipe() не имеют смысла в моем случае использования. Я хотел бы сделать это в рубине, я уверен, что это что-то основное, что мне не хватает. – Deep
Если у вас есть время, было бы неплохо изменить ваш вопрос, чтобы отразить тот факт, что более поздние версии logstash не поддерживают прямой доступ к таким полям, как ваш 'event ['source_ip']'. Теперь вы можете получить доступ к этим полям с помощью формы доступа: 'event.get ('source_ip')'. Ура! – Niko