十大Docker记录问题

Docker不仅改变了应用程序的部署方式,还改变了日志管理的工作流程。容器将日志写入控制台(stdout / stderr),而Docker Logging Drivers将日志转发到目的地,而不是将日志写入文件。快速检查Docker GitHub问题表明用户在处理Docker日志时遇到各种问题。使用Docker管理日志似乎很棘手,需要更深入了解Docker日志驱动程序实现和替代方案,以克服人们报告的问题。

那么Docker日志记录的十大问题是什么?

首先,让我们首先概述Docker日志记录驱动程序和选项,以便将日志发送到集中式日志管理解决方案,如Elastic Stack(前ELK Stack)或Sematext Cloud

在Docker的早期,容器日志只能通过Docker远程API获得,即通过“docker logs”命令和一些高级日志转发器。后来,Docker将日志驱动程序作为插件引入,打开Docker以与各种日志管理工具集成。这些日志记录驱动程序在docker守护程序中实现为二进制插件。最近,插件体系结构扩展为将外部进程作为外部进程运行,可以注册为插件并通过Unix套接字检索日志。目前,docker二进制文件附带的日志记录驱动程序是二进制插件,但这可能会在不久的将来发生变化。

Docker日志记录驱动程序接收容器日志并将其转发到远程目标或文件。默认日志记录驱动程序是“json-file”。它以本地磁盘上的JSON格式存储容器日志。Docker有一个用于记录驱动程序的插件架构,因此可以使用开源工具和商业工具的插件:

  • Journald - 在系统日志中存储容器日志
  • Syslog驱动程序 - 支持UDP,TCP,TLS
  • 流利 - 支持TCP或Unix套接字连接流畅
  • Splunk - HTTP / HTTPS转发到Splunk服务器
  • Gelf - UDP日志转发到Graylog2

要获得完整的日志管理解决方案,还需要使用其他工具:

要将日志发送到其中一个后端,您可能需要选择支持所选日志管理解决方案的日志记录驱动程序或日志记录工具。如果您的工具需要Syslog输入,则可以选择Syslog驱动程序。

十大Docker记录问题

1. Docker日志命令仅适用于json文件日志驱动程序

默认的日志记录驱动程序“json-file”将日志写入本地磁盘,json文件驱动程序是唯一与“docker logs”命令并行工作的驱动程序。一旦使用其他日志记录驱动程序,例如Syslog,Gelf或Splunk,Docker日志API调用开始失败,“docker logs”命令显示报告限制的错误,而不是在控制台上显示日志。docker log命令不仅失败,而且使用Docker API进行日志的许多其他工具(如Portainer等Docker用户界面或Logspout等日志收集容器)无法在这种情况下显示容器日志。

请参阅https://github.com/moby/moby/issues/30887

2. Docker Syslog驱动程序可以阻止容器部署

使用带有TCP或TLS的Docker Syslog驱动程序是提供日志的可靠方法。但是,当容器启动时,Syslog日志记录驱动程序需要与Syslog服务器建立TCP连接。如果在容器启动时无法建立此连接,则容器启动失败,并显示错误消息:

docker: Error response from daemon: Failed to initialize logging driver: dial tcp

这意味着临时网络问题或高网络延迟可能会阻止容器的部署。此外,重新启动Syslog服务器可能会将通过TCP / TS记录的所有容器拆除到中央Syslog服务器,这绝对是要避免的情况。

请参阅:https://github.com/docker/docker/issues/21966

3. Docker Syslog驱动程序在目标关闭时丢失日志

与上面的问题2类似,导致日志丢失的原因是Docker日志记录驱动程序在无法将日志传送到远程目标时缓冲日志的能力。

一个值得关注的有趣问题:https://github.com/moby/moby/issues/30979

4. Docker日志记录驱动程序不支持多行日志,如错误堆栈跟踪

当我们考虑日志时,大多数人会想到简单的单行日志,比如Nginx或Apache日志。但是,日志也可以跨越多行。例如,异常跟踪通常跨越多行,因此为了帮助Logstash用户,我们已经共享了如何使用Logstash处理堆栈跟踪。在容器世界中情况并不好,事情变得更加复杂,因为来自容器中运行的所有应用程序的日志都会被发送到同一输出 - 标准输出。难怪看到问题#22920以“已关闭”结束。不在乎。“这么多人都很失望。幸运的是,有一些工具,如Sematext Docker Agent,可以开箱即用解析多行日志,以及应用自定义多行模式。

5. Docker Service Logs命令挂起非JSON日志记录驱动程序

虽然json文件驱动程序看起来很坚固,但遗憾的是其他日志驱动程序仍然会导致Docker Swarm模式出现问题。

请参阅Github问题:https://github.com/docker/docker/issues/28793

6. Docker Daemon崩溃如果流利的守护进程已经消失并且缓冲区已满

另一种情况是,当远程目标不可访问时,日志记录驱动程序会导致问题 - 在此特定情况下,日志记录驱动程序会抛出导致Docker守护程序崩溃的异常。

7.在Splunk驱动程序失败时,Docker容器在创建状态下陷入困境

如果Splunk服务器在容器启动时返回504,则实际启动容器,但Docker报告容器未能启动。一旦处于此状态,容器不再出现在docker ps下,并且无法使用docker kill停止容器进程。停止该过程的唯一方法是手动终止它。

Github:https://github.com/moby/moby/issues/24376

8. Docker日志跳过/缺少应用程序日志(日志驱动程序)

事实证明,此问题是由记录速率限制引起的,当Docker为所有正在运行的应用程序创建日志时,需要增加该速度限制,并且由于速率限制设置,journald可能会跳过某些日志。因此,当您将Docker连接到它时,请注意您的日记设置。

9. Gelf司机问题

Gelf日志记录驱动程序缺少TCP或TLS选项,仅支持UDP,这可能会在UDP数据包丢失时丢失日志消息。一些问题报告了使用GELF驱动程序解析DNS /缓存的问题,因此当您的Graylog服务器IP更改时,您的日志可能会被发送到“Nirvana” - 这可能会使用容器部署快速发生。

10. Docker不支持多个日志驱动程序

将日志存储在服务器上的本地以及将它们发送到远程服务器的可能性会很好。目前,Docker不支持多个日志驱动程序,因此用户被迫选择一个日志驱动程序。了解本文中列出的各种问题并非易事。

原文标题《Top 10 Docker Logging Gotchas》

作者:Stefan Thies

译者:February

不代表云加社区观点,更多详情请查看原文链接

原文链接:https://dzone.com/articles/top-10-docker-logging-gotchas

原文作者:Stefan Thies

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jeremy的技术点滴

基于Docker for macOS的Kubernetes本地环境搭建与应用部署

1.8K5
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Docker Bench对Docker主机进行安全性审核

使用Docker来容纳您的应用程序和服务可以为您提供开始即用的一些安全优势,但默认的Docker安装仍然有一些空间可用于一些与安全相关的配置改进。在互联网安全中...

1633
来自专栏容器云生态

overlayfs存储驱动的使用以及技术探究

overlayfs存储驱动的使用以及技术探究 1.overlayfs 基本概念 一种联合文件系统,设计简单,速度更快。overlayfs在linux主机上只有两...

36510
来自专栏编程坑太多

『高级篇』docker之微服务服务docker化(18)

1052
来自专栏宝哥的专栏

Docker系列学习文章 - 存储基本配置(八)

| 导语 通过前面的文章学会后,我们运行一个容器,打包制作一个镜像没啥问题了。但是要真正在生产上运用docker,我们还差两招很重要的。一个是数据卷的配置,还有...

1.5K25
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Docker Swarm安装和保护OpenFaaS

无服务器架构从开发人员隐藏服务器实例,并且通常公开允许开发人员在云中运行其应用程序的API。这种方法可以帮助开发人员快速部署应用程序,因为他们可以将配置和维护实...

3721
来自专栏小狼的世界

谈一下Docker与Kubernetes集群的日志和日志管理

日志对于我们管理Kubernetes集群及其上的应用具有非常重要的作用,特别是在出现故障或者Bug的时候。如果你能回答下面几个问题,那么可以不用再看本文了,如果...

2371
来自专栏大魏分享(微信公众号:david-share)

Openshift3.7完整安装手册+容器化Harbor

大魏:燕华是我们的合作伙伴,对Openshift很熟悉。按照本文档,可以一步步将Openshift3.7安装起来。本文仅供测试环境参考,生产环境慎用。 1 环境...

5948
来自专栏康怀帅的专栏

在生产环境使用 Docker

本文是对官方文档的总结与备注。 官方文档:https://docs.docker.com/engine/userguide/ 配置 Docker 手动启动 Do...

3895
来自专栏云原生架构实践

Docker Data Center系列(一)- 快速搭建云原生架构的实践环境

DDC是Docker Data Center的简称,是Docker公司推出的容器化数据中心管理平台。它的编排核心是swarm,包含2个主要组件UCP和DTR。

1766

扫码关注云+社区

领取腾讯云代金券