ロギング・ドライバの設定

コンテナには、 Docker デーモンよりも多くの異なるロギング(ログ保存)ドライバがあります。ロギング・ドライバを指定するには、 docker run コマンドで --log-driver=VALUE を使います。以下のオプションをサポートしています。

docker logs コマンドは json-filejournald ロギング・ドライバ使用時のみ利用可能です。

labelenv オプションは、ロギング・ドライバで利用可能な追加属性を加えます。各オプションはキーのリストをカンマで区切ります。 labelenv キーの間に衝突があれば、 env を優先します。

属性(attribute)を使うには、Docker デーモン起動時に指定します。

docker daemon --log-driver=json-file --log-opt labels=foo --log-opt env=foo,fizz

それから、 labelenv の値を指定して、コンテナを起動します。例えば、次のように指定するでしょう。

docker run --label foo=bar -e fizz=buzz -d -P training/webapp python app.py

これはドライバ上のログに依存する追加フィールドを加えるものであり、次の例では json-file の場合です。

"attrs":{"fizz":"buzz","foo":"bar"}

JSON ファイルのオプション

json-file ロギング・ドライバがサポートしているロギング・オプションは以下の通りです。

--log-opt max-size=[0-9+][k|m|g]
--log-opt max-file=[0-9+]
--log-opt labels=label1,label2
--log-opt env=env1,env2

ログが max-size に到達すると、ロールオーバされます(別のファイルに繰り出されます)。設定できるサイズは、キロバイト(k)、メガバイト(m)、ギガバイト(g) です。例えば、 --log-opt max-size=50m のように指定します。もし max-size が設定されなければ、ログはロールオーバされません。

max-file で指定するのは、ログが何回ロールオーバされたら破棄するかを指定します。例えば --log-opt max-file=100 のように指定します。もし max-size が設定されなければ、 max-file は有効ではありません。

max-sizemax-file がセットされると、 docker logs は直近のログファイルのログ行だけ表示します。

syslog のオプション

syslog ロギング・ドライバがサポートしているロギング・オプションは以下の通りです。

--log-opt syslog-address=[tcp|udp]://host:port
--log-opt syslog-address=unix://path
--log-opt syslog-facility=daemon
--log-opt tag="mailer"

syslog-address は、ドライバが接続するリモートの syslog サーバのアドレスを指定します。指定されなければ、デフォルトでは実行中システム上にあるローカルの unix ソケットを使います。 tcpudpport が指定されなければ、デフォルトは 514 になります。以下の例は syslog ドライバを使い、リモートの 192.168.0.42 サーバ上のポート 123 に接続する方法です。

$ docker run --log-driver=syslog --log-opt syslog-address=tcp://192.168.0.42:123

syslog-facility オプションは syslog のファシリティを設定します。デフォルトでは、システムは daemon 値を使います。これを上書きするには、 0 から 23 までの整数か、以下のファシリティ名を指定します。

  • kern
  • user
  • mail
  • daemon
  • auth
  • syslog
  • lpr
  • news
  • uucp
  • cron
  • authpriv
  • ftp
  • local0
  • local1
  • local2
  • local3
  • local4
  • local5
  • local6
  • local7

デフォルトでは、Docker はコンテナ ID の始めの 12 文字だけログ・メッセージにタグ付けします。タグ・フォーマットの記録方式をカスタマイズするには、 log tag オプションのドキュメント をご覧ください。

journald オプション

journald ロギング・ドライバは journal の CONTAINER_ID フィールドにコンテナ ID を記録します。ロギング・ドライバの詳細な動作については、 journald ロギング・ドライバ リファレンス・ドキュメントをご覧ください。

gelf オプション

GELF ロギングドライバは以下のオプションをサポートしています。

--log-opt gelf-address=udp://host:port
--log-opt tag="database"
--log-opt labels=label1,label2
--log-opt env=env1,env2

gelf-address オプションは、接続先のリモート GELF サーバのアドレスを指定します。現時点では udp が転送用にサポートされており、そのとき port を指定する必要があります。次の例は gelf ドライバで GELF リモートサーバ 192.168.0.42 のポート 12201 に接続します。

$ docker run --log-driver=gelf --log-opt gelf-address=udp://192.168.0.42:12201

デフォルトでは、Docker はコンテナ ID の始めの 12 文字だけログ・メッセージにタグ付けします。タグ・フォーマットの記録方式をカスタマイズするには、 log tag オプションのドキュメント をご覧ください。

labelenv オプションが gelf ロギング・ドライバでサポートされています。これは extra フィールドに、冒頭がアンダースコア ( _ ) で始まるキーを追加するものです。

// []
"_foo": "bar",
"_fizz": "buzz",
// []

fluentd オプション

--log-opt NAME=VALUE フラグを使い、以下の Fluentd ロギング・ドライバのオプションを追加できます。

  • fluentd-address : 接続先を host:port の形式で指定。例: localhost:24224
  • tagfluentd メッセージのタグを指定。

例えば、両方のオプションを指定すると、次のようになります。

docker run --log-driver=fluentd --log-opt fluentd-address=localhost:24224 --log-opt tag=docker.{{.Name}}

コンテナは指定した場所にある Fluentd デーモンに接続できなければ、コンテナは直ちに停止します。このロギング・ドライバの動作に関する詳細情報は fluentd ロギング・ドライバ をご覧ください。

Amazon CloudWatch Logs オプションの指定

Amazon CloudWatch ロギングドライバは、以下のオプションをサポートしています。

--log-opt awslogs-region=<aws_region>
--log-opt awslogs-group=<log_group_name>
--log-opt awslogs-stream=<log_stream_name>

このロギング・ドライバの動作に関する詳細情報は awslogs ロギング・ドライバ をご覧ください。

参考

Configuring Logging Drivers
https://docs.docker.com/engine/admin/logging/overview/