劉 鍇
(安徽農業大學 現代教育信息中心, 安徽 合肥 230036)
海量數據日志系統架構分析與應用
劉 鍇
(安徽農業大學 現代教育信息中心, 安徽 合肥 230036)
介紹了多種分布式日志系統的架構和數據處理流程,以ELK日志系統(即Elastic search,Logstash和Kibana)為例,介紹ELK在不同場景中的架構特點以及應用案例。
日志; 分布式; ELK; 架構
日志,通常是指以文本模式記錄的數據,該數據反映了系統運行過程、狀態以及各種關鍵信息。對每個系統來說,日志都是很重要的記錄信息。隨著信息化的飛速發展,傳統的單一節點的日志系統已經無法記錄指數級增長的日志數據,更不用說分析和處理這些數據了。目前,利用分布式平臺實現的日志系統逐漸成為日志系統家族中的主力軍,他們運行在多個節點組成的集群中,通過算法統一調度,可以實現海量日志的準實時處理。文中將詳細介紹分布式日志系統的幾種系統架構,并以ELK日志系統(即Elastic search,Logstash和Kibana)為例,介紹其不同場景下的部署架構,最后給出ELK的實際應用案例。
所有信息系統平臺每天會產生大量的日志,通常以流式數據為主,包括用戶訪問記錄、數據庫操作記錄等,當數據量達到一定的數量級,傳統的單節點系統已經無法完成檢索及分析任務,必須使用分布式的日志系統對他們進行處理。一般而言,這些系統需要具有以下特征:
1)構建應用系統和分析系統的橋梁;
2)支持準實時的在線分析系統和類似于Hadoop之類的離線分析系統;
3)具有高可擴展性和可靠性。即:當數據量增加時,可以通過增加節點進行水平性能擴展[1];當某個或某一些節點發生故障時,只影響系統的性能,系統功能性不受影響。
目前在這一領域較為先進的系統包括cloudera的Flume、linkedin的Kafka以及facebook的Scribe等[2]。
1.1 Flume
Flume是cloudera設計開發的開源日志系統,以可靠性、可擴展性、可管理性以及功能可擴展性為設計目標,它內置的各種組件非常齊全,用戶幾乎不必進行任何額外開發即可使用。Flume采用了分層架構,由三層組成,分別為agent,collector和storage。其中,agent和collector均由兩部分組成:source和sink。source是數據來源,sink是數據去向[3]。
Flume架構如圖1所示。
1.2 Kafka
Kafka是采用scala語言編寫的開源項目,使用了多種效率優化機制,采用比較新穎的push/pull架構,更適合異構集群[4],底層采用Hadoop作為數據平臺。它實際上是一個包含producer,broker和consumer三種角色的系統。其中producer負責向某個topic發布消息,而consumer作為接收方訂閱這個topic的消息,一旦出現關于這個topic的新消息,broker負責將新消息傳遞給訂閱它的所有consumer。由此可以看出,在Kafka中,topic是組成消息的關鍵,而為了便于管理數據和進行負載均衡,每個topic又會分為多個partition。同時,Kafka也使用了zookeeper進行負載均衡[3]。

圖1 Flume架構圖
Kafka架構如圖2所示。

圖2 Kafka架構圖
1.3 Scribe
Scribe是facebook開源的日志收集系統,facebook公司內部已經大量使用Scribe系統。Screbe系統中存在一個中央存儲系統,該系統可由NFS或者分布式文件系統組成,Scribe通過各種日志源收集日志數據,寫入中央存儲系統,便于集中分析、統計和處理。它為日志的“分布式收集,統一處理”提供了一個可擴展的、高容錯的方案[5]。其架構如圖3所示。

圖3 Scribe架構圖
Scribe的架構較為簡單,主要包括三部分,分別為Scribe Agent、Scribe和存儲系統。Scribe架構的最大特點是容錯性較好,當存儲系統發生故障時,Scribe會將本地磁盤作為存儲緩沖區,將數據臨時寫在本地磁盤上,待存儲系統恢復正常后,本地磁盤中的數據會被重新加載到存儲系統中[6]。
ELK是Elasticsearch、Logstash、Kibana的簡稱,這是組成ELK的核心套件,但不是全部套件。根據應用場景的不同,搭配不同的套件,ELK可以實現不同的架構。
Elasticsearch提供日志分析中的搜集、分析、存儲數據三大功能,是整個架構中的實時全文搜索和分析引擎。它構建于Apache Lucene搜索引擎庫之上,是一套可擴展的分布式系統[7]。
Logstash是一個功能強大的工具,用來搜集、分析、過濾日志。它支持幾乎任何類型的日志,包括系統日志、錯誤日志和自定義應用程序日志。它可以從許多來源接收日志,這些來源包括 syslog、消息傳遞(例如 RabbitMQ)和JMX,它能夠以多種方式輸出數據,包括電子郵件、websockets和Elasticsearch[8]。
Kibana是用于展示日志信息的圖形界面,基于Web搜索、分析和可視化存儲在 Elasticsearch指標中的日志數據[9]。
下面將對ELK針對不同應用場景的架構進行分析。
2.1 簡單的ELK架構
這是最簡單的ELK架構,通常供學習者或者小規模集群使用。它的優點是結構簡單、搭建速度快、容易上手,可以快速了解ELK的架構組成,對搭建復雜的ELK集群提供幫助。缺點是處理能力較低,對設備資源占用較大,另外由于結構簡單,也存在數據丟失的隱患,通常在業務系統中不推薦此種架構。其架構圖如圖4所示。

圖4 簡單的ELK架構
此架構首先由Logstash分布于各個節點上搜集相關日志、數據,并經過分析、過濾后發送給遠端服務器上的Elasticsearch進行存儲。Elasticsearch將數據以分片的形式壓縮存儲并提供多種API供用戶查詢、操作。用戶亦可以更直觀地通過配置Kibana Web Portal方便的對日志查詢,并根據數據生成報表。
2.2 帶消息隊列的ELK架構
此架構在簡單ELK架構的基礎上引入消息隊列機制。其架構如圖5所示。

圖5 帶消息隊列的ELK架構
位于各個節點上的Logstash Agent先將數據/日志傳遞給Kafka(或者Redis),并將隊列中消息或數據間接傳遞給Logstash,Logstash過濾、分析后將數據傳遞給Elasticsearch存儲。最后由Kibana將日志和數據呈現給用戶。因為引入了Kafka(或者Redis),所以即使遠端Logstash server因故障停止運行,數據將會先被存儲下來,從而避免數據丟失。但這種架構也有缺點,位于中心節點的Logstash依舊存在負載過重,占用資源過多的問題。
2.3 帶Beats的ELK架構
Beats是一個代理平臺,將不同類型的數據發送到elasticsearch。Beats可以直接將數據發送到elasticsearch,也可以通過logstash將數據發送elasticsearch。引入Beats很好地解決了上述兩種架構中Logstash占用資源過多的問題。引入Beats平臺后的ELK架構如圖6所示。

圖6 帶Beats的ELK架構
Logstash-forwarder可以替代Beats平臺,但是Beats擁有更好的擴展性和靈活性。Beats有3個典型的例子:Filebeat、Topbeat、Packetbeat。Filebeat用來收集日志,Topbeat用來收集系統基礎設置數據,如CPU、內存、每個進程的統計信息,Packetbeat是一個網絡包分析工具,統計收集網絡信息。
不管采用上面哪種ELK架構,都包含了其核心組件,即Logstash、Elasticsearch 和Kibana。各系統運維中究竟該采用哪種架構,可根據現實情況和架構優劣而定。
3.1 ELK模塊組件
采用分布式架構的日志系統中,以下幾個方面是必不可少的:
1)對各個系統的監控,包括對硬件系統和軟件系統的各個組件的監控,如CPU、內存以及系統可用性等;
2)基于分布式平臺的日志集中管理和查詢;
3)基于日志信息的鼓掌查詢;
4)安全及事件日志的記錄和管理;
5)提供可視化的報表功能。
ELK組件應用于分布式系統之上,其功能模塊如圖7所示。
ELK能夠提供線上業務的準實時監控,并在業務故障時幫助快速定位原因,跟蹤分析Bug,排除故障,通過報表功能可以跟蹤業務趨勢,實現安全與合規審計,最大深度地挖掘海量日志的數據價值。同時Elasticsearch提供包括rest,java,phthon在內的多種開源API,用戶可以根據需求自行擴展開發。

圖7 ELK功能模塊
3.2 ELK應用舉例
在實際應用中,通過ELK組件Hadoop環境下的運行日志,經過篩選、過濾并存儲可用信息,從而完成對Hadoop作業運行狀態監控。ELK搜集作業運行和完成狀態進行監控,實時掌握集群狀態,了解作業完成情況,并生成報表,方便監控和查看,ELK應用舉例如圖8所示。

圖8 ELK應用舉例
ELK的數據來源可以是多種多樣的日志數據,其input plugin組件支持近50種日志類型。
Logstash配置文件有3個主要模塊:input()輸入或者說收集數據,定義數據來源;filter()對數據進行過濾、分析等操作;output()輸出。當數據源搜集到數據后,通過filter()將數據過濾整理成固定的格式,可以是JSON、grep、grok、geoip等類型。然后將整理后的數據輸出到數據庫或者直接傳遞給Elasticsearch。當數據存儲在Elasticsearch后,用戶可以通過它提供的API來進行數據檢索,如使用REST API執行curl get命令請求檢索指定數據。另外,用戶也可以使用Kibana對數據進行可視化瀏覽。Kibana還提供時間檢索功能,即可以對某一時段的數據進行查詢和生成報表。
介紹了目前各大分布式環境下的日志系統架構,并對應用廣泛、靈活性較強的ELK日志系統架構進行了詳細分析,分別闡述了不同應用環境下的ELK架構的優缺點,并給出了ELK日志系統在業務系統中的應用案例。經過實踐,ELK日志系統作為一個開源的分布式日志系統,能夠為用戶提供穩定、可靠的準實時搜索服務,并且能夠提供多種報表供用戶選擇,為用戶在故障排查、數據分析時提供幫助。
[1] 丁雪松.共享數據服務統計信息的提取與可視化研究[D].北京:中國地質大學,2012.
[2] 周昕毅.Linux集群運維平臺用戶權限管理及日志審計系統實現[D].上海:上海交通大學,2012.
[3] 呂佳.基于Elastic Search的分布式日志搜索系統設計[D].上海:復旦大學,2013.
[4] 何海剛.基于Key-Value的海量日志存儲系統設計[D].上海:復旦大學,2013.
[5] 葉斌,余陽,王會,等.大數據在MOOC中的應用分析[J].微型機與應用,2015(6):97-98.
[6] Scribe Kafka.開源日志系統比較[EB/OL].(2011-06-10)[2016-05-29].http://dongxicheng.org/search-engine/log-systems/.
[7] Serdar Yegulalp.IBM Bluemix adds graph analytics, DB management[EB/OL].(2016-02-05)[2016-05-29].http://www.tuicool.com/articles/3mEzmeA.
[8] Serdar Yegulalp.6 Splunk alternatives for log analysis[EB/OL].(2016-05-02)[2016-05-29].http://www.tuicool.com/articles/7ZjQRrn.
[9] 周映,韓曉霞.ELK日志分析平臺在電子商務系統監控服務中的應用[J].信息技術與標準化,2016(7):67-70.
Architecture analysis and application of massive data log system
LIU Kai
(Modern Educational Information Center, Anhui Agricultural University, Hefei 230036, China)
The architecture and data processing flowchart of some distributed log systems are analyzed first. Taking ELK log system (Elastic search, Logstash and Kibana) as an example, we discuss the features of ELK at different scenes and applications.
log; distribute system; ELK; architecture.
2016-05-29
安徽省教育廳高校自然科學基金項目(KJ2015A326)
劉 鍇(1981-),男,漢族,安徽合肥人,安徽農業大學工程師,碩士,主要從事大數據處理研究,E-mail:liukai@ahau.edu.cn.
10.15923/j.cnki.cn22-1382/t.2016.6.13
TP 391
A
1674-1374(2016)06-0581-06