2011-10-05
■ イベントログ収集ツール fluent を試しに使ってみる 
イベントログ収集ツール fluent リリース! - 古橋貞之の日記、イベントログ収集ツール #fluent 周りの最近の話題 - Togetterが良さそうなので、ドキュメントを読みながら基本的な使い方を覚えてみる。
インストール
$ gem install fluent
cool.io, http_parser.rb, json, msgpack に依存していて、自分の環境だとまだ入れていなかった cool.io とか msgpack もインストールされた。fluent, cool.io, msgpack はそれぞれインストール時に C の拡張もコンパイルするみたいだけど、実装がシンプルなようでビルドはすぐに終わる。
コマンド
インストールすると下記 3 つのコマンドが使えるようになった。
設定ファイルの書式
fluentd に --setup オプションをつけて起動すると設定ファイル用ディレクトリのひな形を生成してくれる。
$ fluentd --setup fluent/ $ ls fluent/ fluent.conf plugin # fluent.conf には設定例が書いてある、plugin は空
上記で生成される fluent.conf はここ (https://github.com/fluent/fluent/blob/master/fluent.conf) に置いてあるもの。読んでみると、<source> でソースとなるログの場所を指定して収集し、<match> で受け取ってどこか別の場所に出力するらしい、というのが分かる。<source> では tag apache.access のようにログにタグをつけて、<match> では <match apache.access> のように個別のタグについて処理を行えるようになっている。
Apache のログを収集してみる
「ウェブサーバの fluentd が Apache のログを収集する、ログサーバの fluentd が Apache のログを受け取りローカルに保存する」というのをちょっと試してみた。(1 台で試しているのであんまり参考にならないかも。)
ウェブサーバ側 (fluent/web_server.conf):
<source> type tail format apache path /var/log/httpd/access_log tag apache.access </source> <match apache.access> type tcp host localhost </match>
ログサーバ側 (fluent/log_server.conf):
<source> type tcp </source> <match apache.access> type file path /var/log/fluent/access_log </match>
起動してみる。
su - fluentd -c fluent/web_server.conf & fluentd -c fluent/log_server.conf &
ログが書き出されるように何か Apache に HTTP リクエストを送ってみる。
curl http://localhost/test curl http://localhost/index.php?command=test
$ tail /var/log/httpd/access_log 127.0.0.1 - - [05/Oct/2011:07:37:23 +0900] "GET /test HTTP/1.1" 404 276 "-" "curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5" 127.0.0.1 - - [05/Oct/2011:07:37:31 +0900] "GET /index.php?command=test HTTP/1.1" 404 281 "-" "curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5"
ログサーバ側にもログファイルが生成されている。
$ ls /var/log/fluent/
access_log.20111005.b4e8b7c62
$ tail -f /var/log/fluent/access_log.20111005.b4e8b7c62
2011-10-05T07:37:23+09:00 apache.access {"host":"127.0.0.1","user":"-","method":"GET","path":"/test","code":"404","size":"276","referer":"-","agent":"curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5"}
2011-10-05T07:37:31+09:00 apache.access {"host":"127.0.0.1","user":"-","method":"GET","path":"/index.php?command=test","code":"404","size":"281","referer":"-","agent":"curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5"}
ログが自動的で JSON にパースされていてすごい便利っぽい。mongo プラグインを使って mongo に保存したりすれば、ものすごく簡単に統計情報とかとれて良さそう。
とりあえずここまで使ってみた。なんかプラグインとか作ってみたいな。