はじめに
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の編集が終了したら、設定をリロードします。
クライアント上のウエブサーバーにアクセスすると、サーバー上のログに表示されます。
以上で、クライアントのセットアップは終了です。