Fluentdによるログ収集システムの構築

2014年02月19日 23時02分

201402192302OFLC00.png

はじめに

fluentdは、システムが出力するログを収集するシステムとして、トレジャーデータ社によって開発されています。 今回は、fluentdによるログ収集システムの構築方法を解説します。

前提条件

構築に必要なサーバー要件および、導入パッケージは下記のとおりです。

  1. 作業環境
    OSWindows 7 Ultimate 32bit
    CygwinSetup Version 2.831
    VirtualBox4.3.6 r91406
    Vagrant1.4.1
  2. サーバー要件
    サーバーfluentdサーバーfluentdクライアント
    ホスト名fluentd-serverfluentd-client
    IPアドレス192.168.0.50(eth1)192.168.0.20(eth1)
    OSCentOS 5.5 i386
    インストールタイプminimal
    HDD8GB(SCSI)
    RAM512MB
    Apache2.2.15
    OpenJDK1.7.0
  3. 導入するパッケージ
    パッケージfluentdサーバーfluentdクライアント
    td-agent1.1.18
    mongo-10gen-server2.4.9n/a
    mongo-10gen2.4.9n/a
    mViewer0.9.1n/a

サーバーのセットアップ

  1. fluentdのインストール

    公式ドキュメントのとおり、インストーラーを実行してインストールします。

    実行すると、TresureDataのリポジトリ(/etc/yum.repo.d/td.repo)が作成され、RPMパッケージがインストールされます。

    $ curl -s http://toolbelt.treasuredata.com/sh/install-redhat.sh | sudo bash
    
    201402192302OFLC01.png
    201402192302OFLC02.png
  2. インストール確認
    $ td-agent --version
    
    201402192302OFLC03.png
  3. サービス起動ユーザーの設定

    fluentdをインストールすると、サービス起動ユーザー名、グループ名が作成されますが、作成されたtd-agentユーザーは、rootユーザーが所有するログファイルには、アクセスできません。
    このため、サービス起動スクリプト/etc/init.d/td-agentでは、/etc/sysconfig/td-agentファイルを読み込むようになっているため、/etc/sysconfig/td-agentファイルを作成し、サービス起動ユーザーを変更します。
    これにより、サービスの起動ユーザーは、rootとなり全てのファイルにアクセスできるようになります。

    なお、今回は設定例として、/var/log/secureログにアクセスするため、rootユーザーでサービスを起動できるように変更していますが、td-agentユーザーがアクセス可能なログファイルのみを収集する場合は、本設定は必要ありません。

    $ sudo vi /etc/sysconfig/td-agent
    
    DAEMON_ARGS="--user root"
    TD_AGENT_ARGS="/usr/sbin/td-agent --user root --group td-agent --log /var/log/td-agent/td-agent.log"
    
    201402192302OFLC04.png
  4. サービスの起動と自動起動設定
    $ sudo service td-agent start
    $ sudo chkconfig td-agent on
    
    201402192302OFLC05.png
  5. ログ収集設定

    fluentdの設定は、source/match/includeの三種類のディレクティブから構成されており、設定は/etc/td-agent/td-agent.confファイルに記述します。
    ディレクティブの主な機能は、次のとおりです。

    ディレクティブ機能
    sourceログの収集方法を定義する。
    match条件にマッチしたログの処理方法を定義する。
    include他の設定ファイルを読み込む。

    各ディレクティブは、次の構文形式です。

    <source>
    type 入力プラグイン
    
    設定項目1 設定値1
    設定項目2 設定値2
       :         :
       :         :
    </source>
    

    条件には、***といったワイルドカードや、{}で条件を括る事によって、OR条件を指定できます。

    <match 条件>
    type 入力プラグイン
    
    設定項目1 設定値1
    設定項目2 設定値2
       :         :
       :         :
    </match>
    

    ディレクティブや設定項目の詳細については、設定ファイルを参照して下さい。
    また、プラグインについては、入力プラグインおよび、出力プラグインを参照して下さい。

    ここでは、/var/log/secureログをtailプラグインで収集し、別ファイルに書き込む設定を行います。

    $ sudo vi /etc/td-agent/td-agent.conf
    
    # /var/log/secureを入力イベントとして定義
    <source>
      type tail
      path /var/log/secure                       # 入力ファイル名
      pos_file /var/log/td-agent/secure.pos      # 読み込み位置保存ファイル
      tag log_secure                             # イベントタグ
      format none                                # メッセージ形式(無し)
    </source>
    
    # マッチしたログをファイルに出力する
    <match **>
      type file                                  # ファイル出力
      path /var/log/td-agent/secure/secure.log   # 出力ファイル名
      time_slice_format %Y%m%d                   # 出力ファイル拡張子
      time_slice_wait 1m                         # 出力遅延時間
    </match>
    
    201402192302OFLC06.png

    設定が終了したら、設定をリロードします。

    $ sudo service td-agent reload
    
    201402192302OFLC07.png

    secureログを収集する設定となっていますので、サーバー上でsuコマンドやsudoコマンドを実行すると、secure.logにマッチしたログが書き込まれます。

    201402192302OFLC08.png
  6. ログ受信設定

    fluentdが、各クライアントから入力イベントを受信する設定を行います。
    td-agent.confに、下記の内容を追記し、設定をリロードします。

    $ sudo vi /etc/td-agent/td-agent.conf
    
    # クライアントからのイベント受信設定
    <source>
      type forward                               # 転送
      port 24224                                 # サーバー待ち受けポート
    </source>
    
    201402192302OFLC09.png
    $ sudo service td-agent reload
    
    201402192302OFLC10.png

    以上で、サーバーのセットアップは終了です。

クライアントのセットアップ

クライアントのセットアップは、サーバーセットアップの手順1~4までは同一ですので、割愛します。

  1. ログ収集設定

    クライアントでは、サーバーと同様にsecureログを別ファイルにログを集積し、サーバーにログを送信します。

    sudo vi /etc/td-agent/td-agent.conf
    

    sourceディレクティブは、サーバーセットアップと同一ですが、matchディレクティブでは、ログの送信先の設定および、送信エラーが発生した際のファイル出力を定義しています。

    # /var/log/secureを入力イベントとして定義
    <source>
      type tail
      path /var/log/secure
      pos_file /var/log/td-agent/secure.pos
      tag log_secure
      format none
    </source>
    
    # マッチしたログをサーバーに送信する
    <match **>
      type forward          # 転送
      send_timeout 60s      # 送信タイムアウト(60秒)
      heartbeat_type udp    # ハートビートプロトコル(udp)
      heartbeat_interval 1s # ハートビート間隔(1秒)
      <server>
        host 192.168.0.50   # 送信先サーバーアドレス
        port 24224          # サーバー待ち受けポート
      </server>
      <secondary>     # 送信エラーの場合、ファイル出力
        type file
        path /var/log/td-agent/forward-failed
      </secondary>
    </match>
    
    201402192302OFLC11.png

    設定が終了したら、設定をリロードします。

    $ sudo service td-agent reload
    
    201402192302OFLC12.png

    サーバーセットアップと同様に、クライアント上でsu/sudoコマンドを実行すると、サーバー上のログに表示されます。

    201402192302OFLC13.png
  2. アクセスログ収集設定

    Apacheウエブサーバーのアクセスログを収集し、サーバーに送信します。

    sudo vi /etc/td-agent/td-agent.conf
    
    # Apacheアクセスログを入力イベントとして定義
    <source>
      type tail
      path /var/log/httpd/access_log
      tag apache.access
      pos_file /var/log/td-agent/httpd-access_log.pos
      format apache2
    </source>
    
    201402192302OFLC14.png

    td-agent.confの編集が終了したら、設定をリロードします。

    201402192302OFLC15.png

    クライアント上のウエブサーバーにアクセスすると、サーバー上のログに表示されます。

    201402192302OFLC16.png

    以上で、クライアントのセットアップは終了です。