以前から下記のような事を家のFluentdでやってきました。
先達のライブラリをラップしたり、Web APIを叩いたりといった処理を都度都度プラグインとして実装していると、本当に今後も使い続けるかわからないのにきっちりやり過ぎかなあという思いがでてきました。
そこで、かねてから作っていたbash0C7/fluent-plugin-ruby_eval · GitHubにアウトプットプラグインを追加し、設定ファイル上にスクリプトレットを書くことで、送られてきたメッセージを元に何かを叩くという処理のプロトタイピングを行いやすくしてみました。
業務できっちり動かしていくものは、プラグイン化してテストを書いて、今後の変更と再利用性を上げるといいですが、プロトタイプ実装としてはこのような簡易的な方法も悪くないんじゃないかと思ってます。
このプラグインにテストを追加し、名前をfluent-plugin-ruby_one_linerに一新して、先ほどgem releaseしました。
このプラグインによって、もはや私のご自宅のFluentdが極まったといっても過言ではありません。 様々なRubyのライブラリの呼び出しコードを設定ファイルにサッと書いて、すぐ利用を開始することができるようになりました。
利用上の注意
プロトタイピング用途です。設定ファイルに書いたワンライナーを実行時にevalしており、通常のプラグインと比べて自分の足を簡単に撃ちぬくことができます。
インストール
お使いのFluentdのGemfileにgem 'fluent-plugin-ruby_one_liner'
書くか、gem install fluent-plugin-ruby_one_liner
してください。
設定ファイルの書き方
https://github.com/bash0C7/fluent-plugin-ruby_one_liner#fluent-plugin-ruby_one_liner を参照。
- require_libs(optional): 読み込むgemをカンマ区切りで指定。
- command : 実行させるワンライナー。詳細は後述。
- run_interval : 実行間隔。0だとインターバル無しでババッと動く。他所のAPIをエレガントに叩きたい場合は適当な秒数を入れるといいでしょう。
- その他の設定項目 :
command
中で、@config[<項目名>]として参照できます。Fluentdが設定ファイル読み込むときにwarningだすけど。
commandの詳細
- Inputプラグインの場合: よしなに取り込んだデータを、Engine.emitを使ってeventとしてsubmitしましょう。 http://docs.fluentd.org/articles/plugin-development#writing-input-plugins を参照のこと。
- Outputプラグインの場合: tag, time, recordから流れてきたデータを取り出してよしなにしましょう。http://docs.fluentd.org/articles/plugin-development#writing-non-buffered-output-plugins を参照のこと。
今後の展開
filterっぽい挙動をするプラグインも作れるようにしたい。タグの書き換え機能をサポートするといいかな。