はじめに
基本編では、ログ収集サーバーおよび、クライアントのインストールと基本的な設定について解説しました。応用編では、サーバーが収集したログをデータベースに集積し、検索する方法を解説します。
データベースへのログ集積
基本編では、fluentdが収集したログは全てファイルとして保存していますが、保存されたログファイルのサイズが大きくなると、ログの解析も困難になります。
そこで、公式プラグインとして用意されているmongoプラグインを使用して、収集したログをMongoDB上に集積します。
なお、セットアップはサーバー上で行って下さい。
- MongoDBレポジトリ設定
インストールに先立ち、MongoDBのリポジトリを設定します。
$ sudo vi /etc/yum.repos.d/mongo.repo
[mongo] name=MongoDB Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686 gpgcheck=0 enabled=1
- MongoDBのインストール
MongoDBサーバー(mongo-10gen-server)および、Mongo シェル(mongo-10gen)をインストールします。
$ sudo yum -y install mongo-10gen mongo-10gen-server
[vagrant@fluentd-server ~]$ sudo yum -y install mongo-10gen mongo-10gen-server Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Including mirror: ftp.iij.ad.jp Including mirror: ftp.tsukuba.wide.ad.jp Including mirror: www.ftp.ne.jp Including mirror: ftp.jaist.ac.jp Including mirror: ftp.riken.jp Including mirror: mirror.fairway.ne.jp Including mirror: ftp.nara.wide.ad.jp * base: ftp.iij.ad.jp Including mirror: ftp.iij.ad.jp Including mirror: ftp.tsukuba.wide.ad.jp Including mirror: www.ftp.ne.jp Including mirror: ftp.jaist.ac.jp Including mirror: ftp.riken.jp Including mirror: mirror.fairway.ne.jp Including mirror: ftp.nara.wide.ad.jp * extras: ftp.iij.ad.jp * updates: mirrors.hustunique.com
Installed size: 211 M Downloading Packages: (1/2): mongo-10gen-2.4.9-mongodb_1.i686.rpm | 71 MB 00:27 (2/2): mongo-10gen-server-2.4.9-mongodb_1.i686.rpm | 12 MB 00:09 -------------------------------------------------------------------------------- Total 1.9 MB/s | 83 MB 00:43 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : mongo-10gen-2.4.9-mongodb_1.i686 1/2 Installing : mongo-10gen-server-2.4.9-mongodb_1.i686 2/2 Verifying : mongo-10gen-server-2.4.9-mongodb_1.i686 1/2 Verifying : mongo-10gen-2.4.9-mongodb_1.i686 2/2 Installed: mongo-10gen.i686 0:2.4.9-mongodb_1 mongo-10gen-server.i686 0:2.4.9-mongodb_1 Complete!
- インストール確認
$ mongo --version
- データベース設定の変更
今回インストールしたMongoDBサーバーは、32bit版のため記録可能なデータベースサイズに2GBの制約があります。このため、公式サイトで推奨している64bit版のMongoDBをインストールすることをお勧めします。
今回は、32bit版では、デフォルトで有効になっているジャーナル保存を無効化します。
$ sudo vi /etc/mongod.conf
nojournal = true
- サービスの起動と自動起動設定
$ sudo service mongod start $ sudo chkconfig mongod on
- ログ収集設定
td-agent.confを下記のとおり編集し、設定をリロードします。
$ sudo vi /etc/td-agent/td-agent.conf
# マッチしたログをファイルおよび、MongoDBに出力する <match **> type copy # 複数の出力先にコピーする <store> # 1番目の出力先 (ファイル) type file # ファイル出力 path /var/log/td-agent/secure/secure.log # 出力ファイル名 time_slice_format %Y%m%d # 出力ファイル拡張子 time_slice_wait 1m # 出力遅延時間 </store> <store> # 2番目の出力先 (MongoDB) type mongo # MongoDB host localhost # MongoDBサーバーアドレス port 27017 # MongoDB接続ポート database fluentd # データベース名 collection test # コレクション(テーブル)名 capped # 固定サイズ指定 capped_size 1024m # 最大サイズ指定 flush_interval 10s # データ書き出し間隔 (10秒) </store> </match>
$ sudo service td-agent reload
- ログ検索
MongoDBに収集されたログを検索します。
$ mongo
Mongoコマンドシェルが起動されたら、下記のコマンドを入力します。
> use fluentd > db.test.find().forEach(printjson); > exit
[vagrant@fluentd-server ~]$ mongo MongoDB shell version: 2.4.9 connecting to: test Server has startup warnings: Thu Feb 20 11:41:10.387 [initandlisten] Thu Feb 20 11:41:10.387 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary. Thu Feb 20 11:41:10.387 [initandlisten] ** 32 bit builds are limited to less than 2GB of data (or less with --journal). Thu Feb 20 11:41:10.387 [initandlisten] ** Note that journaling defaults to off for 32 bit and is currently off. Thu Feb 20 11:41:10.387 [initandlisten] ** See http://dochub.mongodb.org/core/32bit Thu Feb 20 11:41:10.387 [initandlisten] > use fluentd switched to db fluentd > db.test.find().forEach(printjson); { "_id" : ObjectId("53056b8b51d0c30e5b000001"), "message" : "Feb 20 10:18:17 fluentd-server sudo: vagrant : TTY=pts/0 ; PWD=/home/vagrant ; USER=root ; COMMAND=/usr/bin/tail -f /var/log/mongo/mongod.log", "time" : ISODate("2014-02-20T02:42:08Z")
"message" : "Feb 20 12:31:33 fluentd-server sshd[3724]: Received disconnect from 10.0.2.2: 11: disconnected by user", "time" : ISODate("2014-02-20T03:31:33Z") } { "_id" : ObjectId("5305771a51d0c30e5b00004f"), "message" : "Feb 20 12:31:33 fluentd-server sshd[3722]: pam_unix(sshd:session): session closed for user vagrant", "time" : ISODate("2014-02-20T03:31:33Z") } { "_id" : ObjectId("5305834e51d0c30e5b000050"), "message" : "Feb 20 13:23:40 fluentd-server sshd[2946]: Received disconnect from 10.0.2.2: 11: disconnected by user", "time" : ISODate("2014-02-20T04:23:40Z") } { "_id" : ObjectId("5305834e51d0c30e5b000051"), "message" : "Feb 20 13:23:40 fluentd-server sshd[2944]: pam_unix(sshd:session): session closed for user vagrant", "time" : ISODate("2014-02-20T04:23:40Z") } > exit bye
実行すると、指定したコレクション(test)のデータが全て表示できます。
MongoDB Viewerの設定
MongoDB Viewerは、MongoDBの管理を行うウエブアプリケーションです。
本アプリケーションをインストールすることで、MongoDB上の操作を全てGUIで行うことが可能です。
ここでは、MongoDB上に収集されたデータの表示を行います。
- アーカイブのダウンロードと解凍
公式サイトから、アーカイブをダウンロードし解凍します。
$ mkdir -p mViewer && cd mViewer $ wget -q --no-check-certificate https://github.com/downloads/Imaginea/mViewer/mViewer-v0.9.1.tar.gz $ tar zxf mViewer-v0.9.1.tar.gz $ rm mViewer-v0.9.1.tar.gz
- mViewerの起動
シェルコマンドを用いて、mViewerを起動します。
mViewerの起動方法は、今回のように毎回コマンドラインから起動することも可能ですが、自動起動スクリプトを作成して、システム起動時に起動すると良いでしょう。$ sudo ./start_mViewer.sh
[vagrant@fluentd-server mViewer]$ sudo ./start_mViewer.sh Using Http Port : 8080 [Winstone 2014/02/20 17:23:59] - Beginning extraction from war file [Winstone 2014/02/20 17:23:59] - HTTP Listener started: port=8080 [Winstone 2014/02/20 17:23:59] - Winstone Servlet Engine v0.9.10 running: controlPort=disabled
起動すると、デフォルトポート8080番でHTTP接続が可能になりますので、下記のURLにアクセスします。
http://192.168.0.50:8080
- ログイン
MongoDBが、認証無しで起動しているため、UserNameおよび、Passwordを未入力のまま[GO]をクリックすると、ログインできます。
- データベース表示
DATABASEタブをクリックすると、fluentdにより作成されたデータベースが表示されます。
- コレクション表示
COLLECTIONSタブをクリックすると、fluentdにより作成されたコレクション(test)が表示されますので、コレクションをクリックすると、JSON形式のデータを表示することができます。
まとめ
ここまで、基本編、応用編の2回に渡ってfluentdによるログ収集システムの構築方法を解説しました。fluentdは、簡単な設定で数多くのログを収集し、データベースに集積できるソフトウエアです。今回は解説しませんでしたが、ウエブアプリケーションなどのカスタムアプリケーションのログもfluentdで集積可能です。
公式サイトのドキュメントには、設定例とともに、レシピも公開されていますので、本記事を参考にして、ログ収集システムを検討しては如何でしょうか。