もふもふ技術部

fluentd pluginの開発環境をVagrantで作る


fluentdのplugin開発が必要になったので、開発環境を構築しようとしたのですがサクっとできなかった。

下記エントリを参考に雛形は出来たものの、実際にどうやってデバッグしていくのかわからなかったので、自分なりにやってみることにした。

tagomorisさんのエントリ
http://d.hatena.ne.jp/tagomoris/20120221/1329815126

Vagrantでやってみる

Mac OS X 10.9でやってます。まずtd-agent(fluentd)を入れる必要があるわけですが、選択肢がいくつかありました。

  • ローカルにtd-agentをインストール、launchctlで起動制御
  • ローカルのgemにインストール、fluendコマンドで起動制御
  • Vagrantを使ってCentOSにインストール、serviceコマンドで起動制御

設定ファイルの修正などで頻繁に再起動することがありそうなので、実際の環境に近いし、一番慣れているCentOSのserviceコマンドでやることにしました(3つとも全部試した)。

ちなみにgemのfluentdコマンドで起動制御すると停止コマンドがないので自分で作るか、プロセスを調べてkillする必要があって、非常に面倒なため却下でした。

Vagrantの使い方は昔書いたので参照されたし。たしかこの辺。
http://j-caw.co.jp/blog/?p=945
http://j-caw.co.jp/blog/?p=1029

まずは、gem配布を前提としたプロジェクト構成を生成します。この辺は上記tagomorisさんのエントリ通りでOKです。

次に、プロジェクト直下にVagrantfileを作成します。今回WAFのログを扱うpluginを書こうと思っているのでホストOSからポート80を見に行けるようにしてます。

Vagrantをup, sshしたら、lib/fluent/pluginディレクトリのシンボリックリンクを作成します。fluentdは/etc/td-agent/plugin配下のスクリプトファイルを見に行くので、そこに開発中のスクリプトファイルが配置されるようにするためです。

{“hoge” => “poge”}というデータを入力するpluginで試してみます。

ゲストOSの/etc/td-agent/td-agent.confを修正します。

再起動するとin_hoge.rbが実行されてログに出力される。

あとはすきなように実装していけば良い。

既存pluginを継承したい

既に存在するpluginを継承したい場合(fluent-gemでインストールしている)、下記のようにrequireすれば読み込めるみたい。

The following two tabs change content below.
原田 敦

原田 敦

日本CAWのエンジニア。もふもふ部の部長。得意分野はRuby on Railsを使った小規模WEBアプリケーションを高速で開発すること。週末の楽しみは一人お菓子パーティー。三度の飯より小動物をもふもふするのが好きです。