日志日志记录驱动程序

journaldlogging 驱动程序将容器日志发送到systemd杂志. 可以使用journalctl命令,通过使用journalAPI 或使用docker logs命令。

除了日志消息本身的文本之外,journald日志驱动程序 将以下元数据与每条消息一起存储在日志中:

描述
CONTAINER_ID容器 ID 被截断为 12 个字符。
CONTAINER_ID_FULL完整的 64 个字符的容器 ID。
CONTAINER_NAME启动容器时的名称。如果您使用docker rename要重命名容器,新名称不会反映在 Journal entries (日记帐条目) 中。
CONTAINER_TAG,SYSLOG_IDENTIFIER容器标签( log tag option documentation)。
CONTAINER_PARTIAL_MESSAGE标记日志完整性的字段。改进长日志行的日志记录。
IMAGE_NAME容器镜像的名称。

用法

要使用journalddriver 作为默认的日志记录驱动程序,将log-driverlog-optskeys 添加到daemon.json文件,即 位于/etc/docker/在 Linux 主机上或C:\ProgramData\docker\config\daemon.json在 Windows Server 上。有关 使用 配置 Dockerdaemon.json,请参阅 daemon.json

以下示例将日志驱动程序设置为journald:

{
  "log-driver": "journald"
}

重新启动 Docker 以使更改生效。

要为特定容器配置日志记录驱动程序,请使用--log-driver标志docker run命令。

$ docker run --log-driver=journald ...

选项

使用--log-opt NAME=VALUE标志以指定其他journald伐木 驱动程序选项。

选择必填描述
tag自选指定要设置的模板CONTAINER_TAGSYSLOG_IDENTIFIERjournald logs 中的值。请参阅 log tag option 文档以自定义日志标签格式。
labels自选以逗号分隔的标签键列表,如果为容器指定了这些标签,则应包含在 message 中。
labels-regex自选与 labels 类似并兼容。用于匹配与日志记录相关的标签的正则表达式。用于高级日志标记选项
env自选以逗号分隔的环境变量键列表,如果为容器指定了这些变量,则应包含在 message 中。
env-regex自选与 类似并兼容env.用于匹配与日志记录相关的环境变量的正则表达式。用于高级日志标记选项

如果labelenvoptions 的env优先。每个选项都会向 logging 消息。

以下是记录到 journald 所需的日志记录选项的示例。

$ docker run \
    --log-driver=journald \
    --log-opt labels=location \
    --log-opt env=TEST \
    --env "TEST=false" \
    --label location=west \
    your/application

此配置还指示驱动程序在有效负载中包含标签 location 和环境变量TEST.如果--env "TEST=false"--label location=west参数,则相应的键将 未在 journald log 中设置。

关于容器名称的注意事项

CONTAINER_NAMEfield 是容器的名称,该容器 在启动时设置。如果您使用docker rename要重命名容器,新的 name 不会反映在 journal entries 中。日记条目继续 以使用原始名称。

检索日志消息journalctl

使用journalctl命令检索日志消息。您可以应用过滤器 表达式将检索到的消息限制为与特定 容器:

$ sudo journalctl CONTAINER_NAME=webserver

您可以使用其他筛选条件来进一步限制检索的消息。这-bflag 仅检索自上次系统引导以来生成的消息:

$ sudo journalctl -b CONTAINER_NAME=webserver

-oflag 指定检索到的日志消息的格式。用-o json以 JSON 格式返回日志消息。

$ sudo journalctl -o json CONTAINER_NAME=webserver

查看启用了 TTY 的容器的日志

如果在容器上启用了 TTY,您可能会看到[10B blob data]在输出中 检索日志消息时。 原因是\r附加到行尾,并且journalctl不会自动剥离它,除非--all已设置:

$ sudo journalctl -b CONTAINER_NAME=webserver --all

使用journal应用程序接口

此示例使用systemd用于检索容器的 Python 模块 原木:

import systemd.journal

reader = systemd.journal.Reader()
reader.add_match('CONTAINER_NAME=web')

for msg in reader:
    print '{CONTAINER_ID_FULL}: {MESSAGE}'.format(**msg)