fluentd(td-agent)を使ってapacheのアクセスログを動的にmongoDBに登録していく。
WEBアプリとログ集計のサーバー2台構成。
送信側サーバー:
appacheのアクセスログを出力しているサーバー。
受信側サーバー:
mongoDBでログを集計するサーバー。
送信側サーバー準備
td-agentのインストール
yumでインストールするためにURLを追加する。
その後でyumでインストールを行う。
sudo vi /etc/yum.repos.d/td.repo
td.repo
[treasuredata]name=TreasureDatabaseurl=http://packages.treasure-data.com/redhat/$basearchgpgcheck=0
sudo yum install -y td-agent
td-agentの設定
td-agent.confを書き換える。
※元ある内容は全て消して書き換えてしまってよい。
vi /etc/td-agent/td-agent.conf
td-agent.conf
<source> type tail format apache path /var/log/httpd/httpd_access_log tag mongo.apache</source><match mongo.apache> type forward flush_interval 10s <server> host ホスト名 port 24224 </server></match>```
#受信サーバー準備
##fluentdのインストール
gemからfluentdをインストールする。
※受信サーバーにはruby1.9以上が入っていることが前提。
gem install fluentdgem install bson_extgem install fluent-plugin-mongo
```
mongoDBのインストール
yumでインストールするためにURLを追加する。
その後でyumでインストールを行う。
vi /etc/yum.repos.d/10gen.repo
10gen.repo
[10gen]name=10gen Repositorybaseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64gpgcheck=0enabled=1
yum install mongo-10gen-server mongo-10gen
ログ収集の開始
mongoDBの起動
受信側サーバーでmongoDBを起動する。
/etc/init.d/mongod start
受信側サーバーでfluentdを起動する。
fluentd -c /etc/fluentd/fluent.conf -vv -o /var/log/fluentd/fluentd.log &
送信側サーバーでtd-agentを起動する。
sudo /etc/init.d/td-agent start
動作確認
送信側サーバーでアクセスログを手動で書き込む。
sudo vi /var/log/httpd/httpd_access_log
127.0.0.1 - - [10/Jun/2013:20:30:39 +0900] "GET /favicon.ico HTTP/1.1" 404 288 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"127.0.0.1 - - [10/Jun/2013:20:46:07 +0900] "GET / HTTP/1.1" 403 5044 "-" "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0"127.0.0.1 - - [10/Jun/2013:20:46:07 +0900] "GET /favicon.ico HTTP/1.1" 404 288 "-" "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0"
受信側サーバーでmongoDBの内容を確認する。
mongo httpd
>db.accesslog.count()
3
>db.accesslog.find
mongoDBにアクセスログの内容が確認できたら設定完了。
おまけ
アクセスログが受信側サーバーに登録されていないとき
td-agentのログを確認する。
tail -f -n 100 /var/log/td-agent/td-agent.log
これでエラーを確認し対応する。