LoginSignup
6
6

More than 5 years have passed since last update.

Fluentdによる柔軟なPHPのアプリケーションログ管理をDockerでシミュレートしたい(2)

Last updated at Posted at 2015-12-18

こんにちは
前回はここからどうぞ。
Fluentdによる柔軟なPHPのアプリケーションログ管理をDockerでシミュレートしたい(1)

今回はWEBサーバから、別のログ集約サーバにログを投げる部分を作りました。
要するにdockerのコンテナ間での連携になります。

作成したソースコードはこんな感じです。
https://github.com/niisan-tokyo/log_experioment/tree/throwLog

ログ集約サーバを作る

まず、ログを収集するためのサーバイメージを作ります。
Dockerfile短いんで、全部載せちゃいます。

FROM centos:6.7

#install fluentd
ADD etc/td.repo /etc/yum.repos.d/td.repo
RUN rpm --import https://packages.treasuredata.com/GPG-KEY-td-agent; yum check-update; yes|yum install -y td-agent
RUN yum install -y initscripts
ADD etc/td-agent.conf /etc/td-agent/td-agent.conf

EXPOSE 24224

CMD /usr/sbin/td-agent

これで、ログ集約用のサーバが出来上がりました。
現在このサーバの持っている役割は、前回のPHPローカルサーバにあるfluentdと同じで、投げられたログを受け取って、ファイルに書きだすというものです。

これを用意したら以下のコマンドを叩いて、イメージを作ります。

docker build -t niisan-tokyo/fluentd dockers/fluentd

コンテナ間連携する

コンテナ間連携にはこちらを参考にしました。

WEBサーバのfluentdの設定変更

連携を開始する前に、WEBサーバ側のfluentdの設定も変更しておく必要があります。
niisan-tokyo/etc/td-agent.conf

 <match app.**>
-  type file
-  path /var/log/td-agent/app
+#  type file
+#  path /var/log/td-agent/app
+   type forward
+   <server>
+     host logger
+     port 24224
+   </server>
 </match>

前回までの設定ではログに出力するようにしてありましたが、今回は「loggerという名前のサーバの24224ポートにログを投げる」という設定にしてあります。
この設定に直してから、イメージを作り直しましょう

docker build -t niisan-tokyo/php56

これで準備完了です

コンテナを立ち上げる

ではコンテナを立ち上げましょう。
まずはログ主役用のサーバを立ち上げます。

docker run -d --name fluentlogger niisan-tokyo/fluentd

ここでつけている--nameはコンテナにわかりやすい名前をつけるオプションです。

次にWEBサーバ用のコンテナを立ち上げます。

docker run -d --name web -p 8080:8080 --link fluentlogger:logger niisan-tokyo/php56

ここで大事なのは、--link <コンテナ名>:<エイリアス>オプションです。
これをつけて起動したコンテナには、--linkオプションで指定したコンテナのipやポートの情報が追加されます。
さらにはhostsに設定が追加されて<エイリアス>で指定したコンテナ名のサーバに接続することができます。

動作を確認する

それでは動作を確認してみましょう。
前回同様、WEBサーバに http://192.168.33.40:8080/ で接続可能し、適当にフォームにスコアを記載し、送信します。
続いてdockerのホスト上で

docker exec -it fluentlogger /bin/bash
tail -f /var/log/td-agent/app.<ハッシュ値>

でログを確認すると、

2015-12-17T09:33:01+00:00   app.scores  {"score1":123,"score2":342,"score3":15}
2015-12-17T09:34:49+00:00   app.scores  {"score1":23,"score2":52,"score3":345}

こんな感じでログが確認できます。

ちなみに、fluentdの仕様により、PHPから投げられたログをすぐに集約サーバに投げるのではなく、一定時間ログを貯めこんでから、集約サーバに投げるようになっています。
なので、入力値を送信した直後にログが更新されるとは限りません。
ログが書き出されるまで気長に待ちましょう。

まとめ

今回でようやくDockerの本格的活用法が示せたように思います。
こういう使い方ができるというのは、雑誌やコラムなどでいくらでも書かれて入るのですが、実際にどのように実現できているかを細かく書いてあるところは少ないので、今回いろいろと触ってみて、いろいろと実感できたように思います。

次回はさらにMongoDBと連携させ、「柔軟なログ」を実現してしまおうかな、と思います。

Fluentdによる柔軟なPHPのアプリケーションログ管理をDockerでシミュレートしたい(3)

参考

Docker container間の連携について
コンテナの連結と操作 - Docker User Guide

補足

fluentdの設定で、initscriptsをインストールしていますが、いらないと思います。
また、fluentdの起動スクリプトを直打ちしていますが、もっといい方法があるかもしれません。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6