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

预计阅读时间:6分钟

概述

此前多克尔发动机20.10,该docker logs命令 可能只能通过登录使用的驱动程序,使用支持的容器 localjson-filejournald登录司机。但是,许多第三方日志记录驱动程序不支持使用以下命令在本地读取日志docker logs

尝试以自动化和标准的方式收集日志数据时,这产生了多个问题。只能通过第三方解决方案以该第三方工具指定的格式访问和查看日志信息。

从Docker Engine 20.10开始,docker logs无论配置的日志记录驱动程序或插件如何,您都可以使用它来读取容器日志。此功能称为“双重日志记录”,它使您能够docker logs以一致的格式在本地读取容器日志,而不管所使用的日志驱动程序如何,因为该引擎已配置为将信息记录到“本地”日志记录驱动程序中。有关其他信息,请参考配置默认日志记录驱动程序

双重日志记录使用local日志记录驱动程序充当缓存,以读取容器的最新日志。默认情况下,缓存启用了日志文件轮换,每个容器最多限制5个文件,每个文件大小为20MB(压缩前)。

请参考配置选项部分以自定义这些默认值,或参考禁用双重日志记录 部分以禁用此功能。

先决条件

无需更改配置即可使用双重日志记录。如果配置的日志记录驱动程序不支持读取日志,则Docker Engine 20.10及更高版本会自动启用双重日志记录。

以下示例显示在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	
    

笔记

对于日志记录的驱动程序,支持阅读日志,比如localjson-filejournald司机,还有之前或之后的双重记录功能,成为可在功能上没有区别。对于这些驱动程序,可以docker logs在两种情况下使用读取日志。

配置选项

“双重日志记录”缓存接受与local日志记录驱动程序相同的配置选项 ,但带有cache-前缀。可以为每个容器指定这些选项,并且可以使用守护程序配置文件设置新容器的默认值。

默认情况下,缓存启用了日志文件轮换功能,每个容器最多限制5个文件,每个文件大小为20MB(压缩前)。使用下面描述的配置选项来自定义这些默认值。

选项 默认 描述
cache-disabled "false" 禁用本地缓存。布尔值作为字符串传递(true10,或false)。
cache-max-size "20m" 旋转缓存之前的最大大小。一个正整数加上代表测量单位的改性剂(km,或g)。
cache-max-file "5" 可以存在的最大缓存文件数。如果旋转日志会创建多余的文件,则会删除最旧的文件。一个正整数。
cache-compress "true" 启用或禁用循环日志文件的压缩。布尔值作为字符串传递(true10,或false)。

禁用双重日志记录缓存

使用该cache-disabled选项禁用双重日志记录缓存。在仅通过远程日志记录系统读取日志的情况下,以及不需要docker logs出于调试目的而通过日志读取的情况下,禁用高速缓存对于节省存储空间很有 用。

使用守护程序配置文件时,可以禁用单个容器的缓存,或者默认情况下禁用新容器的缓存。

以下示例使用守护程序配置文件来 默认使用“ splunk”日志记录驱动程序,并禁用了缓存:

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

笔记

用于记录的驱动程序,支持阅读日志,比如localjson-filejournald驱动程序,不使用双日志记录,并禁用选项没有效果。

局限性

  • 如果使用日志记录驱动程序或插件远程发送日志的容器突然出现“网络”问题,则不会对本地缓存进行“写”操作。
  • 如果logdriver由于某种原因写入失败(文件系统已满,删除了写入权限),则高速缓存写入失败,并将其记录在守护程序日志中。不会重试到高速缓存的日志条目。
  • 在默认配置下,某些日志可能会从高速缓存中丢失,因为在文件写入速度较慢的情况下,使用环形缓冲区可防止阻塞容器的stdio。守护程序关闭时,管理员必须修复这些问题。
docker日志记录驱动程序双重日志记录双重日志记录缓存环形缓冲区配置