2016-03-03 58 views
0

我想从传入的logstash事件中捕获IP地址字段,并将它传递给一个shell脚本以与静态黑名单进行比较。问题是,我能够使用put打印IP地址,但无法捕获将它传递给system()在ruby过滤器中的调用。这是我的示例配置。Logstash红宝石过滤器和事件字段

我使用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文件中的很多其他内容已经使用ruby过滤器完成了,我认为它更加灵活。 exec()和pipe()输出插件在我的用例中没有意义。我很想在红宝石本身做到这一点,我相信这是我失踪的基本知识。 – Deep

+0

如果您有时间,最好编辑您的问题,以反映logstash的新版本不支持直接访问像'event ['source_ip']'这样的字段。您现在可以使用访问器窗体访问这些字段:'event.get('source_ip')'。干杯! – Niko

回答