日志日志记录驱动程序
这journald
logging 驱动程序将容器日志发送到systemd
杂志.
可以使用journalctl
命令,通过使用journal
API 或使用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 | 容器镜像的名称。 |
用法
要使用journald
driver 作为默认的日志记录驱动程序,将log-driver
和log-opts
keys 添加到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_TAG 和SYSLOG_IDENTIFIER journald logs 中的值。请参阅 log tag option 文档以自定义日志标签格式。 |
labels | 自选 | 以逗号分隔的标签键列表,如果为容器指定了这些标签,则应包含在 message 中。 |
labels-regex | 自选 | 与 labels 类似并兼容。用于匹配与日志记录相关的标签的正则表达式。用于高级日志标记选项。 |
env | 自选 | 以逗号分隔的环境变量键列表,如果为容器指定了这些变量,则应包含在 message 中。 |
env-regex | 自选 | 与 类似并兼容env .用于匹配与日志记录相关的环境变量的正则表达式。用于高级日志标记选项。 |
如果label
和env
options 的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_NAME
field 是容器的名称,该容器
在启动时设置。如果您使用docker rename
要重命名容器,新的
name 不会反映在 journal entries 中。日记条目继续
以使用原始名称。
检索日志消息journalctl
使用journalctl
命令检索日志消息。您可以应用过滤器
表达式将检索到的消息限制为与特定
容器:
$ sudo journalctl CONTAINER_NAME=webserver
您可以使用其他筛选条件来进一步限制检索的消息。这-b
flag 仅检索自上次系统引导以来生成的消息:
$ sudo journalctl -b CONTAINER_NAME=webserver
这-o
flag 指定检索到的日志消息的格式。用-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)