id:bash0C7の進捗

出来は上々で申し分の無い仕上がり日記

Fluentdでruby -e 'command'っぽくRubyのワンライナーを実行できるfluent-plugin-ruby_one_linerをリリースしました

以前から下記のような事を家の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の詳細

今後の展開

filterっぽい挙動をするプラグインも作れるようにしたい。タグの書き換え機能をサポートするといいかな。