ログ用のタグ¶
tag
ログ・オプションは、コンテナのログ・メッセージを識別するため、どのような形式のタグを使うか指定します。デフォルトでは、システムはコンテナ ID の冒頭12文字を使います。この動作を上書きするには、 tag
オプションを使います。
docker run --log-driver=fluentd --log-opt fluentd-address=myhost.local:24224 --log-opt tag="mailer"
Docker はタグの値を指定するために、特別なテンプレート・マークアップをサポートしています。
マークアップ | 説明 |
---|---|
{{.ID}} |
コンテナ ID の冒頭 12 文字 |
{{.FullID}} |
コンテナの完全 ID |
{{.Name}} |
コンテナ名 |
{{.ImageID}} |
イメージ ID の冒頭 12 文字 |
{{.ImageFullId}} |
コンテナの完全 ID |
{{.ImageName}} |
コンテナが使っているイメージ名 |
{{.DaemonName}} |
docker プログラムの名前 ( docker ) |
例えば、 --log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}"
を値に指定したら、 syslog
のログ行は次のようになります。
Aug 7 18:33:19 HOSTNAME docker/hello-world/foobar/5790672ab6a0[9103]: Hello from Docker.
起動時に、システムは container_name
フィールドと {{.Name}}
をタグに設定します。 docker rename
でコンテナ名を変更しても、ログメッセージに新しいコンテナ名は反映されません。そのかわり、これらのメッセージは元々のコンテナ名を使って保存され続けます。
高度な使い方は、 go テンプレート のタグ生成や、コンテナの ログ内容 をご覧ください。
以下は syslog ロガーを使う例です:
$ docker run -it --rm \
--log-driver syslog \
--log-opt tag="{{ (.ExtraAttributes nil).SOME_ENV_VAR }}" \
--log-opt env=SOME_ENV_VAR \
-e SOME_ENV_VAR=logtester.1234 \
flyinprogrammer/logtester
ログの結果は次のようになります。
Apr 1 15:22:17 ip-10-27-39-73 docker/logtester.1234[45499]: + exec app
Apr 1 15:22:17 ip-10-27-39-73 docker/logtester.1234[45499]: 2016-04-01 15:22:17.075416751 +0000 UTC stderr msg: 1
注釈
ドライバがログのオプション syslog-tag
、 fluentd-tag
、 gelf-tag
を指定しても後方互換性があります。ですが、これらの代わりに、標準化のため一般的な tag
ログ・オプションを使うべきです。
参考
- Log tags for logging driver
- https://docs.docker.com/engine/admin/logging/log_tags/