ruby filter可以说是Logstash中最强大的一个filter了,通过自己编写ruby代码可以灵活地实现各种功能。显然,每次修改ruby filter后运行Logstash来调试是非常低效的。Logstash启动需要时间,而且错误信息只能在日志里看。最好的方法其实是复制几个消息,然后在irb中调试好ruby filter之后,再更新到Logstash配置文件中。
在Elastic 5.0版本开始,强制使用get/set方法访问event,为调试带来一定困难。其实我们可以写一个简单的类解决这一问题,详见http://git.oschina.net/mvpboss1004/ruby_filter_debugger。新建一个ruby_filter_debugger.rb
文件:
#coding: utf-8
#!/usr/bin/ruby
class RubyFilterDebugger
def initialize(dict={})
@dict = dict
end
def get(key)
return @dict[key]
end
def set(key, value)
@dict[key] = value
end
def cancel()
@dict = {}
puts 'dict is empty now'
end
end
然后在同一文件夹运行irb
即可,例如:
load "ruby_filter_debugger.rb"
event = RubyFilterDebugger.new()
event.set('hello', 1)
event.get('hello')
event.cancel()