はじめに
fluentdは、システムが出力するログを収集するシステムとして、トレジャーデータ社によって開発されています。 今回は、fluentdによるログ収集システムの構築方法を解説します。
2014年02月19日 23時02分
fluentdは、システムが出力するログを収集するシステムとして、トレジャーデータ社によって開発されています。 今回は、fluentdによるログ収集システムの構築方法を解説します。
構築に必要なサーバー要件および、導入パッケージは下記のとおりです。
| OS | Windows 7 Ultimate 32bit |
| Cygwin | Setup Version 2.831 |
| VirtualBox | 4.3.6 r91406 |
| Vagrant | 1.4.1 |
| パッケージ | fluentdサーバー | fluentdクライアント |
|---|---|---|
| td-agent | 1.1.18 | |
| mongo-10gen-server | 2.4.9 | n/a |
| mongo-10gen | 2.4.9 | n/a |
| mViewer | 0.9.1 | n/a |
公式ドキュメントのとおり、インストーラーを実行してインストールします。
実行すると、TresureDataのリポジトリ(/etc/yum.repo.d/td.repo)が作成され、RPMパッケージがインストールされます。
$ curl -s http://toolbelt.treasuredata.com/sh/install-redhat.sh | sudo bash
$ td-agent --version

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"

$ sudo service td-agent start $ sudo chkconfig td-agent on

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>

設定が終了したら、設定をリロードします。
$ sudo service td-agent reload

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

fluentdが、各クライアントから入力イベントを受信する設定を行います。
td-agent.confに、下記の内容を追記し、設定をリロードします。
$ sudo vi /etc/td-agent/td-agent.conf
# クライアントからのイベント受信設定 <source> type forward # 転送 port 24224 # サーバー待ち受けポート </source>

$ sudo service td-agent reload

以上で、サーバーのセットアップは終了です。
クライアントのセットアップは、サーバーセットアップの手順1~4までは同一ですので、割愛します。
クライアントでは、サーバーと同様に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>

設定が終了したら、設定をリロードします。
$ sudo service td-agent reload

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

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>

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

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

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