Docker イメージで動作する Wagby アプリケーションから(同じく)Docker イメージで動作する fluentd と接続する手順を説明します。

fluentd はログを集約するためのミドルウェアです。Wagby アプリケーションのログ出力先を fluentd とし、fluentd はその(収集した)ログを特定の出力先に送ります。

公式サイト : https://www.fluentd.org

これによって、複数の(Wagby アプリケーションが稼働する)Docker コンテナのログ出力を fluentd に集約し、ログ出力先を「ローカルファイル」「クラウド上のストレージ (Amazon S3など)」などにまとめることができます。

fluentd が含まれた Docker イメージをダウンロードします。

はじめに、ホスト側に fluentd が出力するログのフォルダを用意しておきます。ここでは次のようにしました。(作業時のカレントフォルダを Wagby-8.1.1 とします。)

mkdir container_log\fluentd

次のコマンドで起動します。

docker run -d -p 24224:24224 -p 24224:24224/udp -v C:\Wagby-8.1.1\container_log\fluentd:/fluentd/log --name fluentd fluent/fluentd
  • コンテナ内の/fluentd/logに出力されるログファイルは、ホストのC:\Wagby-8.1.1\container_log\fluentdに出力されるようにする。
fluentd の設定により、出力先を syslogd や Amazon S3 へと変更することができます。詳細は公式ドキュメントをお読みください。

ビルドした wagbyapp を含んだ Docker イメージを実行します。このとき --log-driver オプションを指定します。

docker run -d --rm -p 8888:8080 --name wagbyapp --link=db:db -v C:\Wagby-8.1.1\upload_dir:/usr/local/upload_dir -v C:\Wagby-8.1.1\export:/usr/local/export --log-driver=fluentd jasminesoft/wagbyapp
  • --log-driver=fluentdを指定して実行する。デフォルトのlocalhost:24224でfluentdに接続している。(別マシンにある場合は --log-opt fluentd-address=[ホスト名]:24224 といったように指定できる。)

起動後は、ブラウザから次の URL を指定して動作を確認します。admin でログオンできれば、接続できています。

実行すると C:\Wagby-8.1.1\container_log\fluentd に data.b56bd477f81999a06286f8e90783bcc8d.log のファイルが作成され、ログが出力されていることがわかります。(接頭語 data. の後続部分の名前は実行時に定まります。)

sourceがstderrとなっているのがTomcatのログ、stdoutとなっているのがsystem.logです。

2018-10-10T06:58:51+00:00       62783ee3cfc1    {"container_name":"/wagbyapp","source":"stderr","log":"10-May-2018 15:58:51.911 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [\"ajp-nio-8009\"]","container_id":"62783ee3cfc14efa6efe8a3f4218c496a5c3e166bdeca9048579a6b474a590ab"}
2018-10-10T06:58:51+00:00       62783ee3cfc1    {"container_id":"62783ee3cfc14efa6efe8a3f4218c496a5c3e166bdeca9048579a6b474a590ab","container_name":"/wagbyapp","source":"stderr","log":"10-May-2018 15:58:51.919 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 23962 ms"}
...
2018-10-10T07:00:53+00:00       62783ee3cfc1    {"container_id":"62783ee3cfc14efa6efe8a3f4218c496a5c3e166bdeca9048579a6b474a590ab","container_name":"/wagbyapp","source":"stdout","log":"2018-10-10 16:00:53 [INFO net.fortuna.ical4j.util.Configurator ] ical4j.properties not found."}
2018-10-10T07:00:56+00:00       62783ee3cfc1    {"container_id":"62783ee3cfc14efa6efe8a3f4218c496a5c3e166bdeca9048579a6b474a590ab","container_name":"/wagbyapp","source":"stdout","log":"2018-10-10 16:00:56 [INFO jp.jasminesoft.jfc.controller.DbShowListBaseController perform_db] (admin@172.17.0.1|Chrome) myShowListJfcportal|Search "}
...

複数の Docker コンテナを起動し、同じ fluentd にログを出力させることもできます。この場合はログ中の container_id や container_name が異なっているため、区別できるようになっています。

図1 3つのDockerコンテナを利用している
Wagby Developer Day 2018