この記事は公開されてから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/