fluentdによるログ収集システムの構築~応用編

fluentdによるログ収集システムの構築~応用編

はじめに

基本編では、ログ収集サーバーおよび、クライアントのインストールと基本的な設定について解説しました。応用編では、サーバーが収集したログをデータベースに集積し、検索する方法を解説します。

データベースへのログ集積

基本編では、fluentdが収集したログは全てファイルとして保存していますが、保存されたログファイルのサイズが大きくなると、ログの解析も困難になります。

そこで、公式プラグインとして用意されているmongoプラグインを使用して、収集したログをMongoDB上に集積します。

なお、セットアップはサーバー上で行って下さい。

  1. 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
    
    4017-01
  2. 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!
    
  3. インストール確認
    $ mongo --version
    
    4017-04
  4. データベース設定の変更

    今回インストールしたMongoDBサーバーは、32bit版のため記録可能なデータベースサイズに2GBの制約があります。このため、公式サイトで推奨している64bit版のMongoDBをインストールすることをお勧めします。

    今回は、32bit版では、デフォルトで有効になっているジャーナル保存を無効化します。

    $ sudo vi /etc/mongod.conf
    
    nojournal = true
    
    4017-05
  5. サービスの起動と自動起動設定
    $ sudo service mongod start
    $ sudo chkconfig mongod on
    
    4017-06
  6. ログ収集設定

    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>
    
    4017-07
    $ sudo service td-agent reload
    
    4017-08
  7. ログ検索

    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上に収集されたデータの表示を行います。

  1. アーカイブのダウンロードと解凍

    公式サイトから、アーカイブをダウンロードし解凍します。

    $ 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
    
    4017-11
  2. 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
    
  3. ログイン

    MongoDBが、認証無しで起動しているため、UserNameおよび、Passwordを未入力のまま[GO]をクリックすると、ログインできます。

    4017-13
  4. データベース表示

    DATABASEタブをクリックすると、fluentdにより作成されたデータベースが表示されます。

    4017-14
  5. コレクション表示

    COLLECTIONSタブをクリックすると、fluentdにより作成されたコレクション(test)が表示されますので、コレクションをクリックすると、JSON形式のデータを表示することができます。

    4017-15

まとめ

ここまで、基本編、応用編の2回に渡ってfluentdによるログ収集システムの構築方法を解説しました。fluentdは、簡単な設定で数多くのログを収集し、データベースに集積できるソフトウエアです。今回は解説しませんでしたが、ウエブアプリケーションなどのカスタムアプリケーションのログもfluentdで集積可能です。

公式サイトのドキュメントには、設定例とともに、レシピも公開されていますので、本記事を参考にして、ログ収集システムを検討しては如何でしょうか。

Comments are closed.