node.jsのいろいろなモジュール49 – log4js + fluentdの連携

2014.07.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

node + fluentd

最近、いろいろな案件でログの処理にfluentdを使うことが多くなってきました。
fluentdとはログ収集のためのツールで、なんで最近みんなこれを使ってるのか聞いたところ、

  • 複数サーバのログを簡単に集約できるから
  • 入力/出力のためのプラグインを書きやすい

という話をききました。fluentdはいろいろな言語/プラットフォームから使用でき、
出力先もS3等いろいろ指定できるみたいです。
今回はnode.jsからlog4js経由でfluentdを使用してみたいと思います。 ちなみに、この記事でもfluentd + node + mongoでログ出力してるので参考にしてください。

環境構築方法

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.9.4
  • Node : v0.10.29
  • fluentd : v0.10.51

サンプルアプリ作成

モジュールのインストール

まずはlog4jsとfluentd用モジュールをnpmでインストールしましょう。

$ npm install fluent-logger log4js

fluentdのインストールと起動と設定

このへんとかを見てfluentdをインストールしましょう。gem使うのが楽でした。
fluentdをインストールしたら適当な場所で下記のようにコマンドを実行し、動いているのを確認しましょう。

% mkdir path/rour/fluentd && cd path/rour/fluentd
% fluentd --setup ./fluent
% fluentd -c ./fluent/fluent.conf -vv &
% echo '{"json":"message"}' | fluent-cat debug.test

次に、指定したタグをコンソールに出力するよう、 fluentdの設定ファイルに下記記述をします。

・
・
<match myTest.**>
  type stdout
</match>
・
・

サンプルアプリ作成

では、nodeのサンプルアプリを作成しましょう。

var log4js = require('log4js');
log4js.addAppender(
        require('fluent-logger').support.log4jsAppender("myTest", 
        {
         host: "localhost",
         port: 24224,
         timeout: 3.0
        }
));

var logger = log4js.getLogger();
logger.setLevel('INFO');

logger.info("info!!!")
logger.debug("debug!!!");
logger.error("error!!!");

log4jsへfluent-loggerのアペンダを設定し、タグ名やホスト等の情報を指定しています。
LEVELがINFOに設定されているので、上記プログラムを実行すると、
fluentdのコンソールにinfoとerrorが表示されます。

2014-07-28 10:32:54 +0900 myTest.INFO: {"timestamp":1406511174919,"category":"[default]","levelInt":20000,"levelStr":"INFO","data":"info!!!"}
2014-07-28 10:32:54 +0900 myTest.ERROR: {"timestamp":1406511174923,"category":"[default]","levelInt":40000,"levelStr":"ERROR","data":"error!!!"}

まとめ

今回はlog4jsからfluentdを使ってみました。
あとはfluentd側で出力先を指定してログ収集しましょう。

参考サイトなど