張建東
(樂(lè)山師范學(xué)院計(jì)算機(jī)科學(xué)學(xué)院,樂(lè)山 614000)
隨著網(wǎng)絡(luò)應(yīng)用的爆發(fā)式增長(zhǎng),以及用戶使用量的增加,網(wǎng)絡(luò)流量增長(zhǎng)越來(lái)越快,這也導(dǎo)致日志數(shù)據(jù)的爆炸式增長(zhǎng),如何更好地分析日志數(shù)據(jù),并從中找出用戶的行為模式,以及發(fā)現(xiàn)用戶的異常模式以便更好地為用戶服務(wù),同時(shí)找出網(wǎng)絡(luò)異常方便管理員對(duì)網(wǎng)絡(luò)進(jìn)行維護(hù)升級(jí)和發(fā)現(xiàn)安全隱患,成了一個(gè)亟待解決的問(wèn)題。大數(shù)據(jù)指的是無(wú)法在規(guī)定時(shí)間內(nèi)用現(xiàn)有的常規(guī)軟件工具進(jìn)行收集、存儲(chǔ)和處理的數(shù)據(jù)集合,通常指10TB以上規(guī)模數(shù)據(jù)。大數(shù)據(jù)技術(shù)是能突破常規(guī)軟件限制,對(duì)大數(shù)據(jù)進(jìn)行收集、存儲(chǔ)和處理技術(shù)的統(tǒng)稱。大數(shù)據(jù)的主要特征有:數(shù)據(jù)體量巨大,數(shù)據(jù)類型繁多,價(jià)值密度低,處理速度快。從以上分析可以看到目前的網(wǎng)絡(luò)日志數(shù)據(jù)滿足大數(shù)據(jù)的特征。
當(dāng)日志數(shù)據(jù)量比較小的時(shí)候,主要是采用單機(jī)進(jìn)行數(shù)據(jù)分析,隨著數(shù)據(jù)的增長(zhǎng),單機(jī)分析日益不能滿足要求。目前常用的日志分析方法有ELK日志分析平臺(tái),ELK 是由 ElasticSearch、Logstash、Kibana組成的開(kāi)源日志處理平臺(tái)解決方案。ELK能實(shí)現(xiàn)日志收集,存儲(chǔ),統(tǒng)計(jì)分析并使用Web頁(yè)面顯示等功能,可以起到實(shí)時(shí)系統(tǒng)監(jiān)測(cè)、網(wǎng)絡(luò)安全事件管理等功能[1]。但是ELK提供的分析技術(shù)相對(duì)較簡(jiǎn)單,還需要設(shè)計(jì)輔助程序來(lái)滿足特定系統(tǒng)和環(huán)境的分析要求。Chukwa是Hadoop項(xiàng)目中開(kāi)源的分布式系統(tǒng)數(shù)據(jù)收集和分析工具,包含了包括數(shù)據(jù)收集、重組、分析和展示的完整流程,但是Chukwa不能應(yīng)用于所有的數(shù)據(jù)分析場(chǎng)景。傳統(tǒng)的日志分析技術(shù)不能滿足具有大數(shù)據(jù)特征的海量網(wǎng)絡(luò)日志數(shù)據(jù)的處理[2],將大數(shù)據(jù)分析技術(shù)用于日志分析是目前研究的熱點(diǎn)。
數(shù)據(jù)分析的步驟:
(1)明確分析的目的和分析思路。
(2)收集數(shù)據(jù),根據(jù)分析的目的來(lái)收集不同數(shù)據(jù)源的數(shù)據(jù)。
(3)存儲(chǔ)數(shù)據(jù),對(duì)海量數(shù)據(jù)可以使用Hadoop的HDFS存儲(chǔ)系統(tǒng)。
(4)對(duì)數(shù)據(jù)進(jìn)行處理,包括數(shù)據(jù)預(yù)處理、數(shù)據(jù)清洗,數(shù)據(jù)轉(zhuǎn)換等。
(5)數(shù)據(jù)計(jì)算。分析邏輯的實(shí)現(xiàn),常用的計(jì)算技術(shù)MapReduce、Spark、Storm 等。
(6)展示結(jié)果,包括Web展示,撰寫報(bào)告等。
圖1為數(shù)據(jù)分析的主要步驟。
數(shù)據(jù)分析的主要內(nèi)容包括三個(gè)方面:
(1)現(xiàn)狀:過(guò)去發(fā)生了什么,通過(guò)歷史數(shù)據(jù)的統(tǒng)計(jì)可以實(shí)現(xiàn)。
(2)原因:某一現(xiàn)象為什么發(fā)生,這部分要結(jié)合具體的業(yè)務(wù)來(lái)分析。
(3)預(yù)測(cè):預(yù)測(cè)將來(lái)會(huì)發(fā)生什么。
圖1 數(shù)據(jù)分析的主要步驟
當(dāng)數(shù)據(jù)海量增長(zhǎng)的時(shí)候,單機(jī)處理能力已經(jīng)不能滿足需求,就需要用集群技術(shù)來(lái)解決。在Hadoop出現(xiàn)之前,海量數(shù)據(jù)存儲(chǔ)和分析都非常困難。只有少數(shù)公司掌握著高效的分布式計(jì)算、分布式存儲(chǔ)的核心技術(shù)[3]。Hadoop是一個(gè)提供可伸縮、可信賴的分布式計(jì)算的開(kāi)源項(xiàng)目,支持Google的MapReduce編程模型,能夠?qū)⒆鳂I(yè)分割成許多小的任務(wù),并將這些任務(wù)放到任何集群節(jié)點(diǎn)上執(zhí)行,用戶可以在不了解分布式系統(tǒng)底層細(xì)節(jié)的情況下,開(kāi)發(fā)分布式應(yīng)用程序,實(shí)現(xiàn)大規(guī)模分布式并行計(jì)算、存儲(chǔ)和管理海量數(shù)據(jù)。Hadoop的核心是分布式文件系統(tǒng)HDFS(Hadoop Distributed File System)、MapReduce計(jì)算框架和分布式資源調(diào)度框架YARN。HDFS對(duì)海量數(shù)據(jù)提供高可靠性、高容錯(cuò)性、高可擴(kuò)展性、高吞吐的存儲(chǔ)方案。MapReduce是一種用來(lái)處理海量數(shù)據(jù)的并行編程模型和計(jì)算框架,用于對(duì)大規(guī)模數(shù)據(jù)集進(jìn)行并行計(jì)算。
數(shù)據(jù)分析分為實(shí)時(shí)數(shù)據(jù)分析和離線數(shù)據(jù)分析,實(shí)時(shí)數(shù)據(jù)分析在金融,電子商務(wù)等領(lǐng)域的使用較多,往往要求在數(shù)秒內(nèi)返回上億行數(shù)據(jù)的分析結(jié)果,從而達(dá)到不影響用戶體驗(yàn)的目的。對(duì)時(shí)間沒(méi)有那么敏感的數(shù)據(jù)分析任務(wù),如數(shù)據(jù)挖掘、搜索引擎索引計(jì)算、推薦系統(tǒng)、機(jī)器學(xué)習(xí)等場(chǎng)景,往往需要對(duì)海量數(shù)據(jù)做復(fù)雜的多維度的計(jì)算,這些計(jì)算所需要的時(shí)間較長(zhǎng),常常是幾小時(shí)甚至幾天,對(duì)這種類型的數(shù)據(jù)分析任務(wù),可以采用離線數(shù)據(jù)分析的方式[4]。
日志分析采用最多的處理技術(shù)是離線數(shù)據(jù)處理方式。圖2是離線大數(shù)據(jù)技術(shù)分析步驟。
圖2 離線大數(shù)據(jù)技術(shù)分析步驟
有部分應(yīng)用需要實(shí)時(shí)分析產(chǎn)生的數(shù)據(jù),可以采用流式大數(shù)據(jù)分析技術(shù),圖3是流式大數(shù)據(jù)技術(shù)分析步驟。Flume用來(lái)獲取數(shù)據(jù);Kafka用來(lái)臨時(shí)保存數(shù)據(jù);Strom用來(lái)計(jì)算數(shù)據(jù);Redis是個(gè)內(nèi)存數(shù)據(jù)庫(kù),用來(lái)保存數(shù)據(jù)。
圖3 流式大數(shù)據(jù)技術(shù)分析步驟
日志就是按照一定的規(guī)則將操作系統(tǒng)、應(yīng)用程序、網(wǎng)絡(luò)設(shè)備中發(fā)生的事件記錄下來(lái),日志已成為系統(tǒng)管理中不可或缺的工具。日志的主要應(yīng)用主要表現(xiàn)在一下幾方面:對(duì)用戶行為進(jìn)行審計(jì),監(jiān)控惡意行為,對(duì)入侵行為的檢測(cè),系統(tǒng)資源的監(jiān)控,幫助恢復(fù)系統(tǒng),評(píng)估造成的損失,計(jì)算機(jī)犯罪的取證,生成調(diào)查報(bào)告等。
由于日志不僅數(shù)據(jù)海量,格式和存儲(chǔ)方式不統(tǒng)一,而且不同類型的日志間相互聯(lián)系,使得對(duì)日志的分析變得更加困難。如果網(wǎng)絡(luò)管理員能了解日志的含義,知道如何分析和使用日志,那么日志用于網(wǎng)絡(luò)安全管理和決策支持的價(jià)值將無(wú)法估量。
根據(jù)不同的應(yīng)用場(chǎng)景,日志的分析可以分為離線分析和實(shí)時(shí)分析,圖4給出了日志分析的體系結(jié)構(gòu)。體系結(jié)構(gòu)主要包括三個(gè)部分:日志的收集和預(yù)處理;日志數(shù)據(jù)的存儲(chǔ);日志的分析、展示和使用[5]。
(1)離線分析日志文件:
為了對(duì)日志進(jìn)行深度的數(shù)據(jù)分析和挖掘,以及對(duì)一些后臺(tái)操作記錄進(jìn)行追溯,需要對(duì)海量的日志信息進(jìn)行持久化存儲(chǔ),Apache的Hadoop項(xiàng)目提供了解決方案,并在數(shù)據(jù)持久化存儲(chǔ)和分析中得到了廣泛的應(yīng)用。對(duì)不需要進(jìn)行實(shí)時(shí)分析的海量數(shù)據(jù),可以將其保存在分布式文件系統(tǒng)HDFS上,然后通過(guò)MapReduce或者Hive SQL進(jìn)行數(shù)據(jù)分析和挖掘,對(duì)需要進(jìn)行實(shí)時(shí)展示的內(nèi)容,則可以將其保存在HBase上,HBase是高可靠、高性能、可伸縮的列式存儲(chǔ)系統(tǒng),支持?jǐn)?shù)據(jù)表的自動(dòng)分區(qū),避免了傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)單表容量的局限性,能支持海量數(shù)據(jù)的存儲(chǔ)。離線日志分析的特征是:批量獲取數(shù)據(jù)、批量傳輸數(shù)據(jù)、周期性批量計(jì)算數(shù)據(jù)、數(shù)據(jù)展示。
圖4 日志分析體系結(jié)構(gòu)
常用的日志分析方法有關(guān)聯(lián)分析、序列分析、聚類分析[6]。
關(guān)聯(lián)分析又稱關(guān)聯(lián)挖掘,用于發(fā)現(xiàn)存在于數(shù)據(jù)集中的頻繁模式、關(guān)聯(lián)、相關(guān)性或因果結(jié)構(gòu),從而描述一個(gè)事物中某些屬性同時(shí)出現(xiàn)的規(guī)律和模式。計(jì)算機(jī)系統(tǒng)多種日志之間存在著隱蔽的關(guān)聯(lián),通過(guò)關(guān)聯(lián)分析可以找出不同日志間關(guān)聯(lián)的事件,典型的應(yīng)用是可以進(jìn)行系統(tǒng)故障的溯源。常用的關(guān)聯(lián)分析算法有Apriori算法、LIG算法、FP算法等,其中Apriori算法最為經(jīng)典,眾多算法均給予該算法改進(jìn)。文獻(xiàn)[7]中分析了使用Apriori算法挖掘用戶頻繁訪問(wèn)頁(yè)面在Hadoop上的應(yīng)用。
序列分析:關(guān)聯(lián)分析是在忽略事物間在時(shí)間維度上的關(guān)系的前提下發(fā)現(xiàn)同一事物中的項(xiàng)之間存在的某種聯(lián)系。然而在日志分析中某一系統(tǒng)故障可能是另一系統(tǒng)故障的引發(fā)的,網(wǎng)絡(luò)入侵事件也具有相似的特征,因此事件發(fā)生的時(shí)間也非常重要。研究者經(jīng)常利用時(shí)間對(duì)日志進(jìn)行關(guān)聯(lián)以完成日志的序列分析,來(lái)達(dá)到網(wǎng)絡(luò)攻擊的預(yù)測(cè)及防范、系統(tǒng)故障的溯源等。
聚類分析是把數(shù)據(jù)劃分為有意義的組或簇,目標(biāo)是同一組對(duì)象間的相似度最大,不同組中對(duì)象間的相似度最小。聚類分析是數(shù)據(jù)分析的一種重要技術(shù),應(yīng)用十分廣泛。聚類分析是數(shù)據(jù)分析的起點(diǎn),對(duì)劃分成組的日志數(shù)據(jù)還要進(jìn)一步結(jié)合具體的應(yīng)用進(jìn)行分析。
要深度分析日志數(shù)據(jù),可以把文本日志轉(zhuǎn)換為離散的結(jié)構(gòu)化的事件,然后進(jìn)行日志依賴性挖掘,根據(jù)事件的依賴關(guān)系對(duì)系統(tǒng)故障進(jìn)行溯源[8-9]。
(2)實(shí)時(shí)日志分析技術(shù)
流式數(shù)據(jù)的特征是數(shù)據(jù)會(huì)源源不斷地從各個(gè)地方匯集過(guò)來(lái),來(lái)源眾多,格式復(fù)雜,且數(shù)據(jù)量巨大。對(duì)于流式數(shù)據(jù)的處理,有這樣的一種觀點(diǎn),數(shù)據(jù)的價(jià)值隨著時(shí)間的流逝而降低,因此數(shù)據(jù)生成后要盡快處理,而不是等到數(shù)據(jù)累積后再定期地進(jìn)行處理。這樣,對(duì)應(yīng)的數(shù)據(jù)處理工具必須具備高性能、實(shí)時(shí)性、分布式和易用性等特征。對(duì)于流式數(shù)據(jù)的處理,更多關(guān)心的是數(shù)據(jù)的整體價(jià)值,而非數(shù)據(jù)的局部特征。在很多應(yīng)用中需要分析實(shí)時(shí)日志數(shù)據(jù),比如實(shí)時(shí)分析線上應(yīng)用的負(fù)載、網(wǎng)絡(luò)流量、磁盤I/O等系統(tǒng)信息,異常日志的檢測(cè)。
流式計(jì)算的特征是:數(shù)據(jù)實(shí)時(shí)產(chǎn)生、數(shù)據(jù)實(shí)時(shí)傳輸、數(shù)據(jù)實(shí)時(shí)計(jì)算、實(shí)時(shí)展示。實(shí)時(shí)日志分析中需要多個(gè)大數(shù)據(jù)分析工具:Flume實(shí)時(shí)獲取數(shù)據(jù),Kafka實(shí)時(shí)數(shù)據(jù)存儲(chǔ),Storm實(shí)時(shí)數(shù)據(jù)計(jì)算,Redis實(shí)時(shí)結(jié)果緩存,MySQL實(shí)現(xiàn)持久化存儲(chǔ)。將源源不斷產(chǎn)生的數(shù)據(jù)實(shí)時(shí)收集并實(shí)時(shí)計(jì)算,盡可能快的得到計(jì)算結(jié)果,用來(lái)支持實(shí)時(shí)決策。
Flume作為數(shù)據(jù)傳輸工具獲取新增加的日志,并把新增的數(shù)據(jù)傳輸?shù)街付ǖ奈恢?。Storm是Twitter公司開(kāi)源的分布式實(shí)時(shí)流處理框架,可以實(shí)現(xiàn)單節(jié)點(diǎn)百萬(wàn)級(jí)的數(shù)據(jù)處理與運(yùn)算。
實(shí)時(shí)日志分析的過(guò)程是:使用Flume監(jiān)聽(tīng)日志文件,并實(shí)時(shí)把每一條日志信息抓取下來(lái)存入Kafka消息系統(tǒng)中,再由Strom消費(fèi)Kafka中的消息,接下來(lái)使用用戶定義的Storm Topology進(jìn)行日志的分析并輸出到Redis緩存數(shù)據(jù)庫(kù)中,最后由應(yīng)用程序讀取緩存數(shù)據(jù)庫(kù)的內(nèi)容并顯示,也可以把結(jié)果持久化的存儲(chǔ)在MySQL中。在Flume和Storm中加一個(gè)Kafka消息系統(tǒng)是為了防止Flume和Storm的處理速度不匹配而丟失數(shù)據(jù)。
(3)結(jié)果報(bào)表
常見(jiàn)的結(jié)果報(bào)表有:1)進(jìn)行各種數(shù)據(jù)統(tǒng)計(jì),這是最典型的報(bào)表形式,方便管理人員了解網(wǎng)絡(luò)的使用情況。2)分析某一現(xiàn)象為什么發(fā)生,為了進(jìn)一步找出原因,可能需要和領(lǐng)域?qū)<疫M(jìn)行溝通,設(shè)計(jì)進(jìn)一步的數(shù)據(jù)分析方案。3)通過(guò)歷史數(shù)據(jù)的分析,可以使用分析報(bào)告給出未來(lái)的趨勢(shì),提供給管理人員與決策者作為決策的參考。Highcharts是一個(gè)主流的JavaScript圖表庫(kù),主要為Web站點(diǎn)提供直觀的、交互式的圖表體驗(yàn),支持線圖、條形圖、曲面圖、條形曲面圖、柱狀圖、餅圖、散布圖等圖表樣式。使用Highcharts可以生產(chǎn)直觀的報(bào)表。
本文介紹數(shù)據(jù)分析和網(wǎng)絡(luò)日志分析的背景及常用分析技術(shù)。分析了大數(shù)據(jù)的特征,以及大數(shù)據(jù)分析的步驟及兩種典型的大數(shù)據(jù)分析模型。目前的日志數(shù)據(jù)滿足大數(shù)據(jù)的特征,以前的常規(guī)分析方法不再有效,根據(jù)使用場(chǎng)景構(gòu)建了實(shí)時(shí)和離線的大數(shù)據(jù)日志分析體系結(jié)構(gòu)。進(jìn)一步的研究工作是要通過(guò)深入挖掘日志文件的隱含信息,并利用日志信息進(jìn)行信息系統(tǒng)的故障溯源。
參考文獻(xiàn):
[1]趙迦琪,張彩云,牛永紅.ELK日志分析平臺(tái)在系統(tǒng)運(yùn)維中的應(yīng)用[J].電子技術(shù)與軟件工程,2017(06):182-183.
[2]馮興杰,王文超.Hadoop與Spark應(yīng)用場(chǎng)景研究[J].計(jì)算機(jī)應(yīng)用研究,2018(09):1-8.
[3]彭敏佳林勇吳翀嚴(yán)盟.MapReduce技術(shù)在日志分析中的研究應(yīng)用[J].計(jì)算機(jī)時(shí)代,2017(06):26-28.
[4]陳康賢.大型分布式網(wǎng)站架構(gòu)設(shè)計(jì)與實(shí)踐[M].北京:電子工業(yè)出版社,2014.
[5]李濤.網(wǎng)絡(luò)安全中的數(shù)據(jù)挖掘技術(shù)[M].清華大學(xué)出版社,2017.
[6]薛文娟.基于層次聚類的日志分析技術(shù)研究[D].山東師范大學(xué),2013.
[7]陳愛(ài)民,盛昀瑤.基于MapReduce的Web日志挖掘算法研究[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2017(16):14-18.
[8]Tang Liang,Li Tao.LogTree:A Framework for Generating System Events from Raw Textual Logs[C].Data Mining(ICDM),2010 IEEE 10th International Conference on,2010:491-500
[9]Tang Liang,Li Tao,Perng Chang-Shing.LogSig:Generating System Events from Raw Textual Logs[C].Proceedings of the 20th ACM International Conference on Information and Knowledge Management,2011:785-794