微服务
和容器
很好地融合在一起,但它们使日志记录成为一项挑战。设置监控时请牢记这些注意事项。
在过去的几年里,容器
已经成为 IT 领域的一个巨大话题,尤其是在 DevOps
领域。简单地说,容器提供了一种简单且可扩展的方式,可以在从一个环境迁移到另一个环境时可靠地运行软件。
容器
通过在一个包中提供整个运行时环境来做到这一点,其中包括应用程序,以及运行它所需的所有依赖项、库和其他二进制文件以及配置文件。
与容器
紧密结合的是微服务,它代表了一种更敏捷的应用程序开发方式。微服务架构
将应用程序构建为一组松散耦合的服务,这些服务通过处理离散业务功能的功能 API 连接。微服务主要为应用程序开发提供“分而治之”的方法,而不是庞大的单体代码库。
在容器基础设施领域引领 潮流的是 Docker
,一个用于部署容器化软件应用程序的平台。容器的真正价值在于,它们允许团队即时启动完整的运行时环境。Docker
可以说是当今让企业采用微服务的最有影响力的平台。
类似于虚拟机通过从一台服务器向最终用户提供操作系统的多个实例来简化软件开发和测试,容器在应用程序和主机操作系统之间添加了一个额外的抽象层。最大的不同是容器不需要管理程序,只运行一个操作系统实例。总的来说,这相当于更少的内存和更快的运行时间
。
与开发任何应用程序一样,日志记录是流程的核心部分,在出现问题时特别有用。但是登录容器化应用程序的世界与使用传统应用程序不同。有效地记录 Docker
意味着不仅记录应用程序和主机操作系统,还记录 Docker
服务。在使用 ockerized
应用程序时,需要牢记许多日志记录技术和方法。
我们在下面更详细地概述了前五个最佳实践
。
基于应用程序的日志记录
在基于应用程序的方法中,容器内的应用程序使用日志框架来处理日志过程。例如,Java
应用程序可能使用 Log4j 2
格式化日志文件并将其发送到远程服务器,并完全绕过 Docker
环境和操作系统。
虽然基于应用程序的日志记录
为开发人员提供了对日志记录事件的最大控制权,但该方法也会在应用程序进程上产生大量开销。这种方法可能对那些在更传统的应用程序环境中工作的人有用,因为它允许开发人员继续使用应用程序的日志框架(即 Log4j 2
),而无需向主机添加日志功能。
有效地记录 Docker
意味着不仅记录应用程序和主机操作系统,还记录 Docker
服务。
使用数据卷
容器
本质上是瞬态的,这意味着如果容器关闭,容器内的任何文件都将丢失。相反,容器必须要么将日志事件转发到集中式日志服务(例如Loggly
),要么将日志事件存储在数据卷中。数据卷被定义为“容器内的标记目录,用于保存持久性或共同共享的数据
”。
使用数据卷
记录事件的优势在于,由于它们链接到主机上的目录,因此日志数据会持续存在并且可以与其他容器共享。这种方法的优点是它降低了在容器发生故障或关闭时丢失数据的可能性。可以在此处找到在 Ubuntu
中设置 Docker
数据卷的说明 。
Docker 日志记录驱动程序
在 Docker
中记录事件的第三种方法是使用平台的日志记录驱动程序将日志事件转发到主机上运行的 syslog
实例。Docker
日志驱动程序直接从容器的 stdout
和 stderr
输出中读取日志事件;这消除了读取和写入日志文件的需要,从而提高了性能。
但是,使用 Docker
日志记录驱动程序有一些缺点:
-
它不允许日志解析,只允许日志转发。
-
Docker 日志命令仅适用于日志驱动程序 JSON 文件。
-
当 TCP 服务器无法访问时,容器会终止。
可以在此处找到为 Docker
配置默认日志记录驱动程序的说明。
专用日志容器
这种方法的主要优点是允许在 Docker
环境中完全管理日志事件。由于专用的日志容器可以从其他容器收集日志事件,聚合它们,然后将事件存储或转发给第三方服务,这种方法消除了对主机的依赖。
-
自动收集、监控和分析日志事件。
-
无需配置即可自动扩展您的日志事件。
-
通过多个日志事件、统计信息和
Docker API
数据流检索日志。
边车方法
Sidecar
已成为管理微服务架构的一种流行方法。边车的概念来自摩托车边车如何连接到摩托车的类比。引用一个消息来源,“sidecar
作为第二个进程与您的服务一起运行,并提供通过同质接口(例如基于 HTTP
的类似 REST
的 API
)公开的‘平台基础设施特性
’。”
从日志的角度来看,sidecar
方法的优点是每个容器都链接到它自己的日志容器(应用程序容器保存日志事件和日志容器标签,并将它们转发到像 Loggly
这样的日志管理系统)。
Sidecar
方法对于需要更专业的日志信息和自定义标签的大型部署特别有用。但是,设置边车更加复杂且难以扩展。
知识星球
星球地址:https://t.zsxq.com/03MJM7YfI