fluent-plugin-datacounter や fluent-plugin-grep のようなメッセージを受け取って次のプラグインに filter するようなプラグインの仕組みとして filter プラグインができました。output プラグインから変更する必要があります。
まずはこちらを参照. そちらに従った変更は終っているものとします。 https://gist.github.com/frsyuki/6191818
out_xxx.rb
を filter_xxx.rb
のように変更します。
Fluentd::Plugin::Output を Fluentd::Plugin::Filter に変更します。
module Fluend
module Plugin
class XXX < Output
end
end
end
を
module Fluend
module Plugin
class XXX < Filter
end
end
end
Plugin.register_output('xxx', self)
↓
Plugin.register_filter('xxx', self)
Input プラグインと同様に Filter プラグインの場合も Engine.emit を collector.emit に変更します。
尚、Output プラグインは emit を呼べなくなっているので、emit を呼ぶ必要のある旧 Output プラグインはすべからく Filter プラグインとなります。
Engine は消えたので、以前の Engine.now が返していた値である Time.now.to_i に変更します。
def emit(tag, es, chain)
// do initialize
es.each |time, record|
// do something
end
// do finalize
chain.next
end
としていた処理を
def emits(tag, es)
// do initialize
es.each {|time,record|
handle_error(tag, time, record) {
emit(tag, time, record)
}
}
// do finalize
}
def emit(tag, time, record)
// do something
end
となるように実装し直します。
<filter **>
type retag
tag error
</filter>
こんなかんじに match ではなく filter になるようですね。