日志记录驱动程序
预计阅读时间:5分钟
该journald
日志驱动程序发送容器日志的
systemd
日记。可以使用journalctl
命令,使用journal
API或命令
来检索日志条目docker logs
。
除了日志消息本身的文本之外,journald
日志驱动程序还将以下元数据与每条消息一起存储在日志中:
场地 | 描述 |
---|---|
CONTAINER_ID |
容器ID截短为12个字符。 |
CONTAINER_ID_FULL |
完整的64个字符的容器ID。 |
CONTAINER_NAME |
启动时的容器名称。如果docker rename 用于重命名容器,则新名称不会反映在日记帐分录中。 |
CONTAINER_TAG , SYSLOG_IDENTIFIER |
容器标记(日志标记选项文档)。 |
CONTAINER_PARTIAL_MESSAGE |
一个标记日志完整性的字段。改善长日志行的日志记录。 |
用法
要将journald
驱动程序用作默认的日志记录驱动程序,请在Linux主机或Windows Server上
的文件中将log-driver
和log-opt
键设置为适当的值。有关使用来配置Docker的更多信息,请参见
daemon.json。daemon.json
/etc/docker/
C:\ProgramData\docker\config\daemon.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 值的模板。请参阅日志标签选项文档以自定义日志标签格式。 |
labels |
可选的 | 如果为容器指定了这些标签的键的列表,这些键应以逗号分隔。 |
labels-regex |
可选的 | 与标签相似并兼容。与记录相关标签匹配的正则表达式。用于高级 日志标签选项。 |
env |
可选的 | 如果为容器指定了环境变量键的列表,这些变量应以逗号分隔。 |
env-regex |
可选的 | 与env相似并兼容。用于匹配与日志记录相关的环境变量的正则表达式。用于高级 日志标签选项。 |
如果label和env键之间发生冲突,则env的值优先。每个选项都将其他字段添加到日志消息的属性。
下面是记录到日志所需的日志记录选项的示例。
$ docker run \
--log-driver=journald \
--log-opt labels=location \
--log-opt env=TEST \
--env "TEST=false" \
--label location=west \
your/application
此配置还指示驱动程序在有效负载中包括标签位置和环境变量TEST。如果省略--env "TEST=false"
或--label location=west
参数,则不会在日记日志中设置相应的键。
关于容器名称的注意事项
CONTAINER_NAME
字段中记录的值是在启动时设置的容器的名称。如果docker rename
用于重命名容器,则新名称不会反映在日记帐分录中。日记帐分录继续使用原始名称。
检索日志消息与 journalctl
使用该journalctl
命令来检索日志消息。您可以应用过滤器表达式以将检索到的消息限制为与特定容器关联的消息:
$ sudo journalctl CONTAINER_NAME=webserver
您可以使用其他过滤器来进一步限制检索到的消息。该-b
标志仅检索自上次系统引导以来生成的消息:
$ sudo journalctl -b CONTAINER_NAME=webserver
该-o
标志指定重试日志消息的格式。用于-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
API检索日志消息
本示例使用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)