東日本橋の制作・開発会社 プレスマンのスタッフブログ

PRESSMAN*Tech

Tech & Tips WordPress プログラミング

Dockerコンテナ内の様々なログをコンテナログに集約する

概要

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を以下に変更し、stderrに出力します。
$path = 'php://stderr';

WordPress用のPluginを作成しました

Docker環境で動作してるWordPress用に
phpアプリケーションログを出力するメソッドを追加するプラグインを作成しました。
Log-For-Docker
プラグインを有効化した後、ログ出力したい箇所に以下を記載するとコンテナログに$messageの内容を出力します。
Log_For_Docker::log( $message );
または
Log_For_Docker::error( $message );
配列などでもprint_rして出力するので
中身を確認したい変数などあればそのまま渡してください。

コンテナログに出力するメリット

Dockerのコンテナは、起動時にオプションを設定することでログにも様々な設定ができます。
  • AWSのCloud Watch Logsに送れる
  • ログローテートの設定が簡易にできる
などです。 ログファイルが分かれると、そのログファイル毎にローテートの設定をしなければいけませんが
コンテナログでしたらコンテナ起動時に設定するだけで後は自動でやってくれます。

最後に

今回はDockerのコンテナログに書き込む方法を紹介しました。
Dockerはログにも様々なオプションがあるので、上手く組み合わせると
少ない設定で便利な機能を使えるようになると思いました。
docker-compose.ymlにもログのオプションは記載できるので
共通のymlファイルを使用すれば、それぞれの環境で無意識にローテートが行われるようにできるのも魅力ですね。
この記事をシェアする:

-Tech & Tips, WordPress, プログラミング
-, , ,

Copyright© PRESSMAN*Tech , 2020 All Rights Reserved Powered by STINGER.