ロギング・ドライバの設定¶
コンテナには、 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-file
か journald
ロギング・ドライバ使用時のみです。
label
と env
オプションは、ロギング・ドライバで利用可能な追加属性を加えます。各オプションはキーのリストをカンマで区切ります。 label
と env
キーの間に衝突があれば、 env
を優先します。
各種オプションは、Docker デーモン起動時に指定します。
docker daemon --log-driver=json-file --log-opt labels=foo --log-opt env=foo,fizz
それから、 label
や env
の値を指定してコンテナを起動します。例えば、次のように指定するでしょう。
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-size
と max-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 ソケットを使います。 tcp
や udp
で port
を指定しなければ、デフォルトは 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 オプションのドキュメント をご覧ください。
label
と env
オプションが gelf ロギング・ドライバでサポートされています。これは extra
フィールドに、冒頭がアンダースコア ( _
) で始まるキーを追加するものです。
// […]
"_foo": "bar",
"_fizz": "buzz",
// […]
fluentd オプション¶
--log-opt NAME=VALUE
フラグを使い、以下の Fluentd ロギング・ドライバのオプションを追加できます。
fluentd-address
: 接続先をhost:port
の形式で指定。[localhost:24224]tag
:fluentd
メッセージのタグを指定。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/