将 docker 日志与远程日志记录驱动程序一起使用

概述

您可以使用docker logs命令读取容器日志,而不管 配置的日志记录驱动程序或插件。Docker Engine 使用locallogging 驱动程序作为缓存来读取容器的最新日志。 这称为双重日志记录。默认情况下,缓存具有日志文件轮换 启用,并且限制为最多 5 个文件,每个文件 20 MB(在 compression) 的 Compression) 中。

请参阅配置选项部分进行自定义 这些默认值,或者转到 Disable dual logging 部分以禁用此功能。

先决条件

如果配置的日志记录 driver 不支持读取日志。

以下示例显示了运行docker logscommand 替换为 并且没有双重日志记录可用性:

无双记录功能

当容器配置了远程日志记录驱动程序(例如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 logscommand 可用于 读取日志,即使日志记录驱动程序不支持读取日志。以下内容 示例显示了使用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-filejournalddrivers,之前或之后的功能没有区别 Dual Logging 功能可用。对于这些驱动程序,日志可以是 读取方式docker logs在这两种情况下。

配置选项

双日志记录缓存接受与local日志记录驱动程序,但使用cache-前缀。这些选项 可以为每个容器指定,并且可以使用 守护进程配置文件

默认情况下,缓存已启用日志文件轮换,并且限制为最大值 每个容器 5 个文件,每个文件 20MB(压缩前)。使用配置 选项来自定义这些默认值。

选择违约描述
cache-disabled"false"禁用本地缓存。作为字符串 (true,1,0false).
cache-max-size"20m"高速缓存在轮换之前的最大大小。一个正整数加上一个表示度量单位 (k,mg).
cache-max-file"5"可以存在的缓存文件的最大数量。如果轮换日志会创建过多的文件,则会删除最旧的文件。正整数。
cache-compress"true"启用或禁用旋转日志文件的压缩。作为字符串 (true,1,0false).

禁用双日志记录缓存

使用cache-disabled禁用双日志记录缓存的选项。禁用 缓存可用于在仅读取日志的情况下节省存储空间 通过远程日志记录系统,并且如果不需要读取日志docker logs用于调试目的。

可以为单个容器禁用缓存,也可以默认为新容器禁用缓存。 使用 daemon 配置文件时。

以下示例使用 daemon 配置文件来使用splunklogging 驱动程序作为默认值,并禁用缓存:

$ cat /etc/docker/daemon.json
{
  "log-driver": "splunk",
  "log-opts": {
    "cache-disabled": "true",
    ... (options for "splunk" logging driver)
  }
}

注意

对于支持读取日志的日志记录驱动程序,例如local,json-filejournalddrivers,则不会使用双重日志记录,并且禁用该选项会 没有效果。

局限性

  • 如果容器使用远程发送日志的日志驱动程序或插件 有网络问题,否write复制到本地缓存。
  • 如果写入logdriver因任何原因失败(文件系统已满、写入 permissions removed),缓存写入失败并记录在守护程序日志中。 不会重试缓存的日志条目。
  • 在默认配置中,某些日志可能会从缓存中丢失,因为 使用环形缓冲区来防止在出现 文件写入速度慢。管理员必须在守护程序关闭时修复这些漏洞。