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