陳 飛,艾中良
(華北計算技術研究所,北京 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-),男,研究員級高級工程師,主要研究方向:網格計算、信息共享及信息安全。