概要
Dockerを使用していると、コンテナ内で動いてるアプリケーションやミドルウェアのログを確認する際にコンテナ内に入ってログファイルを見なければいけません。
解決策の1つとして、ログファイルをホストOSにマウントしておくという手段があります。
今回は別の解決策として、コンテナのログにアプリケーションログでも何でも出力しちゃおうという解決方法になります。
コンテナログの確認方法
Dockerのコンテナログは以下コマンドで確認できます。docker logs コンテナ名
その場合は以下コマンドで最新のログを出力し続けます。
docker logs -f コンテナ名
コンテナログへの出力方法
Dockerのコンテナログは- コンテナの標準出力(stdout)
- 標準エラー出力 (stderr)
「stdout」又は「stderr」に設定すればコンテナログとして確認できるようになります。 例として、WordPress環境のログをコンテナログに出力する場合を記載します。
WordPress環境のコンテナログ出力方法
NGINX
access_log及びerror_logの出力先を変更します。confファイル内で以下のように設定します。
access_log /dev/stdout;
error_log /dev/stderr;
php
error_logの出力先を変更します。php.iniで以下のように設定します。
error_log = /dev/stderr
WordPress(phpアプリケーションログ)
phpでstdoutにログメッセージを出力するには、以下のように記載します。$path = 'php://stdout';
$output = '出力内容';
$std = fopen( $path, 'w' );
fwrite( $std, $output );
fclose( $std );
$path = 'php://stderr';
WordPress用のPluginを作成しました
Docker環境で動作してるWordPress用にphpアプリケーションログを出力するメソッドを追加するプラグインを作成しました。
Log-For-Docker
プラグインを有効化した後、ログ出力したい箇所に以下を記載するとコンテナログに$messageの内容を出力します。
Log_For_Docker::log( $message );
Log_For_Docker::error( $message );
中身を確認したい変数などあればそのまま渡してください。
コンテナログに出力するメリット
Dockerのコンテナは、起動時にオプションを設定することでログにも様々な設定ができます。- AWSのCloud Watch Logsに送れる
- ログローテートの設定が簡易にできる
コンテナログでしたらコンテナ起動時に設定するだけで後は自動でやってくれます。
最後に
今回はDockerのコンテナログに書き込む方法を紹介しました。Dockerはログにも様々なオプションがあるので、上手く組み合わせると
少ない設定で便利な機能を使えるようになると思いました。
docker-compose.ymlにもログのオプションは記載できるので
共通のymlファイルを使用すれば、それぞれの環境で無意識にローテートが行われるようにできるのも魅力ですね。