摘 要:随着互联网技术的快速发展和Web2.0技术的逐渐成熟,各种应用程序在运行过程中所产生的日志的数量呈爆炸式增长.如何高效的收集海量的日志数据,成为了一个亟需解决的难题.本研究基于FlumeNG、Hadoop等开源框架设计并实现了一套完善的海量日志数据的实时收集系统.
关 键 词 :FlumeNG;Hadoop;日志收集
中图分类号:TP311 文献标识码:A 文章编号:1674-7712 (2013) 14-0000-01
日志的收集是了解和分析应用程序运行情况的必要前提[1].通过使用FlumeNG等技术,可以实时的、可靠的收集网络应用程序所产生的海量日志数据.
一、FlumeNG
FlumeNG是分布式的、可靠的、高可用的、高性能的开源日志收集系统[2].它能够从各种日志源上收集日志,存储到一个存储系统(可以是NFS,HDFS等)上[3],以便于进行集中统计分析处理.
二、日志收集系统的架构
Event是FlumeNG中所传输的基本单元.客户端应用程序需要将产生的日志数据封装成FlumeNG所能识别的Event对象.FlumeNG就是以Event的方式将数据从日志源头传送到最终的存储目的地.Agent是FlumeNG配置管理的基本运行组件.一个Agent是包括Sources,Channels,Sinks和其他组件的单独JVM运行实体.其中,Sources负责接送客户端应用程序所产生的Event,并将这些Events以事务的方式来批量的添加到一个或者多个Channels中.系统内置的的Sources包括:Syslog、Avro、Exec等.Channel位于Source和Sink之间,用于缓存由Source进来的Events,提高系统的可靠性和吞吐量.MemoryChannel和FileChannel是使用最多的两种Channel.其中MemoryChannel的吞吐量要高于FileChannel,但是不提高Event的持久化保证即在断电等故障发生时会造成Event的丢失,而FileChannel提供了Event的持久化机制,从而保证了Event处理的可靠性.Sink负责从Channel中批量的读取Event,然后传输到下一个Agent或者最终的存储目的地.当Sink操作成功之后,Events会被从Channel中删除掉.FlumeNG的数据流模型如下:
三、日志收集系统的实现
为了保证整个系统的可靠性和容错性,FlumeNG采用FailOver的架构形式来进行搭建.每个应用程序所在的服务器上都运行着一个flumeMainClientAgent程序,同时在另外一台备份机上运行着相同配置的flumeBackupClientAgent程序.当flumeMainClientAgent程序发生故障时,客户端的数据流可以自动透明的切换到flumeBackupClientAgent端.flumeMainClient或者flumeBackupClient收集到的数据会进一步发送到远程flumeMainCollectorAgent.和flumeMainClientAgent一样,flumeMainCollectorAgent也有一个相同配置的flumeBackupCollectorAgent运行在另外一台备份机上.当flumeMainCollector程序出现异常时,flumeMainClient或者flumeBackupClient的数据流同样会自动的透明的切换到flumeBackupCollectorAgent端.flumeMainClient和flumeMainCollector之间是通过Avro的方式进行相连.此外,所有的Agent中的Channel都采用FileChannel来实现,从而保证了当Agent程序出现异常时也不会发生消息丢失的情况.FlumeNG在本研究中的具体架构实现如图2所示:
四、结论
本研究在对现有的数据收集解决方案进行分析的基础之上,使用FlumeNG设计并实现了针对网络应用程序的海量日志数据的收集系统.该系统具有高性能、高吞吐量以及高可扩展性的特点,通过增加服务器结点的数量即可应对更大的数据量.此外,该系统还支持对收集到的日志数据进行实时处理和离线处理.