Flume+Kafka收集Docker容器内分布式日志应用实践

随着云计算、PaaS平台的普及,虚拟化、容器化等技术的应用,例如Docker等技术,越来越多的服务会部署在云端。通常,我们需要需要获取日志,来进行监控、分析、预测、统计等工作,但是云端的服务不是物理的固定资源,日志获取的难度增加了,以往可以SSH登陆的或者FTP获取的,现在可不那么容易获得,但这又是工程师迫切需要的,最典型的场景便是:上线过程中,一切都在GUI化的PaaS平台点点鼠标完成,但是我们需要结合tail -F、grep等命令来观察日志,判断是否上线成功。当然这是一种情况,完善的PaaS平台会为我们完成这个工作,但是还有非常多的ad-hoc的需求,PaaS平台无法满足我们,我们需要日志。本文就给出了在分布式环境下,容器化的服务中的分散日志,如何集中收集的一种方法。

2 设计约束和需求描述

做任何设计之前,都需要明确应用场景、功能需求和非功能需求。

2.1 应用场景

分布式环境下可承载百台服务器产生的日志,单条数据日志小于1k,最大不超过50k,日志总大小每天小于500G。

2.2 功能需求

1)集中收集所有服务日志。

2)可区分来源,按服务、模块和天粒度切分。

2.3 非功能需求

1)不侵入服务进程,收集日志功能需独立部署,占用系统资源可控。

2)实时性,低延迟,从产生日志到集中存储延迟小于4s。

3)持久化,保留最近N天。

4)尽量递送日志即可,不要求不丢不重,但比例应该不超过一个阈值(例如万分之一)。

4)可以容忍不严格有序。

5)收集服务属于线下离线功能,可用性要求不高,全年满足3个9即可。

3 实现架构

一种方案实现的架构如下图所示:

Flume+Kafka收集Docker容器内分布式日志应用实践

 3.1 Producer层分析

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgsyp.html