【Docker Compose】ログをコンテナごとのログファイルに出力する

普通は docker-compose logs コマンドで確認出来るが、 いまいち気持ちが悪いので syslog 経由でログファイルを吐くように設定した。

大規模構成だと fluentd とかつかって集約したり、いろいろ頑張らないと厳しそう。

syslogにログ出力する設定

{{.Name}} などでコンテナ名などを埋め込むことができる

# /etc/sysconfig/docker
OPTIONS="--default-ulimit nofile=1024:4096 --log-driver=syslog --log-opt syslog-facility=daemon --log-opt tag=docker/{{.Name}}/{{.ID}}"
service docker restart

こんなのが出力される

Apr 26 14:26:15 localhost docker/mastodon_web_1/a6b7b36e7e33[5981]: => message for you

rsyslog 側でタグの内容ごとにログファイルを分ける設定

# /etc/rsyslog.d/10-docker.conf
$template DockerLogs, "/var/log/docker_%syslogtag:R,ERE,1,FIELD:docker/(.+)/--end%.log"

if $syslogfacility-text == 'daemon' and $programname contains 'docker' then -?DockerLogs  
& stop
service rsyslog restart

こんなログファイルが作成される

less /var/log/docker_mastodon_web_1.log

参考: Logging Docker container output to individual files via Syslog