Fluentd Casual Talksに参加し、fluentdの使いどころが理解できて、
意識が高いうちに早速fluentdの導入をしSubsonic+nginxのアクセスログをMongoDBに入れてみたのでメモ。
導入環境はwebサーバCentOS 6、ログ収集サーバがCentOS 5で、fluentdのバージョンは
td-agent-1.1.5.1-0.x86_64
になります。いずれもさくらVPSで稼働させています。
nginxの導入は以前書いた下記のエントリを参考にして下さい。
今回行った作業の流れ
fluentdを初めて触るので、今回は下記のように順を追って検証と導入を行いました。
- fluentdの導入
- サーバ1台でwebサーバとログ収集サーバを動かしてみる
- webサーバとログ収集用サーバをそれぞれ用意して動かして見る
- ログ収集用サーバにMongoDBを入れて、データを入れてみる
fluentd(td-agent)の導入
Installing td-agent for Redhat and CentOSに
記載してある方法で、yum経由で導入。webサーバ、ログサーバ双方に導入します。/etc/td-agent/td-agent.conf
は用途に合わせ編集します。
webサーバとログ収集サーバを同じサーバで動かした場合
とりあえずfluentdの動作検証のために、1台で動かしてみて、ローカルのファイルに書き出してみる。
/etc/td-agent/td-agent.conf
は下記のような感じ。
nginxのログローマットをapacheと合わせるために下記のように修正。(これに気づかずかなりハマりました。)
設定を反映させて再起動。
1
2
| sudo /etc/rc.d/init.d/td-agent restart
sudo /etc/rc.d/init.d/nginx restart
|
実際にnginxのアクセスログが、fluentdに渡って/var/log/td-agent/access_log
へ出力されている
webサーバ、ログ収集サーバの2台構成で動かした場合
webサーバ側のtd-agent.conf
を下記のように修正してtd-agentの再起動
ログサーバ側のtd-agent.conf
を下記のように修正してtd-agentの再起動
ログサーバ側のiptablesに追記した内容。webサーバからログサーバの24224portへのアクセスを許可してます。
ログサーバの/var/log/td-agent/access_log
に出力されていればOK
webサーバ、ログ収集サーバの2台構成で動かして、MongoDBにデータを入れる
/var/log/td-agent/access_log
への出力から、MongoDBに切り替え
MongoDBの導入
1
2
3
4
5
6
7
8
9
| /bin/cat <<'EOF'> /etc/yum.repos.d/10gen.repo
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
EOF
yum install mongo-10gen mongo-10gen-server --enablerepo=10gen
/etc/rc.d/init.d/mongod start
|
MongoDBにデータを入れられるように、fluent-plugin-mongoの導入。
1
| /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-mongo
|
ログサーバのtd-agent.conf
を下記のように修正してtd-agentの再起動。
実際にnginxのアクセスログが、MongoDBに入っているのを確認。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| [akira@vps001] $ mongo
MongoDB shell version: 2.0.5
connecting to: test
> show dbs
local (empty)
nginx 0.203125GB
> use nginx
switched to db nginx
> show collections
access
system.indexes
> db.access.find();
{ "_id" : ObjectId("4fb8aa9ae304e43491000001"), "host" : "110.165.232.124", "user" : "-", "method" : "GET", "path" : "/index.view", "code" : "200", "size" : "639", "referer" : "http://music.glidenote.com/", "agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5", "time" : ISODate("2012-05-20T08:25:01Z") }
{ "_id" : ObjectId("4fb8aa9ae304e43491000002"), "host" : "110.165.232.124", "user" : "-", "method" : "GET", "path" : "/favicon.ico", "code" : "404", "size" : "290", "referer" : "-", "agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5", "time" : ISODate("2012-05-20T08:25:01Z") }
|
おー、ちゃんとデータが入っている。
でもMongoDBが全く分からないので、集計は後でやってみる。
今回の作業ではまった点
- nginxのlogフォーマットがapache形式と違っていたので、まったく出力されなかった。(fluentdが動いているのか判断出来なかった)
- fluentdがudpで通信をしていた。
sudo tcpdump -i eth0 port 24224 -nn
で気づいたのでiptablesで許可
- 動作確認コマンドがよく分からなかった。debugを有効にして
echo '{"hoge":"fuga"}' | /usr/lib64/fluent/ruby/bin/fluent-cat debug.test
で動いているのを確認。
- 2011年11月頃に書かれたサイトを参考に作業をしていたら、当時からconfの書き方とか変わっていてハマった。(バージョンを確認しましょう)
参考サイト
参考書籍
fluentdは開発が非常に活発なんですが、ドキュメント類が充実していないので、少し前のウェブ上の情報が使えないことが多かったです。
2012年5月20日現在は下記のSoftware Designが一番充実しているので必読です。