
node.jsのいろいろなモジュール49 – log4js + fluentdの連携
この記事は公開されてから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側で出力先を指定してログ収集しましょう。
参考サイトなど
- Github: https://github.com/fluent/fluent-logger-node
- node+fluentd+mongo: https://dev.classmethod.jp/server-side/node-fluentd-mongodb/








