【论文摘要】传统的日志分析技术在处理海量数据时存在计算瓶颈。针对该问题,研究了基于大数据技术的日志分析方案,即由多台计算机完成日志文件的存储、分析和挖掘工作;建立了一个分层的网络日志分析系统:Syslog完成日志采集,Hadoop负责分布式存储和并行计算,在MapReduce框架下重新实现了IP统计算法。实验结果表明,在数据密集型计算中使用大数据技术可以明显提高算法的执行效率和系统的可扩展性。 【论文关键词】大数据;日志采集;MapReduce;日志分析;IP统计 Research on network log analysis system based on big data technology REN Kai1, DENG Wu2, YU Yan3 Abstract: There is a calculation bottleneck when traditional log analysis technology processes the massive data. To solve this problem, a log analysis solution based on big data technology is proposed in this paper. In this solution, the log file storage, analysis and mining tasks will be decomposed on multiple computers. A layered network log analysis system was established, in which Syslog fulfils the log acquisition, Hadoop is responsible for distributed storage and parallel calculation, and IP statistics algorithm is realized with MapReduce technology. The experimental results show that the use of big data technology in data?intensive computation can significantly improve the execution efficiency of algorithms and scalability of the system. Keywords: big data; log acquisition; MapReduce; log analysis; IP statistics 0引言 随着信息化建设的多年发展和逐层推进,大型企业在内部网络中积累了大量的软硬件资源,包括:交换机、路由器、防火墙、PC服务器、Unix小型机、各类业务应用系统、中间件、数据库等。这些计算机设备和网络设备持续不断地记录了大量的日志。日志文件作为硬件设备、系统和用户行为的记录工具,在监控网络运行情况、调查设备故障、保护系统安全等方面有着举足轻重的作用[1]。通过分析日志文件,能够获取有关设备故障、用户异常行为、网络运行状况等信息,有利于及时处置网络安全事件和软硬件故障,保证网络的稳定性和安全性。 在大型企业的内部网络中,日志源众多、格式不一、体量庞大,长期存储的数据量可达TB或者PB级别。传统的日志分析系统使用单机技术处理海量数据,在存储和计算两方面都遇到了瓶颈。为了解决这些问题,近年来大数据技术被广泛应用。作为GoogleMapReduce[2]和GFS[3]技术的开源实现,ApacheHadoop集成了数据存储[4]、数据处理、系统管理等功能,已经成为大数据领域事实上的标准[5],特别适合于大数据的搜索、挖掘、分析和机器学习[6]。 本文提出分层的网络日志分析系统,并详述了日志采集流程和实现方案,之后提出了一种基于MapReduce编程模型的IP统计算法,最后进行算法实验和效果分析。实验证明,基于大数据的日志分析技术具有更好的时效性和可扩展性。 1网络日志分析系统 1.1功能架构 在大数据系统中,日志是广泛使用的数据采集方法之一[7]。它具有4V特征[8]:Volume,数据体量巨大;Variety,数据类型多样;Velocity,数据生成快速;Value,数据价值大但密度低。为了应对日志的大数据特性,结合日志数据的存储和分析流程,本文给出网络日志分析系统的分层架构,由日志源层、采集层、存储层、业务层、显示层组成,如图1所示。 图1分层的网络日志分析系统 日志源层:由企业内网中的计算机软硬件和网络设备构成,它们源源不断的产生各种日志记录。 采集层:由一个或多个日志采集服务器构成,主要完成日志记录的接收和存储。由于HDFS无法有效处理大量小文件,日志服务器需要将较小的日志文件归档合并成大文件后,再发送给存储层。 存储层:存储层负责对原始日志和统计分析结果进行分布式存储。它的底层采用HDFS文件系统,配置海量的存储空间;dfs.replication参数一般设置为3(也无需设置更大),保持数据的多个副本,这样能够可靠、持久的存储非结构化数据。基于HDFS的HBase用于存储结构化和半结构化数据,作为GoogleBigtable[9]的开源实现,它的列式存储特性能向上层提供更好的并行计算支持。原始日志主要存储到HDFS中,统计分析结果既可以存入HDFS也可以存入HBase中,HBase在满足大数据存储的同时,能够提供低延迟的数据访问。 业务层:由各种日志分析程序构成,主要解决日志数据如何统计分析的问题。根据统计分析作业定制的功能需求,主要包括三种形式:MapReduce作业、Streaming作业和Hive作业。为了利用云计算并行执行的特点,传统的数据挖掘算法(如统计、归并规则、分类、聚类)必须使用MapReduce编程模型重新设计实现(称为MapReduce化)。Steaming作业可以使用Python、awk等语言开发MapReduce程序。Hive是Facebook开发的构建在HDFS之上的数据仓库应用,它提供类似于SQL的HiveQL(HiveQueryLanguage)查询分析功能,经过对HiveQL语句进行解析、转换、优化,最终生成多个MapReduce任务运行,提供部分与传统RDBMS一样的表格查询特性和分布式计算特性,使用者不用开发程序即可完成一些即查即用的临时统计分析任务。 显示层:对业务层的处理结果进行再处理并通过界面显示。业务层的处理结果仍然存放在Hadoop集群中(HDFS或HBase),需要进行提取、分析、转换,最终以图、表、文字等形式展现到前端页面。 日志数据的异地多备份存储和管理功能由日志源层、采集层、存储层完成;日志分析和数据挖掘功能由存储层、业务层、显示层完成。存储层和业务层依托Hadoop平台实现分布式存储和并行计算,物理形态采用Master/Slave工作结构。 1.2日志采集与存储 大型企业的内网中存在各类软硬件设备,这些设备每天产生大量日志,日志种类多样、格式不一、存储分散。有些设备以队列模式处理日志文件,受限于文件大小,旧记录会被新纪录覆盖;如果出现磁盘损坏、病毒、木马攻击等意外事件,也有可能导致日志数据丢失;日志的分散存放使得管理员需要反复登录不同的系统才能了解设备的运行状况,严重影响工作效率,网络规模较大、设备较多时,监控工作几乎无法完成。 为了解决上述问题,同时考虑到安全性、可靠性、便捷性,日志采集层需要将所有日志文件汇总、统一存储、妥善保管,并能为统计、分析、查询等上层业务提供便利。本系统采用Syslog日志服务器完成日志数据的采集与存储功能。 Syslog日志系统是加州大学伯克利分校BSDUnix的日志工业标准协议[10]。绝大部分计算机系统和硬件设备都支持Syslog协议,许多日志函数库(如Log4j)和第三方软件(如Tomcat)也已采纳Syslog协议。Syslog协议支持纯文本的标准日志格式,对于设备发生的一次事件,Syslog产生一行记录,它使用UDP传输协议,通过默认的514端口,将设备的日志数据推送到远端的日志服务器,日志服务器接收日志数据并写入文件系统。 绝大部分的日志源设备使用Syslog协议不需要安装软件,只须进行简单配置: (1)Unix/Linux系统在“/etc/syslog.conf”文件中配置syslog日志服务器的IP地址; (2)网络设备(交换机、路由器)的日志一般都能支持Syslog协议,只要打开日志模块的远端发送功能,正确配置日志服务器的IP地址; (3)安全设备(如防火墙)也都采用Syslog协议,开启syslog功能并设置日志服务器IP地址即可; (4)Windows系统需要借助第三方软件Evtsys完成日志转发功能。 通过设置一个Syslog日志服务器,可以将不同设备发送的日志,统一汇总到一个独立的位置,并进行进一步的清洗、分类、统一格式等预处理操作,当需要统计、分析日志时,可以很快地推送到HDFS中,作为业务层的输入数据。 2并行日志分析算法 DoS及DDoS攻击会使服务器高负荷运转,最终导致正常服务瘫痪。对服务器的访问日志中各IP地址的请求次数进行统计,获取请求次数频繁的IP地址是检测攻击源、防御攻击的有效方法。服务器的访问日志包含较多数据信息,日志文件通常达到GB数量级,传统的单机模式统计算法时效性很差。这里借助于MapReduce并行计算的特点,将传统单机算法改进为并行算法,称之为基于MapReduce的IP统计算法(IPStatisticsbaseMapReduce,IPStats?MR)。 日志数据以文件形式存入HDFS,Map函数对每一行日志数据进行分析,提取申请访问服务器的源IP,输出的Key/Value是:SourceIP/1。Reduce的输入是相同的SourceIP,将其累加,输出的Key/Value是:SourceIP/n,它表示同一个IP对服务器的请求次数。IPStats?MR算法步骤如下: |