node.jsのいろいろなモジュール49 – log4js + fluentdの連携
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/