Kubernetes 容器编排工具日志收集方案讨论
容器化服务为应用部署和管理提供了方便,同时为工作人员带来了新的困难。使用 Kubernetes 容器化编排工具,我们需要新的网络技能、分布式网络文件系统技能、微服务架构技能、CI/CD技能和日志统一收集技能等。
一、Kubernetes 集群中应用日志收集方案说明
1.1、前提说明
容器化服务中每个应用(开发写的程序)以容器形式运行,每个容器只能运行一个进程。
容器间是彼此隔离的–容器的网络、文件、进程、内存等资源彼此隔离;相互访问有限制。
1.2、概述
Kubernetes 应用容器的日志采集方式主要可以分为四种;虽然其中使用到的采集组件可能不同,但是原理是在这四种方式以内的。
- DockerEngine 方式
- Kubernetes DaemonSet 方式
- 应用容器中 Sidecar 方式
- 应用程序直接提交日志 logback
二、DockerEngine 方式说明
在容器中,标准输出将日志直接输出到 stdout 或 stderr,而 DockerEngine 接管 stdout 和 stderr 文件描述符,将日志接收后按照 DockerEngine 配置的 LogDriver 规则进行处理。
日志打印到文件的方式和虚拟机/物理机基本类似,只是日志可以使用不同的日志驱动;有journald、json-file、syslog等。
2.1、特性介绍
- 应用程序需要将日志输出到stdout/stderr 中。如果应用程序将日志输出到文件中,则不能收集。
- 经过DockerEngine 的封装,应用日志中会多出一些附加内容;在日志处理过程中需要删除掉。
- 多行日志收集有困难,日志内容解析比较麻烦。
- 一些不需要收集日志的容器,其日志内容也会收集到日志平台中;需要将这些日志过滤掉。
- 不同的日志驱动,功能点不同,特性也不一样;具体使用方式,需要根据使用方式进行调研。
2.2、实现步骤
- 应用程序配置日志文件:设置字段、标准输出(console 终端)的日志才能生效;写入到文件中的日志不能收集。
- 调研和配置合适的日志驱动:需要考虑日志收集、汇总、解析、存储、分析等功能。
三、Kubernetes DaemonSet 方式说明
应用容器将日志写入到具体文件中,在Kubernetes编排工具中对此日志文件做持久化存储共享,配置日志收集服务(Logstash、flume、filebeat等)读取日志进行日志收集。
3.1、特性介绍
- 日志持久化存储对网络文件系统有压力;日志写入慢,会影响业务应用的响应。使用本地存储的方式,可以提高日志写入速度,但需要注意磁盘容量。
- 应用程序需要将日志写入特定的目录中,Kubernetes 编排工具设置持久化存储目录要与之对应。
- 多行日志收集有困难,日志内容解析比较麻烦。
- 日志收集服务(logstash\flume\filebeat等)收集的日志格式要统一,否则无法做初步解析。对集群中所有容器有的日志格式有统一规范的要求。
3.2、实现步骤
- 制定日志规范:限定日志格式、字段、存储目录等;提供给开发人员执行。
- 调研和配置合适的日志收集服务(Logstash、flume、filebeat等):需要考虑日志的汇总、解析、存储、分析等功能。
四、应用容器中 Sidecar 方式
为每个应用容器配置一个专门收集日志和状态的附属容器。应用容器将日志内容写入到文件中,附属容器通过读取日志文件内容并转发到日志收集服务中;实现日志收集和汇总的功能。
4.1、特性介绍
- 每个应用容器配置一个 Sidecar 容器,占用资源高;对集群资源有较高要求。
- 应用容器需要规划好日志存储位置、日志存储格式等信息;否则维护各种各样的 Sidecar 配置就很困难;非常增加运维成本。
- 多行日志收集有困难,日志内容解析比较麻烦。
4.2、实现步骤
- 制定日志规范:限定日志格式、字段、存储目录等;提供给开发人员执行。
- 调研和配置合适的 Sidecar 服务;需要考虑日志的汇总、解析、存储、分析等功能。
五、应用程序直接提交日志 logback
应用程序自行将日志输出到日志汇总服务中,日志大数据提供可用的日志汇总服务。应用容器不依赖日志文件,而是直接进行日志网络汇总。数据流清晰,增加开发人员的自主可控能力。
5.1、特性介绍
- 应用程序中配置网络日志传输组件;Java 应用中有完善的解决方案。其他开发语言待确认。
- 日志大数据提供的日志汇总服务需要可信,如果不稳定会造成应用服务启动失败。
- 减少日志解析的难度,避免多行日志解析工作。
5.2、实现步骤
- 日志大数据提供可信的日志收集服务;推荐Kafka 中间件。
- 规划好应用日志的字段、网络传输方式;提供给开发人员执行。
- 完善日志汇总服务的后续工作:日志的分析、存储和展示功能。