Perl から Fluentd にログ出力 - Fluent::Logger リリース

皆さん、ログ書いてますか!?(挨拶)

Fluentd meetup in Japan も開催間近、最近大変熱いイベントログ収集システム Fluentd なわけですが、Perl からログを出力する Fluent::Logger というモジュールを CPAN にリリースしたのでお知らせします。
(最初の版は id:hirose31 さんが書かれて、それに同僚の id:shin1rosei と手を加えたものです)


インストールは cpanm などでどうぞ。使い方は POD にもあるように簡単です。

use Fluent::Logger;
my $logger = Fluent::Logger->new( host => "127.0.0.1", port => 24224 );
$logger->post( "myapp.info" => { foo => "bar" } );

上記の例で送信するメッセージ { foo => "bar" } の部分は、Fluentd の特徴である構造化されたメッセージを任意の hashref で指定できます。


ログを送信しようとして fluentd に繋がらない場合、接続が切断されていた場合にはオブジェクト内のバッファにメッセージを保存し、再接続、再送する機能もあります。接続を永続化した状態で fluentd を再起動しても安心です。

ただしオブジェクトが消滅するタイミングまでに fluentd に送信できなかった場合は、バッファをメモリ上に持っているため当然ながらメッセージが失われてしまいます。本番環境では

  • Fluent::Logger オブジェクトを永続化する
  • 中継用に disk バッファを持つ fluentd を配置する

などの構成をおすすめします。

パフォーマンスについて

リポジトリ内に簡単なベンチマークスクリプト xt/06_benchmark.t があります。手元の macbook Air (13" late 2010) に、fluentd-0.10.8 を同一ホストに立てた状態で以下のような結果です。

# 0.63 sec / 10000 msgs (37 bytes) = 15757.09qps (4.45Mbps)
# 0.67 sec / 10000 msgs (129 bytes) = 14910.66qps (14.67Mbps)
# 0.91 sec / 10000 msgs (1029 bytes) = 11014.97qps (86.47Mbps)

メッセージ長に左右されますが、1万qps 以上。オリジナルの Ruby 版には若干及びませんが、実用上十分な速度だと思います。

要望、フィードバックなどありましたらお寄せください。github リポジトリはこちらです https://github.com/fluent/fluent-logger-perl