LoginSignup
0
0

More than 3 years have passed since last update.

特定のアプリケーションのログファイルをコンテナに標準出力する方法(docker logs,kubectl logs)

Posted at

この記事について

ログを標準出力しないタイプのアプリケーション(=ログファイルに書き込む)をコンテナで動かす際、ログファイルの内容をdocker logs コマンドやkubectl logs コマンドで出力できるようにする方法についてまとめた記事です。
docker logsやkubectl logsでログを出力できる状態にすることで、AWSであればCloudWatch、GCPであればStackDriver、kubernetesであればfluentd等で、コンテナ内に標準出力されたアプリケーションの実行ログを確認することが可能になります。

具体的には?

phpをコンテナ上で動かすと、アプリケーションの実行ログはphp.ini内で定義したパスに書き込まれます。

php.ini
error_log = /var/log/php/error.log

上記の例では、アプリケーションのログ自体はerror.logに出力できるものの、ログをOSから標準出力
していないので、docker logsやkubectl logsから実行ログを確認することはできません。

どうしたらいいか?

Dockerfileにtailコマンドを記述し、コンテナの実行中は常にログファイルの内容を標準出力できるようにしてあげましょう。

Dockerfile
CMD /bin/tail -f /var/log/php/error.log > /dev/stdout

※他に実行すべきCMDがある場合は"&"で並列で実行してください。

補足

本記事で検証した環境は以下の通りです。

- CentOS 7.x
- Apache 2(httpd)
- PHP7.0

CentOS7.xではなくUbuntu18.xだったり、ApacheではなくNginxでPHPを動かす場合には、他の出力方法があるそうです。
(例えば、php.iniで"error_log = /dev/stdout"と指定したり、error.logと/dev/stdoutにシンボリックリックを貼ってあげたりといったことが考えられます)

以上

0
0
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
0
0