Hatena::Groupstudyroom

文::字

2011-10-05

イベントログ収集ツール fluent を試しに使ってみる 07:45  イベントログ収集ツール fluent を試しに使ってみる - 文::字 を含むブックマーク

イベントログ収集ツール fluent リリース! - 古橋貞之の日記イベントログ収集ツール #fluent 周りの最近の話題 - Togetterが良さそうなので、ドキュメントを読みながら基本的な使い方を覚えてみる。

インストール

$ gem install fluent

cool.io, http_parser.rb, json, msgpack に依存していて、自分の環境だとまだ入れていなかった cool.io とか msgpack もインストールされた。fluent, cool.io, msgpack はそれぞれインストール時に C の拡張もコンパイルするみたいだけど、実装がシンプルなようでビルドはすぐに終わる。

コマンド

インストールすると下記 3 つのコマンドが使えるようになった。

  • fluentd
    • ログを収集したりどこかに吐き出したりするデーモン本体
  • fluent-cat
    • fluent-cat は echo '{"json":"message"}' | fluent-cat debug.test とかやると fluentd に tcp 経由でログを送ってくれるコマンド
  • fluent-gem
    • sudo fluent-gem install fluent で fluent を最新版にアップデートすることのできるコマンド。普通の gem コマンドと何が違うかはまだ調べていない

設定ファイルの書式

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 &

ログが書き出されるように何か ApacheHTTP リクエストを送ってみる。

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 に保存したりすれば、ものすごく簡単に統計情報とかとれて良さそう。

とりあえずここまで使ってみた。なんかプラグインとか作ってみたいな。