陳 飛,艾中良
(華北計(jì)算技術(shù)研究所,北京 100083)
基于Flume的分布式日志采集分析系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
陳 飛,艾中良
(華北計(jì)算技術(shù)研究所,北京 100083)
互聯(lián)網(wǎng)的迅猛發(fā)展以及大數(shù)據(jù)相關(guān)技術(shù)的興起,使得日志數(shù)據(jù)的規(guī)模日益劇增,給已有的日志采集及分析系統(tǒng)帶來了挑戰(zhàn);同時(shí)針對(duì)互聯(lián)網(wǎng)安全的攻擊活動(dòng)也層出不窮,如何在海量的日志中及時(shí)提取有效的信息以為企業(yè)安全提供信息支撐,也給現(xiàn)有的分析系統(tǒng)提出了新的需求。本文結(jié)合使用Flume、Elasticsearch以及Kibana等技術(shù)手段提出了一種分布式的日志采集分析系統(tǒng),從系統(tǒng)設(shè)計(jì)和架構(gòu)等方面提出了新的解決思路,并針對(duì)Nginx的訪問日志進(jìn)行了實(shí)時(shí)采集和分析及展示,完成了原型系統(tǒng)的實(shí)現(xiàn),實(shí)驗(yàn)證明,基于Flume的分布式的日志采集分析系統(tǒng)方案具有可行性。
信息安全;日志采集;Flume;Elasticsearch;Kibana
本文著錄格式:陳飛,艾中良. 基于Flume的分布式日志采集分析系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件,2016,37(12):82-88
互聯(lián)網(wǎng)的快速發(fā)展,尤其是近年來移動(dòng)互聯(lián)網(wǎng)的崛起及大數(shù)據(jù)技術(shù)的迅猛發(fā)展,導(dǎo)致了日志數(shù)據(jù)日益劇增[1],這些日志數(shù)據(jù)具有體量巨大、種類繁多、價(jià)值密度低以及處理速度快等特點(diǎn)[2]。海量日志數(shù)據(jù)的出現(xiàn)給互聯(lián)網(wǎng)公司和企業(yè)帶來了巨大挑戰(zhàn)[3],一方面海量數(shù)據(jù)的出現(xiàn)對(duì)企業(yè)和單位現(xiàn)有的日志采集系統(tǒng)造成了沖擊,傳統(tǒng)的日志采集方案不足以支撐現(xiàn)有大規(guī)模數(shù)據(jù)量,在面對(duì)各類型數(shù)據(jù)處理時(shí)不夠靈活;另一方面,當(dāng)前互聯(lián)網(wǎng)上的網(wǎng)絡(luò)攻擊日益頻繁,企業(yè)安全系統(tǒng)受到嚴(yán)重的挑戰(zhàn),網(wǎng)絡(luò)安全形勢(shì)嚴(yán)峻[4],海量日志數(shù)據(jù)的出現(xiàn)會(huì)將極少有用的數(shù)據(jù)湮沒。建立建立擴(kuò)展性高[5]、適應(yīng)性強(qiáng)、穩(wěn)定性好的日志采集分析系統(tǒng)至關(guān)重要,一方面滿足大規(guī)模數(shù)據(jù)的采集及處理,另一方面通過建立實(shí)時(shí)的日志分分析、展示平臺(tái)將各類應(yīng)用服務(wù)日志數(shù)據(jù)的實(shí)時(shí)趨勢(shì)及當(dāng)前狀況及時(shí)展示出來,便于及時(shí)掌握公司內(nèi)部系統(tǒng)的狀態(tài),為企業(yè)IT系統(tǒng)的管理和安全分析提供保障和有效支撐。
本文基于開源日志收集系統(tǒng)Apache Flume以及開源搜索引擎ElasticSearch設(shè)計(jì)并實(shí)現(xiàn)一個(gè)基于海量數(shù)據(jù)的分布式日志采集分析原型系統(tǒng),該系統(tǒng)實(shí)現(xiàn)對(duì)系統(tǒng)WEB服務(wù)日志的采集,分析和展示,具備實(shí)時(shí)搜索功能。實(shí)驗(yàn)證明了系統(tǒng)設(shè)計(jì)和方案具備可行性。
1.1 Flume
Flume[6]是一個(gè)分布式的海量日志聚合系統(tǒng),支持?jǐn)?shù)據(jù)發(fā)送方,數(shù)據(jù)接收方的數(shù)據(jù)定制,同時(shí)具備數(shù)據(jù)預(yù)處理的能力。目前Flume有Flume-OG和Flume-NG兩個(gè)版本,F(xiàn)lume-NG是在Flume-OG的基礎(chǔ)上經(jīng)重構(gòu)所形成的更具適應(yīng)性的版本,使用方便簡(jiǎn)單,適應(yīng)各種日志收集,并支持FailOver和負(fù)載均衡機(jī)制。其主要架構(gòu)如圖1所示:
Flume以agent為最小的獨(dú)立運(yùn)行單位,每一個(gè)agent即是一個(gè)小的JVM。Flume主要由不同類型的Source、Channel、Sink組件組成,不同類型組件之間可以自由組合從而構(gòu)建復(fù)雜性的系統(tǒng)。Source組件實(shí)現(xiàn)對(duì)原始日志的采集接收,Channel組件負(fù)責(zé)為Source和Sink組件的對(duì)接提供臨時(shí)的緩存通道,Sink組件則負(fù)責(zé)將收集到的日志下放到存儲(chǔ)、分析等系統(tǒng)中,以實(shí)現(xiàn)日志的最終交付。Flume具備高可擴(kuò)展性,支持多級(jí)流處理,可根據(jù)不同業(yè)務(wù)需求及功能需求對(duì)Flume的agent組件進(jìn)行不同方式的組合,從而構(gòu)建出耦合度低、可用性高、擴(kuò)展性強(qiáng)的強(qiáng)壯的采集系統(tǒng)。如下圖2即是復(fù)雜的Flume流,通過Channle、Sink和不同的分析存儲(chǔ)系統(tǒng)及Source組合完成復(fù)雜的采集分析任務(wù)。1.2 ElasticSearch
圖1 Flume基本架構(gòu)
ElasticSearch[7]是一個(gè)基于Lucene的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于RESTful web接口,是當(dāng)前流行的企業(yè)級(jí)搜索引擎。常被用于云計(jì)算中,具有實(shí)時(shí)搜索、穩(wěn)定、可靠、快速、安裝方便[8]等特點(diǎn)。其典型的調(diào)用API接口如下:
1.2.1 創(chuàng)建索引
//通過json文檔建立索引
1.2.2 更新索引1
1.2.3 查詢索引
1.3 Kibana
Kibana[9]是一個(gè)與Elasticsearch配合工作的開源的數(shù)據(jù)分析和圖形化展示的平臺(tái)。使用Kibana可對(duì)Elasticsearch索引中存儲(chǔ)的數(shù)據(jù)進(jìn)行查找、查看,可以方便地進(jìn)行高級(jí)數(shù)據(jù)分析和繪制各種圖表等。Kibana在分析海量數(shù)據(jù)時(shí)非常方便,基于Web界面可以快速的創(chuàng)建和分享在Elasticsearch的查詢結(jié)果,實(shí)時(shí)顯示Elasticsearch查詢動(dòng)態(tài)。
基于開源日志采集工具Flume的分布式日志采集系統(tǒng),圍繞業(yè)務(wù)數(shù)據(jù)海量、高可擴(kuò)展、高可靠性等需求設(shè)計(jì)開發(fā),為海量數(shù)據(jù)分析提供基礎(chǔ)數(shù)據(jù)支撐。支持海量級(jí)業(yè)務(wù)數(shù)據(jù)采集、分布式處理、Failover與負(fù)載均衡;提供與多種類型數(shù)據(jù)源對(duì)接的API,部署靈活,擴(kuò)展性強(qiáng)。分布式日志采集系統(tǒng)由采集、管理、分析存儲(chǔ)三大模塊組成。
圖3 分布式日志采集分析系統(tǒng)
系統(tǒng)采用分層式數(shù)據(jù)采集方案,針對(duì)不同業(yè)務(wù)需求在業(yè)務(wù)服務(wù)器上部署采集agent,數(shù)據(jù)經(jīng)采集管理中心實(shí)現(xiàn)數(shù)據(jù)的聚合及分發(fā),實(shí)現(xiàn)數(shù)據(jù)采集與數(shù)據(jù)處理邏輯解耦,使不同業(yè)務(wù)之間數(shù)據(jù)采集邏輯相互分離,便于管理,系統(tǒng)可擴(kuò)展性強(qiáng),支持負(fù)載均衡與故障切換機(jī)制,為海量數(shù)據(jù)的采集提供穩(wěn)定支撐,其實(shí)現(xiàn)方案如圖4所示。
其中采集模塊負(fù)責(zé)對(duì)業(yè)務(wù)數(shù)據(jù)的收集工作,由對(duì)應(yīng)業(yè)務(wù)的采集agent完成;管理模塊負(fù)責(zé)接收采集層的數(shù)據(jù),并將數(shù)據(jù)根據(jù)不同的路由策略下發(fā)至存儲(chǔ)模塊中供分布式文件系統(tǒng)及分布式消息系統(tǒng)使用,此工作由管理層的各管理agent完成,各管理agent與采集agent之間通過交叉?zhèn)鬏攲?shí)現(xiàn)負(fù)載均衡與Failover,保證數(shù)據(jù)傳輸?shù)目煽啃裕环治龃鎯?chǔ)模塊則負(fù)責(zé)提供永久或者臨時(shí)的數(shù)據(jù)存儲(chǔ)服務(wù)、或者將數(shù)據(jù)流導(dǎo)向其他服務(wù),主要由分布式文件系統(tǒng)、分布式實(shí)時(shí)索引系統(tǒng)等組成。
根據(jù)系統(tǒng)設(shè)計(jì)及項(xiàng)目需求,本文完成對(duì)WEB服務(wù)日志的采集并根據(jù)需求對(duì)日志中的字段進(jìn)行索引,最后通過WEB界面對(duì)Nginx的訪問日志進(jìn)行實(shí)時(shí)的展示。
3.1 Nginx日志
Nginx[10]是一款輕量級(jí)的Web服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開發(fā),供俄國(guó)大型的入口網(wǎng)站及搜索引擎Rambler,其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),目前在主流WEB服務(wù)器排名中位居第二僅次于Apache。其日志主要由access. log和error.log構(gòu)成,其中error.log日志記錄服務(wù)器錯(cuò)誤日志,而access.log主要記錄了用戶的訪問,主要包括用戶的ip地址、訪問的時(shí)間、請(qǐng)求頁(yè)面以及客戶端瀏覽器信息等,其格式如下:
圖4 采集方案
3.2 Flume配置
Flume主要完成對(duì)Nginx服務(wù)器中access.log日志的采集和分析,從而能夠?qū)⑷罩緟R總到Elasticsearch并能形成實(shí)時(shí)索引信息供展示和查詢,其核心配置如下:
source部分的配置主要為了對(duì)Nginx的access. log日志進(jìn)行采集并對(duì)其進(jìn)行預(yù)處理,通過定義攔截器interceptors[11]對(duì)日志進(jìn)行分割預(yù)處理其中i1規(guī)則主要通過正則表達(dá)式對(duì)日志進(jìn)行格式化處理并將對(duì)應(yīng)匹配到的字段進(jìn)行變量賦值。上述配置中將(\d+\.\d+\.\d+\.\d+)正則表達(dá)式匹配到的ip地址賦值給visit_ip變量,(\d+/\w+/\d+\:\d+\:\d+\:\ d+)正則表達(dá)式匹配到的時(shí)間賦值給visit_time變量。
sink部分的配置主要為了將格式化之后的數(shù)據(jù)段成功導(dǎo)入到Elasticsearch集群中并建立相關(guān)索引,上述配置使用Flume內(nèi)置的ElasticSearchLogStash-EventSerializer進(jìn)行了序列化過程,建立了名稱為nginx_log開頭,類型為nginx_doc的索引。
3.3 Kibana定制
Kibana可通過插件形式安裝到Elasticsearch中,安裝完成后可通過手動(dòng)定制或者直接導(dǎo)入模板的方式對(duì)展示界面進(jìn)行定制以實(shí)現(xiàn)對(duì)所需要的條目信息以及顯示界面進(jìn)行個(gè)性化定制[12],模板以json格式進(jìn)行定義,由于行數(shù)較多,給出部分配置如下所示:
通過多客戶端對(duì)Nginx服務(wù)器的訪問測(cè)試,可以在Elasticsearch服務(wù)器集群中看到對(duì)應(yīng)實(shí)時(shí)索引的生成如下圖5所示。
其對(duì)應(yīng)的每個(gè)索引的詳細(xì)信息為如下json文本所示,顯示了之前在Flume中定義的索引名稱、索引類型、索引對(duì)應(yīng)的文本以及訪問地址visit_ip、visit_time等信息,表明索引已經(jīng)成功生成。
圖5 索引展示
最后在Kibana平臺(tái)上可以看到各訪問客戶端對(duì)服務(wù)器的訪問情況以及變化趨勢(shì),簡(jiǎn)單直觀,并且可以根據(jù)需要自行進(jìn)行定制,圖6、圖7和圖8分別展示了各時(shí)間段內(nèi)Nginx服務(wù)器的總體訪情況,各客戶端的訪問情況,統(tǒng)計(jì)圖以及詳細(xì)的訪問數(shù)據(jù)等數(shù)據(jù)信息。
圖6 Nginx總體訪問量
圖7 客戶端的訪問量
圖8 餅狀統(tǒng)計(jì)圖和柱狀統(tǒng)計(jì)圖
本論文以“基于大數(shù)據(jù)平臺(tái)的企業(yè)數(shù)據(jù)中心”項(xiàng)目為背景,實(shí)現(xiàn)了基于Flume的分布式的數(shù)據(jù)日志采集分析系統(tǒng)的系統(tǒng)設(shè)計(jì)及實(shí)現(xiàn),結(jié)合ElasticSearch及其插件Kibana完成了對(duì)Nginx服務(wù)器訪問日志的簡(jiǎn)單格式化處理及近實(shí)時(shí)的索引及展示,完成了從外部服務(wù)器日志到采集系統(tǒng)再到分析處理的簡(jiǎn)單流程,系統(tǒng)具有擴(kuò)展性強(qiáng),適應(yīng)海量數(shù)據(jù)系統(tǒng),高可靠性等優(yōu)勢(shì),為項(xiàng)目的后期實(shí)現(xiàn)提供了技術(shù)儲(chǔ)備。本文提出了一種新型適應(yīng)于海量日志的采集系統(tǒng)解決方案,目前僅僅基于Flume和ElasticSearch內(nèi)置的各組件和序列化接口實(shí)現(xiàn)對(duì)Nginx日志的解析,完成了整個(gè)原型系統(tǒng)的研制,在遇到復(fù)雜的日志數(shù)據(jù)分析功能時(shí)可以通過對(duì)序列化源碼進(jìn)行修改以滿足不同的業(yè)務(wù)需求,后續(xù)也會(huì)基于此點(diǎn)出發(fā)對(duì)系統(tǒng)進(jìn)行改造優(yōu)化。
圖9 詳細(xì)的數(shù)據(jù)段信息
[1] 宋密, 王勁松. 基于Flume的網(wǎng)絡(luò)安全可視化系統(tǒng)[J]. 天津理工大學(xué)學(xué)報(bào), 2015, 02: 38-42.
[2] 王正也, 李書芳. 一種基于Hive日志分析的大數(shù)據(jù)存儲(chǔ)優(yōu)化方法[J]. 軟件, 2014, 35(11): 94-100.
[3] 江三鋒, 王元亮. 基于Hive的海量web日志分析系統(tǒng)設(shè)計(jì)研究[J]. 軟件, 2015, 36(4): 93-96.
[4] 金松昌, 方濱興, 楊樹強(qiáng), 賈焰. 基于Hadoop的網(wǎng)絡(luò)安全日志分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[A]. 中國(guó)計(jì)算機(jī)學(xué)會(huì)計(jì)算機(jī)安全專業(yè)委員會(huì). 全國(guó)計(jì)算機(jī)安全學(xué)術(shù)交流會(huì)論文集·第二十五卷[C]. 中國(guó)計(jì)算機(jī)學(xué)會(huì)計(jì)算機(jī)安全專業(yè)委員會(huì), 2010: 6.
[5] 吳茜媛, 鄭慶華, 王萍. 一種可擴(kuò)展的網(wǎng)絡(luò)用戶行為日志獲取方法[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的大日志實(shí)時(shí)搜索的軟件集成方案研究[J]. 吉林師范大學(xué)學(xué)報(bào)(自然科學(xué)版), 2014, 01: 85-87.
[9] Kibana[OL]. https://www.elastic.co/products/kibana.
[10] 苗澤. Nginx高性能Web服務(wù)器詳解[M]. 北京: 電子工業(yè)出版社, 2013.
[11] Hari Shreedharan. Flume: 構(gòu)建高可用、可擴(kuò)展的海量日志采集系統(tǒng)[M]. 馬延輝. 北京: 中國(guó)工信出版集團(tuán)電子工業(yè)出版社, 2015.
[12] Rafaol Kuc, Marek Rogozinski. 深入理解ElasticSearch[M].張世武. 北京: 機(jī)械工業(yè)出版社, 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-),男,研究員級(jí)高級(jí)工程師,主要研究方向:網(wǎng)格計(jì)算、信息共享及信息安全。