概要
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開発を整理するという話があり、実際に実現されて嬉しい限りです。
以下参考サイトです。