FluentdのログをMongoDBに出力して検索する方法

2014年02月20日 07時43分

201402200743OFLC00.png

はじめに

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
    
    201402200743OFLC01.png
  2. MongoDBのインストール

    MongoDBサーバー(mongo-10gen-server)および、Mongo シェル(mongo-10gen)をインストールします。

    $ sudo yum -y install mongo-10gen mongo-10gen-server
    
    201402200743OFLC02.png
    201402200743OFLC03.png
  3. インストール確認
    $ mongo --version
    
    201402200743OFLC04.png
  4. データベース設定の変更

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

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

    $ sudo vi /etc/mongod.conf
    
    nojournal = true
    
    201402200743OFLC05.png
  5. サービスの起動と自動起動設定
    $ sudo service mongod start
    $ sudo chkconfig mongod on
    
    201402200743OFLC06.png
  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>
    
    201402200743OFLC07.png
    $ sudo service td-agent reload
    
    201402200743OFLC08.png
  7. ログ検索

    MongoDBに収集されたログを検索します。

    $ mongo
    

    Mongoコマンドシェルが起動されたら、下記のコマンドを入力します。

    > use fluentd
    > db.test.find().forEach(printjson);
    > exit
    

    実行すると、指定したコレクション(test)のデータが全て表示できます。

    201402200743OFLC09.png
    201402200743OFLC10.png

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
    
    201402200743OFLC11.png
  2. mViewerの起動

    シェルコマンドを用いて、mViewerを起動します。
    mViewerの起動方法は、今回のように毎回コマンドラインから起動することも可能ですが、自動起動スクリプトを作成して、システム起動時に起動すると良いでしょう。

    $ sudo ./start_mViewer.sh
    
    201402200743OFLC12.png

    起動すると、デフォルトポート8080番でHTTP接続が可能になりますので、下記のURLにアクセスします。

    http://192.168.0.50:8080
    
    201402200743OFLC13.png
  3. ログイン

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

  4. データベース表示

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

    201402200743OFLC14.png
  5. コレクション表示

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

    201402200743OFLC15.png