はじめに
大規模サービスのサーバ群を管理している人たちにとって、クラウド化や仮想化によってハードウェア障害等の物理的な問題からは解放されました。サービス提供者にとってハードウェアの問題をソフトウェアで解決出来る点、物理マシンのことを考えなくて良い点は自分たちの仕事の種類を大きく減らし、サービスに専念する良い環境を提供してくれました。
でも、ハードウェアが自分たちの手を離れても、サービスを提供するソフトウェアやミドルウェアの管理すべきログが多様化していることに変わりはありません。今回はこのログ管理の仕組みを少しでも効率よくするためのシステムである、fluentdによるログ収集システムの構築を紹介します。
以前の記事では、Swatchを用いたリアルタイムログ監視システムの構築方法を解説しました。Swatchでは検出したログをメールなどを利用してアラートを送信できますが、検出したログを一箇所に集約するためには、少し工夫が必要になります。そこで今回は、fluentdによるログ収集システムの構築方法を基本編、応用編の二回に分けて解説します。
基本編では、ログ収集サーバーの設定とクライアントの設定を解説し、応用編では、収集したログをデータベースに集積する方法を解説します。
前提条件
構築に必要なサーバー要件および、パッケージは下記のとおりです。
1.サーバー要件
サーバー要件は、次のとおりです。
サーバー | fluentdサーバー | fluentdクライアント |
---|---|---|
ホスト名 | fluentd-server | fluentd-client |
IPアドレス | 192.168.0.50(eth1) | 192.168.0.20(eth1) |
OS | CentOS 5.5 i386 | ← |
インストールタイプ | minimal | ← |
HDD | 8GB(SCSI) | ← |
RAM | 512MB | ← |
Apache | 2.2.15 | ← |
OpenJDK | 1.7.0 | n/a |
2.ダウンロードまたは、インストールするパッケージ
ダウンロードまたは、インストールするパッケージは、次のとおりです。
パッケージ | 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 |
サーバーのセットアップ
1.fluentdのインストール
公式ドキュメントのとおり、インストーラーを実行してインストールします。
$ curl -s http://toolbelt.treasuredata.com/sh/install-redhat.sh | sudo bash
実行すると、TresureDataのリポジトリ(/etc/yum.repo.d/td.repo)が作成され、RPMパッケージがインストールされます。
[vagrant@fluentd-server ~]$ curl -s http://toolbelt.treasuredata.com/sh/install-redhat.sh | sudo bash This script requires superuser access to install rpm packages. You will be prompted for your password by sudo. 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 Configure td-agent to start, when booting up the OS... Verifying : td-agent-1.1.18-0.i386 1/6 Verifying : compat-libtermcap-2.0.8-49.el6.i686 2/6 Verifying : openssl098e-0.9.8e-17.el6.centos.2.i686 3/6 Verifying : libxslt-1.1.26-2.el6_3.1.i686 4/6 Verifying : compat-readline5-5.2-17.1.el6.i686 5/6 Verifying : td-libyaml-0.1.4-1.i386 6/6 Installed: td-agent.i386 0:1.1.18-0 Dependency Installed: compat-libtermcap.i686 0:2.0.8-49.el6 compat-readline5.i686 0:5.2-17.1.el6 libxslt.i686 0:1.1.26-2.el6_3.1 openssl098e.i686 0:0.9.8e-17.el6.centos.2 td-libyaml.i386 0:0.1.4-1 Complete!
2.インストール確認
$ td-agent --version
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"
4.サービスの起動と自動起動設定
$ sudo service td-agent start $ sudo chkconfig td-agent on
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>
設定が終了したら、設定をリロードします。
$ sudo service td-agent reload
secureログを収集する設定となっていますので、サーバー上でsuコマンドやsudoコマンドを実行すると、secure.logにマッチしたログが書き込まれます。
6.ログ受信設定
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までは同一ですので、ここでは割愛します。
1.fluentdのインストール
$ curl -s http://toolbelt.treasuredata.com/sh/install-redhat.sh | sudo bash [vagrant@fluentd-client ~]$ curl -s http://toolbelt.treasuredata.com/sh/install-redhat.sh | sudo bash This script requires superuser access to install rpm packages. You will be prompted for your password by sudo. Loaded plugins: fastestmirror Determining fastest mirrors Including mirror: ftp.tsukuba.wide.ad.jp Including mirror: www.ftp.ne.jp Including mirror: ftp.iij.ad.jp Including mirror: ftp.jaist.ac.jp Including mirror: ftp.nara.wide.ad.jp * base: ftp.tsukuba.wide.ad.jp Including mirror: ftp.tsukuba.wide.ad.jp Including mirror: www.ftp.ne.jp Including mirror: ftp.iij.ad.jp Including mirror: ftp.jaist.ac.jp Including mirror: ftp.nara.wide.ad.jp * extras: ftp.tsukuba.wide.ad.jp Including mirror: ftp.tsukuba.wide.ad.jp Including mirror: www.ftp.ne.jp adding 'td-agent' user... Installing default conffile ... Configure td-agent to start, when booting up the OS... Verifying : td-agent-1.1.18-0.i386 1/5 Verifying : td-libyaml-0.1.4-1.i386 2/5 Verifying : compat-libtermcap-2.0.8-49.el6.i686 3/5 Verifying : openssl098e-0.9.8e-17.el6.centos.2.i686 4/5 Verifying : compat-readline5-5.2-17.1.el6.i686 5/5 Installed: td-agent.i386 0:1.1.18-0 Dependency Installed: compat-libtermcap.i686 0:2.0.8-49.el6 compat-readline5.i686 0:5.2-17.1.el6 openssl098e.i686 0:0.9.8e-17.el6.centos.2 td-libyaml.i386 0:0.1.4-1 Complete!
2.インストール確認
$ td-agent --version
3.サービス起動ユーザーの設定
4.サービスの起動と自動起動設定
$ sudo service td-agent start $ sudo chkconfig td-agent on
5.ログ収集設定
クライアントでは、サーバーと同様にsecureログを収集し、別ファイルにログを集積するとともに、サーバーにログを送信します。
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 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>
sourceディレクティブは、サーバーセットアップと同一ですが、matchディレクティブでは、ログの送信先の設定および、送信エラーが発生した際のファイル出力を定義しています。
設定が終了したら、設定をリロードします。
$ sudo service td-agent reload
サーバーセットアップと同様に、クライアント上でsu/sudoコマンドを実行すると、サーバー上のログに表示されます。
6.アクセスログ収集設定
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の編集が終了したら、設定をリロードします。
クライアント上のウエブサーバーにアクセスすると、サーバー上のログに表示されます。
以上で、クライアントのセットアップは終了です。
まとめ
ここまで、収集サーバーおよび、クライアントの設定について解説しました。応用編では、収集したログをデータベースに集積する方法について解説します。
本ブログは、Git / Subversion のクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
開発の効率化をしたい!もっと便利なツールを使いたい!そんなお悩みをtracpathで解決!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments