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

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

none コンテナ用のロギング・ドライバを無効化します。このドライバを指定したら docker logs は無効化されます。
json-file Docker 用のデフォルト・ロギング・ドライバです。JSON メッセージをファイルに記録します。
syslog Docker 用の syslog ロギング・ドライバです。ログ・メッセージを syslog に記録します。
journald Docker 用の journald ロギング・ドライバです。ログ・メッセージを journald に記録します。
gelf Docker 用の Graylog Extendef ログ・フォーマット(GELF)ロギング・ドライバです。ログ・メッセージを Graylog のエンドポイントや Logstash に記録します。
fluentd Docker 用の fluentd ロギング・ドライバです。ログ・メッセージを fluentd に記録します(forward input)。
awslogs Docker 用の Amazon CloudWatch Logs ロギング・ドライバです。ログ・メッセージを Amazon CloudWatch Logs に記録します。
splunk Docker 用の Splunk ロギング・ドライバです。HTTP イベント・コレクタを使いログを splunk に書き込みます。
etwlogs Docker 用の ETW ロギング・ドライバです。ログメッセージを ETW イベントとして書き込みます。
gcplogs Docker 用の Google Cloud ロギング・ドライバです。ログメッセージを Google Cloud Logging に書き込みます。

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

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

各種オプションは、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|tcp+tls]://host:port
--log-opt syslog-address=unix://path
--log-opt syslog-facility=daemon
--log-opt syslog-tls-ca-cert=/etc/ca-certificates/custom/ca.pem
--log-opt syslog-tls-cert=/etc/ca-certificates/custom/cert.pem
--log-opt syslog-tls-key=/etc/ca-certificates/custom/key.pem
--log-opt syslog-tls-skip-verify=true
--log-opt tag="mailer"
--log-opt syslog-format=[rfc5424|rfc3164]

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

認証局(CA)によって署名済みの、信頼できる証明書への絶対パスを syslog-tls-ca-cert で指定します。このオプションは tcp+tls 以外のプロトコルを使う場合は無視されます。

syslog-tls-cert は TLS 証明書用ファイルに対する絶対パスです。このオプションは tcp+tls 以外のプロトコルを使う場合は無視されます。

syslog-tls-key は TLS 鍵ファイルに対する絶対パスを指定します。このオプションは tcp+tls 以外のプロトコルを使う場合は無視されます。

syslog-tls-skip-verify は TLS 認証を設定します。デフォルトでは認証が有効ですが、オプションの値を true に指定したら、この設定を上書きします。このオプションは tcp+tls 以外のプロトコルを使う場合は無視されます。

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

syslog-format は syslog メッセージを書き込み時の書式を指定します。何も指定しなければ、デフォルトではホスト名を指定しないローカルの unix syslog 形式です。rfc3164 を指定したら、RFC-3164 互換形式でログを記録します。rfc5424 を指定したら、 RFC-5424 互換形式で記録します。

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 メッセージのタグを指定。
  • fluentd-buffer-limit : fluentd ログバッファの最大サイズを指定します。 [8MB]
  • fluentd-retry-wait : 接続リトライ前の初回遅延時間です(以降は指数関数的に増えます) [1000ms]
  • fluentd-max-retries : docker で不意の障害が発生時、最大のリトライ数を指定します。 [1073741824]
  • fluentd-async-connect : 初期接続をブロックするかどうかを指定します。 [false]

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

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 ロギング・ドライバ をご覧ください。

ETW ロギング・ドライバのオプション

etwlogs ロギング・ドライバには必須のオプションはありません。このロギング・ドライバは各ログメッセージを ETW イベントとして転送します。ETW 受信側(リスナー)は受信したイベントを作成できます。

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

Google Cloud ロギング

Google Cloud ロギング・ドライバはいかのオプションをサポートしています。

--log-opt gcp-project=<gcp_projext>
--log-opt labels=<label1>,<label2>
--log-opt env=<envvar1>,<envvar2>
--log-opt log-cmd=true

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

参考

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