fluentd
Plugin

fluentdのpluginを作成する (fluent-plugin-generateコマンド利用)

概要

fluentdのpluginを作成する際に、v0.14.13からfluent-plugin-generateコマンドが利用できるようになった。(ちなみにv0.14の次はv1.0になっている。) 今回は、このコマンドを利用して、pluginを作成して、ローカルでテストできる環境を作ってみた。

事前準備

gem最新化, bundler / fluentd / test-unitのインストールを実施する。(fluentdのテストコードはtest-unitを利用している)

$ gem update --system
$ gem install bundler
$ gem install fluentd
$ fluentd --version
fluentd 1.1.0
$ gem install test-unit

plugin作成

generate コマンド実行

このコマンドを実行すると、plugin用のプロジェクトフォルダを作成してくれる。めっちゃ便利。
試しに、下記ではfilterプラグインを作成するコマンドを実行。

$ fluent-plugin-generate filter hogehoge
License: Apache-2.0
    create Gemfile
    create README.md
    create Rakefile
    create fluent-plugin-onekeyparse.gemspec
    create lib/fluent/plugin/filter_hogehoge.rb
    create test/helper.rb
    create test/plugin/test_filter_hogehoge.rb
Initialized empty Git repository in /xxxx/fluent-plugin-hogehoge/.git/

動作確認

  • fluentd.conf作成 filterの@typeに今回作成するpluginのhogehogeを設定
<source>
  @type forward
</source>

<filter **>
  @type hogehoge
</filter>

<match **>
  @type stdout
</match>
  • fluentd起動
$ fluentd -c fluent.conf -p lib/fluent/plugin
  • ログ送信
$ echo '{"a":"foo","b":"bar"}' | fluent-cat raw.test
  • テスト
$ rake test
Finished in 0.004382 seconds.
・・・

---------------------------------------------------------------------------------------------------------------------------------------------
1 tests, 1 assertions, 1 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
0% passed
---------------------------------------------------------------------------------------------------------------------------------------------
228.21 tests/s, 228.21 assertions/s

//テストが失敗すればOK。 コードを実装してテストが通るようにする。

まとめ

自分でpluginを書くのはハードル高そうですが、このgeneratorがあれば、なんとなく作れそうな気になってきますよね。私もチャレンジしてみたいと思います。plugin周りについては、2016年のFluentd meetupで統一されてないplugin開発を整理するという話があり、実際に実現されて嬉しい限りです。
以下参考サイトです。
- Fluentd v0.14.13で追加されたコマンドのご紹介
- Fluentd v0.12 Filter プラグインの使い方と作り方