将 docker logs 与远程日志驱动程序一起使用
概述
您可以使用 docker logs
命令读取容器日志,无论配置的日志驱动程序或插件是什么。Docker Engine 使用 local
日志驱动程序充当缓存,用于读取容器的最新日志。这称为双重日志记录。默认情况下,缓存启用日志文件轮转,并且每个容器最多限制为 5 个文件,每个文件 20 MB(压缩前)。
请参阅 配置选项 部分以自定义这些默认值,或参阅 禁用双重日志记录 部分以禁用此功能。
先决条件
如果配置的日志驱动程序不支持读取日志,Docker Engine 会自动启用双重日志记录。
以下示例显示了在有和没有双重日志记录可用性的情况下运行 docker logs
命令的结果
没有双重日志记录功能
当容器配置了远程日志驱动程序(如 splunk
)并且禁用了双重日志记录时,尝试在本地读取容器日志将显示错误
步骤 1:配置 Docker 守护程序
$ cat /etc/docker/daemon.json { "log-driver": "splunk", "log-opts": { "cache-disabled": "true", ... (options for "splunk" logging driver) } }
步骤 2:启动容器
$ docker run -d busybox --name testlog top
步骤 3:读取容器日志
$ docker logs 7d6ac83a89a0 Error response from daemon: configured logging driver does not support reading
具有双重日志记录功能
启用双重日志记录缓存后,即使日志驱动程序不支持读取日志,也可以使用 docker logs
命令读取日志。以下示例显示了使用 splunk
远程日志驱动程序作为默认值的守护程序配置,并启用了双重日志记录缓存
步骤 1:配置 Docker 守护程序
$ cat /etc/docker/daemon.json { "log-driver": "splunk", "log-opts": { ... (options for "splunk" logging driver) } }
步骤 2:启动容器
$ docker run -d busybox --name testlog top
步骤 3:读取容器日志
$ docker logs 7d6ac83a89a0 2019-02-04T19:48:15.423Z [INFO] core: marked as sealed 2019-02-04T19:48:15.423Z [INFO] core: pre-seal teardown starting 2019-02-04T19:48:15.423Z [INFO] core: stopping cluster listeners 2019-02-04T19:48:15.423Z [INFO] core: shutting down forwarding rpc listeners 2019-02-04T19:48:15.423Z [INFO] core: forwarding rpc listeners stopped 2019-02-04T19:48:15.599Z [INFO] core: rpc listeners successfully shut down 2019-02-04T19:48:15.599Z [INFO] core: cluster listeners successfully shut down
注意
对于支持读取日志的日志驱动程序(如
local
、json-file
和journald
驱动程序),在双重日志记录功能可用之前和之后,功能没有区别。对于这些驱动程序,日志可以在两种情况下使用docker logs
读取。
配置选项
双重日志记录缓存接受与 local
日志驱动程序 相同的配置选项,但使用 cache-
前缀。这些选项可以针对每个容器指定,并且可以使用 守护程序配置文件 为新容器设置默认值。
默认情况下,缓存启用日志文件轮转,并且每个容器最多限制为 5 个文件,每个文件 20MB(压缩前)。使用下面描述的配置选项自定义这些默认值。
选项 | 默认值 | 描述 |
---|---|---|
cache-disabled | "false" | 禁用本地缓存。作为字符串传递的布尔值(true 、1 、0 或 false )。 |
cache-max-size | "20m" | 缓存轮转之前的最大大小。一个正整数加上表示度量单位的修饰符(k 、m 或 g )。 |
cache-max-file | "5" | 可以存在缓存文件的最大数量。如果轮转日志会创建过多的文件,则会删除最旧的文件。一个正整数。 |
cache-compress | "true" | 启用或禁用轮转日志文件的压缩。作为字符串传递的布尔值(true 、1 、0 或 false )。 |
禁用双重日志记录缓存
使用 cache-disabled
选项禁用双重日志记录缓存。在仅通过远程日志系统读取日志且无需通过 docker logs
读取日志进行调试的情况下,禁用缓存有助于节省存储空间。
可以使用 守护程序配置文件 为单个容器或为新容器默认情况下禁用缓存。
以下示例使用守护程序配置文件将 splunk
日志驱动程序用作默认值,并禁用缓存
$ cat /etc/docker/daemon.json
{
"log-driver": "splunk",
"log-opts": {
"cache-disabled": "true",
... (options for "splunk" logging driver)
}
}
注意
对于支持读取日志的日志驱动程序(如
local
、json-file
和journald
驱动程序),不会使用双重日志记录,禁用该选项不会产生任何影响。
限制
- 如果使用远程发送日志的日志驱动程序或插件的容器遇到网络问题,则不会写入本地缓存。
- 如果由于任何原因(文件系统已满、写入权限已删除)写入
logdriver
失败,则缓存写入失败并在守护程序日志中记录。不会重试写入缓存的日志条目。 - 在默认配置中,某些日志可能会从缓存中丢失,因为使用了环形缓冲区,以防止在文件写入速度慢的情况下阻塞容器的标准输入/输出。管理员必须在守护程序关闭时修复这些问题。