第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
<source>
  type tail
  format apache
  path /var/log/nginx/localhost.access.log
  pos_file /tmp/td-agent/apache.pos
  tag apache.access
</source>
<match apache.access>
  type stdout
</match>

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に保存する設定を書く。

Web Server’s fluent.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
<match apache.access>
  type copy
  <store>
    type stdout
  </store>
  <store>
    type forward
    retry_limit 50
    <server>
      host 133.242.54.192
    </server>
  </store>
</match>
DB Server’s fluent.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<source>
  type forward
</source>
<match apache.access>
  type copy
  <store>
    type stdout
  </store>
  <store>
    type mongo
    host localhost
    database fluent
    collection accesslog
  </store>
</match>

後はテキトーにwebにアクセスすると、Webサーバのstdoutに出力 –> DBサーバのstdoutに出力 –> MongoDBに保存 とされる。

Comments