Skip to content

V11 plugin porting guide filter ja

FURUHASHI Sadayuki edited this page Oct 22, 2013 · 2 revisions

Fluentdプラグインのv10→v11移植ガイド (filterぷらぎん編)

fluent-plugin-datacounter や fluent-plugin-grep のようなメッセージを受け取って次のプラグインに filter するようなプラグインの仕組みとして filter プラグインができました。output プラグインから変更する必要があります。

まずはこちらを参照. そちらに従った変更は終っているものとします。 https://gist.github.com/frsyuki/6191818

1. ファイル名の変更

out_xxx.rb を filter_xxx.rb のように変更します。

2. 親クラスの変更

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
  1. register_output → register_filter に変更
Plugin.register_output('xxx', self)

Plugin.register_filter('xxx', self)

4. Engine.emit → collector.emit に変更(Filterプラグインも)

Input プラグインと同様に Filter プラグインの場合も Engine.emit を collector.emit に変更します。

尚、Output プラグインは emit を呼べなくなっているので、emit を呼ぶ必要のある旧 Output プラグインはすべからく Filter プラグインとなります。

5. Engine.now → Time.now.to_i に変更

Engine は消えたので、以前の Engine.now が返していた値である Time.now.to_i に変更します。

6. def emit(tag, es, chain) を def emits(tag, es) および def emit(tag, time, record) に変更

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

となるように実装し直します。

7. configファイルの変更

<filter **>
  type retag
  tag error
</filter>

こんなかんじに match ではなく filter になるようですね。