劉 鍇
(安徽農(nóng)業(yè)大學(xué) 現(xiàn)代教育信息中心, 安徽 合肥 230036)
海量數(shù)據(jù)日志系統(tǒng)架構(gòu)分析與應(yīng)用
劉 鍇
(安徽農(nóng)業(yè)大學(xué) 現(xiàn)代教育信息中心, 安徽 合肥 230036)
介紹了多種分布式日志系統(tǒng)的架構(gòu)和數(shù)據(jù)處理流程,以ELK日志系統(tǒng)(即Elastic search,Logstash和Kibana)為例,介紹ELK在不同場景中的架構(gòu)特點(diǎn)以及應(yīng)用案例。
日志; 分布式; ELK; 架構(gòu)
日志,通常是指以文本模式記錄的數(shù)據(jù),該數(shù)據(jù)反映了系統(tǒng)運(yùn)行過程、狀態(tài)以及各種關(guān)鍵信息。對每個(gè)系統(tǒng)來說,日志都是很重要的記錄信息。隨著信息化的飛速發(fā)展,傳統(tǒng)的單一節(jié)點(diǎn)的日志系統(tǒng)已經(jīng)無法記錄指數(shù)級(jí)增長的日志數(shù)據(jù),更不用說分析和處理這些數(shù)據(jù)了。目前,利用分布式平臺(tái)實(shí)現(xiàn)的日志系統(tǒng)逐漸成為日志系統(tǒng)家族中的主力軍,他們運(yùn)行在多個(gè)節(jié)點(diǎn)組成的集群中,通過算法統(tǒng)一調(diào)度,可以實(shí)現(xiàn)海量日志的準(zhǔn)實(shí)時(shí)處理。文中將詳細(xì)介紹分布式日志系統(tǒng)的幾種系統(tǒng)架構(gòu),并以ELK日志系統(tǒng)(即Elastic search,Logstash和Kibana)為例,介紹其不同場景下的部署架構(gòu),最后給出ELK的實(shí)際應(yīng)用案例。
所有信息系統(tǒng)平臺(tái)每天會(huì)產(chǎn)生大量的日志,通常以流式數(shù)據(jù)為主,包括用戶訪問記錄、數(shù)據(jù)庫操作記錄等,當(dāng)數(shù)據(jù)量達(dá)到一定的數(shù)量級(jí),傳統(tǒng)的單節(jié)點(diǎn)系統(tǒng)已經(jīng)無法完成檢索及分析任務(wù),必須使用分布式的日志系統(tǒng)對他們進(jìn)行處理。一般而言,這些系統(tǒng)需要具有以下特征:
1)構(gòu)建應(yīng)用系統(tǒng)和分析系統(tǒng)的橋梁;
2)支持準(zhǔn)實(shí)時(shí)的在線分析系統(tǒng)和類似于Hadoop之類的離線分析系統(tǒng);
3)具有高可擴(kuò)展性和可靠性。即:當(dāng)數(shù)據(jù)量增加時(shí),可以通過增加節(jié)點(diǎn)進(jìn)行水平性能擴(kuò)展[1];當(dāng)某個(gè)或某一些節(jié)點(diǎn)發(fā)生故障時(shí),只影響系統(tǒng)的性能,系統(tǒng)功能性不受影響。
目前在這一領(lǐng)域較為先進(jìn)的系統(tǒng)包括cloudera的Flume、linkedin的Kafka以及facebook的Scribe等[2]。
1.1 Flume
Flume是cloudera設(shè)計(jì)開發(fā)的開源日志系統(tǒng),以可靠性、可擴(kuò)展性、可管理性以及功能可擴(kuò)展性為設(shè)計(jì)目標(biāo),它內(nèi)置的各種組件非常齊全,用戶幾乎不必進(jìn)行任何額外開發(fā)即可使用。Flume采用了分層架構(gòu),由三層組成,分別為agent,collector和storage。其中,agent和collector均由兩部分組成:source和sink。source是數(shù)據(jù)來源,sink是數(shù)據(jù)去向[3]。
Flume架構(gòu)如圖1所示。
1.2 Kafka
Kafka是采用scala語言編寫的開源項(xiàng)目,使用了多種效率優(yōu)化機(jī)制,采用比較新穎的push/pull架構(gòu),更適合異構(gòu)集群[4],底層采用Hadoop作為數(shù)據(jù)平臺(tái)。它實(shí)際上是一個(gè)包含producer,broker和consumer三種角色的系統(tǒng)。其中producer負(fù)責(zé)向某個(gè)topic發(fā)布消息,而consumer作為接收方訂閱這個(gè)topic的消息,一旦出現(xiàn)關(guān)于這個(gè)topic的新消息,broker負(fù)責(zé)將新消息傳遞給訂閱它的所有consumer。由此可以看出,在Kafka中,topic是組成消息的關(guān)鍵,而為了便于管理數(shù)據(jù)和進(jìn)行負(fù)載均衡,每個(gè)topic又會(huì)分為多個(gè)partition。同時(shí),Kafka也使用了zookeeper進(jìn)行負(fù)載均衡[3]。
圖1 Flume架構(gòu)圖
Kafka架構(gòu)如圖2所示。
圖2 Kafka架構(gòu)圖
1.3 Scribe
Scribe是facebook開源的日志收集系統(tǒng),facebook公司內(nèi)部已經(jīng)大量使用Scribe系統(tǒng)。Screbe系統(tǒng)中存在一個(gè)中央存儲(chǔ)系統(tǒng),該系統(tǒng)可由NFS或者分布式文件系統(tǒng)組成,Scribe通過各種日志源收集日志數(shù)據(jù),寫入中央存儲(chǔ)系統(tǒng),便于集中分析、統(tǒng)計(jì)和處理。它為日志的“分布式收集,統(tǒng)一處理”提供了一個(gè)可擴(kuò)展的、高容錯(cuò)的方案[5]。其架構(gòu)如圖3所示。
圖3 Scribe架構(gòu)圖
Scribe的架構(gòu)較為簡單,主要包括三部分,分別為Scribe Agent、Scribe和存儲(chǔ)系統(tǒng)。Scribe架構(gòu)的最大特點(diǎn)是容錯(cuò)性較好,當(dāng)存儲(chǔ)系統(tǒng)發(fā)生故障時(shí),Scribe會(huì)將本地磁盤作為存儲(chǔ)緩沖區(qū),將數(shù)據(jù)臨時(shí)寫在本地磁盤上,待存儲(chǔ)系統(tǒng)恢復(fù)正常后,本地磁盤中的數(shù)據(jù)會(huì)被重新加載到存儲(chǔ)系統(tǒng)中[6]。
ELK是Elasticsearch、Logstash、Kibana的簡稱,這是組成ELK的核心套件,但不是全部套件。根據(jù)應(yīng)用場景的不同,搭配不同的套件,ELK可以實(shí)現(xiàn)不同的架構(gòu)。
Elasticsearch提供日志分析中的搜集、分析、存儲(chǔ)數(shù)據(jù)三大功能,是整個(gè)架構(gòu)中的實(shí)時(shí)全文搜索和分析引擎。它構(gòu)建于Apache Lucene搜索引擎庫之上,是一套可擴(kuò)展的分布式系統(tǒng)[7]。
Logstash是一個(gè)功能強(qiáng)大的工具,用來搜集、分析、過濾日志。它支持幾乎任何類型的日志,包括系統(tǒng)日志、錯(cuò)誤日志和自定義應(yīng)用程序日志。它可以從許多來源接收日志,這些來源包括 syslog、消息傳遞(例如 RabbitMQ)和JMX,它能夠以多種方式輸出數(shù)據(jù),包括電子郵件、websockets和Elasticsearch[8]。
Kibana是用于展示日志信息的圖形界面,基于Web搜索、分析和可視化存儲(chǔ)在 Elasticsearch指標(biāo)中的日志數(shù)據(jù)[9]。
下面將對ELK針對不同應(yīng)用場景的架構(gòu)進(jìn)行分析。
2.1 簡單的ELK架構(gòu)
這是最簡單的ELK架構(gòu),通常供學(xué)習(xí)者或者小規(guī)模集群使用。它的優(yōu)點(diǎn)是結(jié)構(gòu)簡單、搭建速度快、容易上手,可以快速了解ELK的架構(gòu)組成,對搭建復(fù)雜的ELK集群提供幫助。缺點(diǎn)是處理能力較低,對設(shè)備資源占用較大,另外由于結(jié)構(gòu)簡單,也存在數(shù)據(jù)丟失的隱患,通常在業(yè)務(wù)系統(tǒng)中不推薦此種架構(gòu)。其架構(gòu)圖如圖4所示。
圖4 簡單的ELK架構(gòu)
此架構(gòu)首先由Logstash分布于各個(gè)節(jié)點(diǎn)上搜集相關(guān)日志、數(shù)據(jù),并經(jīng)過分析、過濾后發(fā)送給遠(yuǎn)端服務(wù)器上的Elasticsearch進(jìn)行存儲(chǔ)。Elasticsearch將數(shù)據(jù)以分片的形式壓縮存儲(chǔ)并提供多種API供用戶查詢、操作。用戶亦可以更直觀地通過配置Kibana Web Portal方便的對日志查詢,并根據(jù)數(shù)據(jù)生成報(bào)表。
2.2 帶消息隊(duì)列的ELK架構(gòu)
此架構(gòu)在簡單ELK架構(gòu)的基礎(chǔ)上引入消息隊(duì)列機(jī)制。其架構(gòu)如圖5所示。
圖5 帶消息隊(duì)列的ELK架構(gòu)
位于各個(gè)節(jié)點(diǎn)上的Logstash Agent先將數(shù)據(jù)/日志傳遞給Kafka(或者Redis),并將隊(duì)列中消息或數(shù)據(jù)間接傳遞給Logstash,Logstash過濾、分析后將數(shù)據(jù)傳遞給Elasticsearch存儲(chǔ)。最后由Kibana將日志和數(shù)據(jù)呈現(xiàn)給用戶。因?yàn)橐肓薑afka(或者Redis),所以即使遠(yuǎn)端Logstash server因故障停止運(yùn)行,數(shù)據(jù)將會(huì)先被存儲(chǔ)下來,從而避免數(shù)據(jù)丟失。但這種架構(gòu)也有缺點(diǎn),位于中心節(jié)點(diǎn)的Logstash依舊存在負(fù)載過重,占用資源過多的問題。
2.3 帶Beats的ELK架構(gòu)
Beats是一個(gè)代理平臺(tái),將不同類型的數(shù)據(jù)發(fā)送到elasticsearch。Beats可以直接將數(shù)據(jù)發(fā)送到elasticsearch,也可以通過logstash將數(shù)據(jù)發(fā)送elasticsearch。引入Beats很好地解決了上述兩種架構(gòu)中Logstash占用資源過多的問題。引入Beats平臺(tái)后的ELK架構(gòu)如圖6所示。
圖6 帶Beats的ELK架構(gòu)
Logstash-forwarder可以替代Beats平臺(tái),但是Beats擁有更好的擴(kuò)展性和靈活性。Beats有3個(gè)典型的例子:Filebeat、Topbeat、Packetbeat。Filebeat用來收集日志,Topbeat用來收集系統(tǒng)基礎(chǔ)設(shè)置數(shù)據(jù),如CPU、內(nèi)存、每個(gè)進(jìn)程的統(tǒng)計(jì)信息,Packetbeat是一個(gè)網(wǎng)絡(luò)包分析工具,統(tǒng)計(jì)收集網(wǎng)絡(luò)信息。
不管采用上面哪種ELK架構(gòu),都包含了其核心組件,即Logstash、Elasticsearch 和Kibana。各系統(tǒng)運(yùn)維中究竟該采用哪種架構(gòu),可根據(jù)現(xiàn)實(shí)情況和架構(gòu)優(yōu)劣而定。
3.1 ELK模塊組件
采用分布式架構(gòu)的日志系統(tǒng)中,以下幾個(gè)方面是必不可少的:
1)對各個(gè)系統(tǒng)的監(jiān)控,包括對硬件系統(tǒng)和軟件系統(tǒng)的各個(gè)組件的監(jiān)控,如CPU、內(nèi)存以及系統(tǒng)可用性等;
2)基于分布式平臺(tái)的日志集中管理和查詢;
3)基于日志信息的鼓掌查詢;
4)安全及事件日志的記錄和管理;
5)提供可視化的報(bào)表功能。
ELK組件應(yīng)用于分布式系統(tǒng)之上,其功能模塊如圖7所示。
ELK能夠提供線上業(yè)務(wù)的準(zhǔn)實(shí)時(shí)監(jiān)控,并在業(yè)務(wù)故障時(shí)幫助快速定位原因,跟蹤分析Bug,排除故障,通過報(bào)表功能可以跟蹤業(yè)務(wù)趨勢,實(shí)現(xiàn)安全與合規(guī)審計(jì),最大深度地挖掘海量日志的數(shù)據(jù)價(jià)值。同時(shí)Elasticsearch提供包括rest,java,phthon在內(nèi)的多種開源API,用戶可以根據(jù)需求自行擴(kuò)展開發(fā)。
圖7 ELK功能模塊
3.2 ELK應(yīng)用舉例
在實(shí)際應(yīng)用中,通過ELK組件Hadoop環(huán)境下的運(yùn)行日志,經(jīng)過篩選、過濾并存儲(chǔ)可用信息,從而完成對Hadoop作業(yè)運(yùn)行狀態(tài)監(jiān)控。ELK搜集作業(yè)運(yùn)行和完成狀態(tài)進(jìn)行監(jiān)控,實(shí)時(shí)掌握集群狀態(tài),了解作業(yè)完成情況,并生成報(bào)表,方便監(jiān)控和查看,ELK應(yīng)用舉例如圖8所示。
圖8 ELK應(yīng)用舉例
ELK的數(shù)據(jù)來源可以是多種多樣的日志數(shù)據(jù),其input plugin組件支持近50種日志類型。
Logstash配置文件有3個(gè)主要模塊:input()輸入或者說收集數(shù)據(jù),定義數(shù)據(jù)來源;filter()對數(shù)據(jù)進(jìn)行過濾、分析等操作;output()輸出。當(dāng)數(shù)據(jù)源搜集到數(shù)據(jù)后,通過filter()將數(shù)據(jù)過濾整理成固定的格式,可以是JSON、grep、grok、geoip等類型。然后將整理后的數(shù)據(jù)輸出到數(shù)據(jù)庫或者直接傳遞給Elasticsearch。當(dāng)數(shù)據(jù)存儲(chǔ)在Elasticsearch后,用戶可以通過它提供的API來進(jìn)行數(shù)據(jù)檢索,如使用REST API執(zhí)行curl get命令請求檢索指定數(shù)據(jù)。另外,用戶也可以使用Kibana對數(shù)據(jù)進(jìn)行可視化瀏覽。Kibana還提供時(shí)間檢索功能,即可以對某一時(shí)段的數(shù)據(jù)進(jìn)行查詢和生成報(bào)表。
介紹了目前各大分布式環(huán)境下的日志系統(tǒng)架構(gòu),并對應(yīng)用廣泛、靈活性較強(qiáng)的ELK日志系統(tǒng)架構(gòu)進(jìn)行了詳細(xì)分析,分別闡述了不同應(yīng)用環(huán)境下的ELK架構(gòu)的優(yōu)缺點(diǎn),并給出了ELK日志系統(tǒng)在業(yè)務(wù)系統(tǒng)中的應(yīng)用案例。經(jīng)過實(shí)踐,ELK日志系統(tǒng)作為一個(gè)開源的分布式日志系統(tǒng),能夠?yàn)橛脩籼峁┓€(wěn)定、可靠的準(zhǔn)實(shí)時(shí)搜索服務(wù),并且能夠提供多種報(bào)表供用戶選擇,為用戶在故障排查、數(shù)據(jù)分析時(shí)提供幫助。
[1] 丁雪松.共享數(shù)據(jù)服務(wù)統(tǒng)計(jì)信息的提取與可視化研究[D].北京:中國地質(zhì)大學(xué),2012.
[2] 周昕毅.Linux集群運(yùn)維平臺(tái)用戶權(quán)限管理及日志審計(jì)系統(tǒng)實(shí)現(xiàn)[D].上海:上海交通大學(xué),2012.
[3] 呂佳.基于Elastic Search的分布式日志搜索系統(tǒng)設(shè)計(jì)[D].上海:復(fù)旦大學(xué),2013.
[4] 何海剛.基于Key-Value的海量日志存儲(chǔ)系統(tǒng)設(shè)計(jì)[D].上海:復(fù)旦大學(xué),2013.
[5] 葉斌,余陽,王會(huì),等.大數(shù)據(jù)在MOOC中的應(yīng)用分析[J].微型機(jī)與應(yīng)用,2015(6):97-98.
[6] Scribe Kafka.開源日志系統(tǒng)比較[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日志分析平臺(tái)在電子商務(wù)系統(tǒng)監(jiān)控服務(wù)中的應(yīng)用[J].信息技術(shù)與標(biāo)準(zhǔn)化,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
安徽省教育廳高校自然科學(xué)基金項(xiàng)目(KJ2015A326)
劉 鍇(1981-),男,漢族,安徽合肥人,安徽農(nóng)業(yè)大學(xué)工程師,碩士,主要從事大數(shù)據(jù)處理研究,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