2016-03-03 2 views
0

Я пытаюсь захватить поле 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.

+0

Он не отвечает на рубиновый вопрос, но вы рассмотрели перевести {} фильтр? –

+0

Я не знал о переводе {}, просто посмотрел на него. Это хорошая идея, но многие другие вещи в моем файле conf уже сделаны с использованием рубинового фильтра, который, я считаю, более гибким. Модули вывода exec() и pipe() не имеют смысла в моем случае использования. Я хотел бы сделать это в рубине, я уверен, что это что-то основное, что мне не хватает. – Deep

+0

Если у вас есть время, было бы неплохо изменить ваш вопрос, чтобы отразить тот факт, что более поздние версии logstash не поддерживают прямой доступ к таким полям, как ваш 'event ['source_ip']'. Теперь вы можете получить доступ к этим полям с помощью формы доступа: 'event.get ('source_ip')'. Ура! – Niko

ответ