日志日志记录驱动程序
这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-driver和log-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_TAG和SYSLOG_IDENTIFIERjournald logs 中的值。请参阅 log tag option 文档以自定义日志标签格式。 |
labels | 自选 | 以逗号分隔的标签键列表,如果为容器指定了这些标签,则应包含在 message 中。 |
labels-regex | 自选 | 与 labels 类似并兼容。用于匹配与日志记录相关的标签的正则表达式。用于高级日志标记选项。 |
env | 自选 | 以逗号分隔的环境变量键列表,如果为容器指定了这些变量,则应包含在 message 中。 |
env-regex | 自选 | 与 类似并兼容env.用于匹配与日志记录相关的环境变量的正则表达式。用于高级日志标记选项。 |
如果label和envoptions 的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)