ログの管理をfluentdを使ってやってみようと環境構築。
mongoDBのインストール
まずはmongoDBをインストール。ローカルの環境がUbuntuなのでaptのソースリスト(/etc/apt/sources.list)にmongoDBの下記URLを追加する。
## mongoDB deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
続いて以下のコマンドでmongoDBをインストール。
$ sudo apt-get update $ sudo apt-get mongodb-10gen
ちなみにmongodb-10genが最新の安定版でmongodb18-10genが前のバージョンらしい。(何でこんな別れ方してるんだ?)
mongoDBの起動・停止は以下のコマンドで可能。
# 起動 $ sudo service mongodb start # 停止 $ sodo service mongodb stop
正常にmongoDBが起動していれば↓な反応が帰ってくる。
$ mongo MongoDB shell version: 2.0.6 connecting to: test > show dbs; local (empty)
fluentdのインストール
fluentdについては、いろいろインストール方法があるみたいだけど、今回はgemでインストール。ちなみにbsonはbinary jsonで、mongodbが内部でjsonデータを保存する際にbsonで管理してるらしい。
$ gem install fluentd $ gem install fluent-plugin-mongo $ gem install bson_ext
インストールが正常に終わればfluentdコマンド(ログの収集及び出力を行うデーモン)にパスが通った状態になる。またfluent-catというfluentdに対してtcpでログを送信するコマンド、fluent専用のgemを管理するfluent-gemというコマンドも利用可能になる。fluent-gemは、内部でgem_runnnerをコールしてて、fluentのgem環境にgemで提供されるfluentのPlugin等をインストール&メンテナンスできるように用意されてるみたい。
続いて、以下のコマンドでfluentdの設定ファイルのテンプレートを生成する。
$ fluentd --setup ./fluent
fluentディレクトリ直下にfluent.confという設定ファイルが生成される。↓のコマンドでこの設定ファイルを指定してfluentdが起動する。
$ fluentd -c ./fluent.conf -vv
fluent.confの設定
mongoDBと連携するようfluent.confを設定する。
# インプットとなるログの場所を定義 <source> # forwardの場合はTCPソケットでログのイベントストリームを受信する。主にfluent-catや他のfluentのclientライブラリからログを受け取る際に使われる。 type forward </source> # ログの出力先を定義 <match app.**> # 出力先としてmongoDBを使用 type mongo # mongoDBのホスト host localhost # mongoDBのDB名 database fluent # コレクションを定義 collection sample </match>
fluent-logger-javaでログ出力
Javaでfluentに対してログを出力したい場合、fluent/fluent-logger-java · GitHubというclientライブラリがある。
使い方は至ってシンプルで
FluentLogger log = FluentLogger.getLogger("app", "localhost", 24224); log.log("label", "key", "value");
といったコードでfluentに対してログが発行される。mongoDBのデータを見てみると
$ mongo connecting to: test > use fluent; switched to db fluent > db.sample.find(); { "_id" : ObjectId("5021f68ec3441a73f7000001"), "key" : "value", "time" : ISODate("2012-08-08T05:17:13Z") }
ログデータが格納されてることが確認できる。