Docker可以有多个日志驱动程序吗?

17

一个容器是否可以同时使用多个日志记录驱动程序 - 比如 fluentd 和 json?

谢谢。


1
这是一个开放的功能请求,并正在此处进行跟踪。 - vikas027
4个回答

10

更新说明中显示已添加多个日志驱动程序支持:
  • 添加对Docker日志的多个日志驱动程序的支持。
- arueth
FYI,这与多个日志驱动程序不同。此功能仅支持通过docker logs本地查看日志,同时使用另一个日志驱动程序。 - McP
现在 Docker-ce 20 支持双重日志记录。 - Thilina Viraj

9
自Docker CE版本20.10.1以来,双重日志记录功能已经可用。
此功能以前仅在Docker Enterprise版本18.03.1-ee-1中提供。
官方文档章节 "Dual Logging"(截至2021年1月4日)尚未反映出这一点。
该功能已在拉取请求#40543中开源,并于2020年2月27日合并到master中。
相关的GitHub问题#17910moby/moby中被以下评论关闭:
“即将推出的Docker 20.10版本将具有上述功能(“双重日志记录”),它使用本地日志驱动程序作为环形缓冲区,使使用不具有“读取”支持的日志驱动程序时docker logs工作(例如,将日志发送到远程日志聚合器的日志驱动程序)。

1
请注意,这与使用多个日志驱动程序不同。此功能仅支持通过docker logs本地查看日志,同时使用另一个日志驱动程序。事实上,该页面指出:“您不能指定多个日志驱动程序。”针对这个问题的直接回答是,“双重日志记录”只支持fluentd和simple,而不支持fluentd和json。 - McP
是的,你 *有点* 正确——docker 可以使用多个日志驱动程序,但是使用内部双重日志记录功能时,您只能选择本地驱动程序加上任何其他驱动程序的组合。 对于其他情况,请使用 logspoutlogsput-fluentd 模块。感谢您的反对票。 - Nicolai Fröhlich

8

不可以,你只能指定一个日志记录驱动程序/容器。

如果想要为您的日志使用单独的接收器,您需要依赖于像 fluentd 这样的工具来接收日志(或读取json日志文件),并配置一个流水线来分发它们。


3
根据官方文档,您只能指定单个日志记录驱动程序:

您不能指定多个日志记录驱动程序。

“日志记录驱动程序”的文档也表明了这一点:

要将Docker守护程序配置为默认使用特定的日志记录驱动程序,请在daemon.json文件中设置log-driver的值为日志记录驱动程序的名称...

{
  "log-driver": "syslog"
}

你可以看到"log-driver"需要一个字符串而不是一个数组。
实际上,自 Docker Engine Enterprise 18.03.1-ee-1以来,Docker已经“仅仅”启用了双重日志记录功能,允许配置任何日志记录驱动程序,同时仍然可以使用 docker logs 读取它们。
例如,在该功能之前,在daemon.json中指定驱动程序:
{
  "log-driver": "syslog"
}

现在可以将日志重定向到syslog服务器,但这也会使Docker不再将日志发布到本地日志驱动程序中。现在情况已经不同了,信息可以在两个位置都找到。

从Docker Engine Enterprise 18.03.1-ee-1开始,您可以使用docker logs读取容器日志,而无论配置的日志驱动程序或插件如何。有时称为双重日志记录功能,此功能允许您使用docker logs以一致的格式在本地读取容器日志,而不管使用的远程日志驱动程序是什么,因为引擎已配置为将信息记录到“本地”日志驱动程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接