陈 飞,艾中良
(华北计算技术研究所,北京 100083)
基于Flume的分布式日志采集分析系统设计与实现
陈 飞,艾中良
(华北计算技术研究所,北京 100083)
互联网的迅猛发展以及大数据相关技术的兴起,使得日志数据的规模日益剧增,给已有的日志采集及分析系统带来了挑战;同时针对互联网安全的攻击活动也层出不穷,如何在海量的日志中及时提取有效的信息以为企业安全提供信息支撑,也给现有的分析系统提出了新的需求。本文结合使用Flume、Elasticsearch以及Kibana等技术手段提出了一种分布式的日志采集分析系统,从系统设计和架构等方面提出了新的解决思路,并针对Nginx的访问日志进行了实时采集和分析及展示,完成了原型系统的实现,实验证明,基于Flume的分布式的日志采集分析系统方案具有可行性。
信息安全;日志采集;Flume;Elasticsearch;Kibana
本文著录格式:陈飞,艾中良. 基于Flume的分布式日志采集分析系统设计与实现[J]. 软件,2016,37(12):82-88
互联网的快速发展,尤其是近年来移动互联网的崛起及大数据技术的迅猛发展,导致了日志数据日益剧增[1],这些日志数据具有体量巨大、种类繁多、价值密度低以及处理速度快等特点[2]。海量日志数据的出现给互联网公司和企业带来了巨大挑战[3],一方面海量数据的出现对企业和单位现有的日志采集系统造成了冲击,传统的日志采集方案不足以支撑现有大规模数据量,在面对各类型数据处理时不够灵活;另一方面,当前互联网上的网络攻击日益频繁,企业安全系统受到严重的挑战,网络安全形势严峻[4],海量日志数据的出现会将极少有用的数据湮没。建立建立扩展性高[5]、适应性强、稳定性好的日志采集分析系统至关重要,一方面满足大规模数据的采集及处理,另一方面通过建立实时的日志分分析、展示平台将各类应用服务日志数据的实时趋势及当前状况及时展示出来,便于及时掌握公司内部系统的状态,为企业IT系统的管理和安全分析提供保障和有效支撑。
本文基于开源日志收集系统Apache Flume以及开源搜索引擎ElasticSearch设计并实现一个基于海量数据的分布式日志采集分析原型系统,该系统实现对系统WEB服务日志的采集,分析和展示,具备实时搜索功能。实验证明了系统设计和方案具备可行性。
1.1 Flume
Flume[6]是一个分布式的海量日志聚合系统,支持数据发送方,数据接收方的数据定制,同时具备数据预处理的能力。目前Flume有Flume-OG和Flume-NG两个版本,Flume-NG是在Flume-OG的基础上经重构所形成的更具适应性的版本,使用方便简单,适应各种日志收集,并支持FailOver和负载均衡机制。其主要架构如图1所示:
Flume以agent为最小的独立运行单位,每一个agent即是一个小的JVM。Flume主要由不同类型的Source、Channel、Sink组件组成,不同类型组件之间可以自由组合从而构建复杂性的系统。Source组件实现对原始日志的采集接收,Channel组件负责为Source和Sink组件的对接提供临时的缓存通道,Sink组件则负责将收集到的日志下放到存储、分析等系统中,以实现日志的最终交付。Flume具备高可扩展性,支持多级流处理,可根据不同业务需求及功能需求对Flume的agent组件进行不同方式的组合,从而构建出耦合度低、可用性高、扩展性强的强壮的采集系统。如下图2即是复杂的Flume流,通过Channle、Sink和不同的分析存储系统及Source组合完成复杂的采集分析任务。1.2 ElasticSearch
图1 Flume基本架构
ElasticSearch[7]是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,是当前流行的企业级搜索引擎。常被用于云计算中,具有实时搜索、稳定、可靠、快速、安装方便[8]等特点。其典型的调用API接口如下:
1.2.1 创建索引
//通过json文档建立索引
1.2.2 更新索引1
1.2.3 查询索引
1.3 Kibana
Kibana[9]是一个与Elasticsearch配合工作的开源的数据分析和图形化展示的平台。使用Kibana可对Elasticsearch索引中存储的数据进行查找、查看,可以方便地进行高级数据分析和绘制各种图表等。Kibana在分析海量数据时非常方便,基于Web界面可以快速的创建和分享在Elasticsearch的查询结果,实时显示Elasticsearch查询动态。
基于开源日志采集工具Flume的分布式日志采集系统,围绕业务数据海量、高可扩展、高可靠性等需求设计开发,为海量数据分析提供基础数据支撑。支持海量级业务数据采集、分布式处理、Failover与负载均衡;提供与多种类型数据源对接的API,部署灵活,扩展性强。分布式日志采集系统由采集、管理、分析存储三大模块组成。
图3 分布式日志采集分析系统
系统采用分层式数据采集方案,针对不同业务需求在业务服务器上部署采集agent,数据经采集管理中心实现数据的聚合及分发,实现数据采集与数据处理逻辑解耦,使不同业务之间数据采集逻辑相互分离,便于管理,系统可扩展性强,支持负载均衡与故障切换机制,为海量数据的采集提供稳定支撑,其实现方案如图4所示。
其中采集模块负责对业务数据的收集工作,由对应业务的采集agent完成;管理模块负责接收采集层的数据,并将数据根据不同的路由策略下发至存储模块中供分布式文件系统及分布式消息系统使用,此工作由管理层的各管理agent完成,各管理agent与采集agent之间通过交叉传输实现负载均衡与Failover,保证数据传输的可靠性;分析存储模块则负责提供永久或者临时的数据存储服务、或者将数据流导向其他服务,主要由分布式文件系统、分布式实时索引系统等组成。
根据系统设计及项目需求,本文完成对WEB服务日志的采集并根据需求对日志中的字段进行索引,最后通过WEB界面对Nginx的访问日志进行实时的展示。
3.1 Nginx日志
Nginx[10]是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler,其特点是占有内存少,并发能力强,目前在主流WEB服务器排名中位居第二仅次于Apache。其日志主要由access. log和error.log构成,其中error.log日志记录服务器错误日志,而access.log主要记录了用户的访问,主要包括用户的ip地址、访问的时间、请求页面以及客户端浏览器信息等,其格式如下:
图4 采集方案
3.2 Flume配置
Flume主要完成对Nginx服务器中access.log日志的采集和分析,从而能够将日志汇总到Elasticsearch并能形成实时索引信息供展示和查询,其核心配置如下:
source部分的配置主要为了对Nginx的access. log日志进行采集并对其进行预处理,通过定义拦截器interceptors[11]对日志进行分割预处理其中i1规则主要通过正则表达式对日志进行格式化处理并将对应匹配到的字段进行变量赋值。上述配置中将(\d+\.\d+\.\d+\.\d+)正则表达式匹配到的ip地址赋值给visit_ip变量,(\d+/\w+/\d+\:\d+\:\d+\:\ d+)正则表达式匹配到的时间赋值给visit_time变量。
sink部分的配置主要为了将格式化之后的数据段成功导入到Elasticsearch集群中并建立相关索引,上述配置使用Flume内置的ElasticSearchLogStash-EventSerializer进行了序列化过程,建立了名称为nginx_log开头,类型为nginx_doc的索引。
3.3 Kibana定制
Kibana可通过插件形式安装到Elasticsearch中,安装完成后可通过手动定制或者直接导入模板的方式对展示界面进行定制以实现对所需要的条目信息以及显示界面进行个性化定制[12],模板以json格式进行定义,由于行数较多,给出部分配置如下所示:
通过多客户端对Nginx服务器的访问测试,可以在Elasticsearch服务器集群中看到对应实时索引的生成如下图5所示。
其对应的每个索引的详细信息为如下json文本所示,显示了之前在Flume中定义的索引名称、索引类型、索引对应的文本以及访问地址visit_ip、visit_time等信息,表明索引已经成功生成。
图5 索引展示
最后在Kibana平台上可以看到各访问客户端对服务器的访问情况以及变化趋势,简单直观,并且可以根据需要自行进行定制,图6、图7和图8分别展示了各时间段内Nginx服务器的总体访情况,各客户端的访问情况,统计图以及详细的访问数据等数据信息。
图6 Nginx总体访问量
图7 客户端的访问量
图8 饼状统计图和柱状统计图
本论文以“基于大数据平台的企业数据中心”项目为背景,实现了基于Flume的分布式的数据日志采集分析系统的系统设计及实现,结合ElasticSearch及其插件Kibana完成了对Nginx服务器访问日志的简单格式化处理及近实时的索引及展示,完成了从外部服务器日志到采集系统再到分析处理的简单流程,系统具有扩展性强,适应海量数据系统,高可靠性等优势,为项目的后期实现提供了技术储备。本文提出了一种新型适应于海量日志的采集系统解决方案,目前仅仅基于Flume和ElasticSearch内置的各组件和序列化接口实现对Nginx日志的解析,完成了整个原型系统的研制,在遇到复杂的日志数据分析功能时可以通过对序列化源码进行修改以满足不同的业务需求,后续也会基于此点出发对系统进行改造优化。
图9 详细的数据段信息
[1] 宋密, 王劲松. 基于Flume的网络安全可视化系统[J]. 天津理工大学学报, 2015, 02: 38-42.
[2] 王正也, 李书芳. 一种基于Hive日志分析的大数据存储优化方法[J]. 软件, 2014, 35(11): 94-100.
[3] 江三锋, 王元亮. 基于Hive的海量web日志分析系统设计研究[J]. 软件, 2015, 36(4): 93-96.
[4] 金松昌, 方滨兴, 杨树强, 贾焰. 基于Hadoop的网络安全日志分析系统的设计与实现[A]. 中国计算机学会计算机安全专业委员会. 全国计算机安全学术交流会论文集·第二十五卷[C]. 中国计算机学会计算机安全专业委员会, 2010: 6.
[5] 吴茜媛, 郑庆华, 王萍. 一种可扩展的网络用户行为日志获取方法[J]. 软件, 2014, 35(10): 21-25.
[6] Apache Flume[OL]. http://flume.apache.org/FlumeUserGuide.html. [7] Elasticsearch[OL]. https://www.elastic.co/products/elasticsearch.
[8] 白俊, 郭贺彬. 基于ElasticSearch的大日志实时搜索的软件集成方案研究[J]. 吉林师范大学学报(自然科学版), 2014, 01: 85-87.
[9] Kibana[OL]. https://www.elastic.co/products/kibana.
[10] 苗泽. Nginx高性能Web服务器详解[M]. 北京: 电子工业出版社, 2013.
[11] Hari Shreedharan. Flume: 构建高可用、可扩展的海量日志采集系统[M]. 马延辉. 北京: 中国工信出版集团电子工业出版社, 2015.
[12] Rafaol Kuc, Marek Rogozinski. 深入理解ElasticSearch[M].张世武. 北京: 机械工业出版社, 2016.
Design and Implementation of Distributed Log Collection and Analysis System Based on Flume
CHEN Fei, AI Zhong-liang
(North China Institute of Computing Technology, Beijing 100083, Chin)
The rapid development of the Internet and the rise of big data technology, making the scale of the log data increasing rapidly, bring challenges to the current log collection and analysis system. At the same time, the Internet security attacks become more and more severely, how to extract effective information from massive logs to provide supports for enterprise security in time has also bring the new requirements to the current system. This paper proposes a distributed log collection and analysis system based on Flume, Elasticsearch and Kibana, and proposes a new solution from the aspects of system design and architecture, In addition it has also done a successful experiment based on Nginx's access logs. The experiment has proved that the method based on Flume is feasible.
Information Security; Log collection; Flume; Elasticsearch; Kibana
TP311.52
A
10.3969/j.issn.1003-6970.2016.12.019
陈飞(1991-),男,研究生,主要研究方向:信息安全;艾中良(1971-),男,研究员级高级工程师,主要研究方向:网格计算、信息共享及信息安全。