Skip to content

Instantly share code, notes, and snippets.

@sonots
Last active December 20, 2015 21:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sonots/6199142 to your computer and use it in GitHub Desktop.
Save sonots/6199142 to your computer and use it in GitHub Desktop.

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

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

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

1. ファイル名の変更

out_xxx.rbfilter_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

3. 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 になるようですね。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment