第1回 クラウドサーバ勉強会に参加してきた
先日suinさんの開催したクラウドサーバ勉強会に参加してきました。
さくらのクラウドでなんかやってみようとかいう事だったので使ってみたいと思っていたfluentdを使ってみたのでメモ兼ねてエントリー。
今回はあまり時間がなかったりして思ってたより進まなかったけど一応動く所までは出来た。
基本fluentdのGitHub見ながらなのであまり難しいことはしてないです。
色々やってから知ったけども開発元からtd-agentという名前で安定版はapt-getとかで入れれるらしい……
Web & DB
とりあえず両方ともで使うのでfluentdが試せる所まで構築する。
Rubyのインストール
Rubyの1.9.2が必要らしいのでrbenv+ruby-buildでインストールする。
まずは必要なパッケージのインストールをする。
sudo aptitude install zlib1g-dev libssl-dev
パッケージのインストールが終わったらRubyのコンパイルとか頑張る。この辺は結構テキトー。
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
mkdir ~/.rbenv/plugins
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
~/.zshenv
$path .rbenv/bin
~/.zshrc
eval "$(rbenv init -)"
exec $SHELL
rbenv install 1.9.2-p318
rbenv rehash
rbenv global 1.9.2-p318
rehash
install fluentd
fluentd 自体はgemで簡単に入ります。
gem install fluentd
使ってみる
fluentdにはコンフィグファイルを生成する機能があるので、それを使って動作確認。
fluentd --setup fluent
/ _ / X ls fluent
fluent.conf plugin/
root権限が必要だけどsuするとパスが通らなくなるのでとりあえずsudoでrootになってから起動する。
sudo -s
fluentd -c fluent/fluent.conf
何やらずらずらっとログが表示されたら違う端末でHTTPリクエストを投げて見る。
curl http://133.242.55.236:8888/debug.curl -F 'json={"name": "suin"}'
正常に動いていると、fluentdがstdoutに受け取ったJSONデータをそのまま出してくれます。
2012-04-01 15:13:55 +0900 debug.curl: {"name":"suin"}
Web
fluentdの動作が確認できたら次はwebサーバのログを見るように設定する
nginxのインストールと設定
今回はwebサーバのログをfluentd経由でMongoDBに突っ込むまでやりたいので、nginxをインストールしてログをstdoutに出す所までやる。 特にnginxに理由はなくて、隣でnginxとApacheの速度比較してたりしたのでなんとなく入れただけ。むしろApacheのがそのままでいけるはずなので楽だと思う。
sudo aptitude install nginx
そのままだとログのフォーマットがApacheと違うため同じフォーマットでログを吐くようにする。
sudo vim /etc/nginx/nginx.conf
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+ '$status $body_bytes_sent "$http_referer" '
+ '"$http_user_agent"';
fluentdの設定
nginxの設定が終わったので次はfluentdがnginxのログを見るように設定。所々apacheの文字があるのはfluentdがapacheの吐くログの形式に対応していて、それを使ったりしてるからです。
sudo vim ~/works/fluent/fluent.conf
1 2 3 4 5 6 7 8 9 10 |
|
pos_fileとか設定しなきゃいけないみたいなので、何処かのサイトに書いてあったのと同じ場所にした。ただこのままだとディレクトリが存在しないので作成する。
mkdir /tmp/td-agent
これで、ブラウザとかでnginxにアクセスするとfluentdがstdoutにアクセスログを出してくれます。
DB
webサーバの設定が終わったので、次はDBサーバにMongoDBを入れて設定する。
MongoDBのインストール
MongoDBも使ったことなくてよくわからないのでaptで入れただけ。
sudo aptitude install mongodb
MongoDBプラグインのインストール
fluentdのMongoDBプラグインを入れて、nginxのログをMongoDBを入れるよう設定。 起動すると何か言って来たので一応bson_extも入れた。
fluent-gem install fluent-plugin-mongo
gem install bson_ext
とりあえずこれで準備完了。
Web & DB
WebサーバとDBサーバの準備ができたのでnginxのアクセスログをDBサーバに飛ばしてMongoDBに保存する設定を書く。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
後はテキトーにwebにアクセスすると、Webサーバのstdoutに出力 –> DBサーバのstdoutに出力 –> MongoDBに保存 とされる。