apachコンテナのaccess.logとerror.logがリアルタイムに取得できない

なんで表示されないかが疑問。

access.logerror.logはシンボリックリンクで、ログの出力先はそれぞれ、 /dev/stdout/dev/stderr になっています。

stdoutstderr は 標準出力と、標準エラー出力ですので、それを tail しても中身は見れません。(というか、中身がそもそもありません)

これは、ログはコンテナ内に蓄積するのではなく、ストリームデータとして扱い、コンテナの外でどうにかするべき、といった思想が元になっていると思います。こうすることで、アプリケーションはログの出力先や、ストレージを気にしなくて良くなります。

リアルタイムにログの内容を表示する場合は tail -f <FILENAME> の代わりに、docker logs <CONTAINER_ID> -f で参照します。

ログの出力先は、ログドライバーによって変更できます。
https://docs.docker.jp/config/container/logging/configure.html

たとえば、syslog に出力するには、syslog logging driver を使います。 https://docs.docker.com/config/containers/logging/syslog/

また、cloudwatch logs に出力する場合は、Amazon CloudWatch Logs logging driver を使います。 https://docs.docker.com/config/containers/logging/awslogs/

他には、fluend を使ってログストリームを制御するといったやり方もあります。

とまぁ、Dockerではログはこういう感じですので、先ほどのURLを御覧頂いて、検討してみてもらえればと思います。

コメントを投稿

0 コメント