張建東
(樂山師范學院計算機科學學院,樂山 614000)
隨著網絡應用的爆發式增長,以及用戶使用量的增加,網絡流量增長越來越快,這也導致日志數據的爆炸式增長,如何更好地分析日志數據,并從中找出用戶的行為模式,以及發現用戶的異常模式以便更好地為用戶服務,同時找出網絡異常方便管理員對網絡進行維護升級和發現安全隱患,成了一個亟待解決的問題。大數據指的是無法在規定時間內用現有的常規軟件工具進行收集、存儲和處理的數據集合,通常指10TB以上規模數據。大數據技術是能突破常規軟件限制,對大數據進行收集、存儲和處理技術的統稱。大數據的主要特征有:數據體量巨大,數據類型繁多,價值密度低,處理速度快。從以上分析可以看到目前的網絡日志數據滿足大數據的特征。
當日志數據量比較小的時候,主要是采用單機進行數據分析,隨著數據的增長,單機分析日益不能滿足要求。目前常用的日志分析方法有ELK日志分析平臺,ELK 是由 ElasticSearch、Logstash、Kibana組成的開源日志處理平臺解決方案。ELK能實現日志收集,存儲,統計分析并使用Web頁面顯示等功能,可以起到實時系統監測、網絡安全事件管理等功能[1]。但是ELK提供的分析技術相對較簡單,還需要設計輔助程序來滿足特定系統和環境的分析要求。Chukwa是Hadoop項目中開源的分布式系統數據收集和分析工具,包含了包括數據收集、重組、分析和展示的完整流程,但是Chukwa不能應用于所有的數據分析場景。傳統的日志分析技術不能滿足具有大數據特征的海量網絡日志數據的處理[2],將大數據分析技術用于日志分析是目前研究的熱點。
數據分析的步驟:
(1)明確分析的目的和分析思路。
(2)收集數據,根據分析的目的來收集不同數據源的數據。
(3)存儲數據,對海量數據可以使用Hadoop的HDFS存儲系統。
(4)對數據進行處理,包括數據預處理、數據清洗,數據轉換等。
(5)數據計算。分析邏輯的實現,常用的計算技術MapReduce、Spark、Storm 等。
(6)展示結果,包括Web展示,撰寫報告等。
圖1為數據分析的主要步驟。
數據分析的主要內容包括三個方面:
(1)現狀:過去發生了什么,通過歷史數據的統計可以實現。
(2)原因:某一現象為什么發生,這部分要結合具體的業務來分析。
(3)預測:預測將來會發生什么。

圖1 數據分析的主要步驟
當數據海量增長的時候,單機處理能力已經不能滿足需求,就需要用集群技術來解決。在Hadoop出現之前,海量數據存儲和分析都非常困難。只有少數公司掌握著高效的分布式計算、分布式存儲的核心技術[3]。Hadoop是一個提供可伸縮、可信賴的分布式計算的開源項目,支持Google的MapReduce編程模型,能夠將作業分割成許多小的任務,并將這些任務放到任何集群節點上執行,用戶可以在不了解分布式系統底層細節的情況下,開發分布式應用程序,實現大規模分布式并行計算、存儲和管理海量數據。Hadoop的核心是分布式文件系統HDFS(Hadoop Distributed File System)、MapReduce計算框架和分布式資源調度框架YARN。HDFS對海量數據提供高可靠性、高容錯性、高可擴展性、高吞吐的存儲方案。MapReduce是一種用來處理海量數據的并行編程模型和計算框架,用于對大規模數據集進行并行計算。
數據分析分為實時數據分析和離線數據分析,實時數據分析在金融,電子商務等領域的使用較多,往往要求在數秒內返回上億行數據的分析結果,從而達到不影響用戶體驗的目的。對時間沒有那么敏感的數據分析任務,如數據挖掘、搜索引擎索引計算、推薦系統、機器學習等場景,往往需要對海量數據做復雜的多維度的計算,這些計算所需要的時間較長,常常是幾小時甚至幾天,對這種類型的數據分析任務,可以采用離線數據分析的方式[4]。
日志分析采用最多的處理技術是離線數據處理方式。圖2是離線大數據技術分析步驟。

圖2 離線大數據技術分析步驟
有部分應用需要實時分析產生的數據,可以采用流式大數據分析技術,圖3是流式大數據技術分析步驟。Flume用來獲取數據;Kafka用來臨時保存數據;Strom用來計算數據;Redis是個內存數據庫,用來保存數據。

圖3 流式大數據技術分析步驟
日志就是按照一定的規則將操作系統、應用程序、網絡設備中發生的事件記錄下來,日志已成為系統管理中不可或缺的工具。日志的主要應用主要表現在一下幾方面:對用戶行為進行審計,監控惡意行為,對入侵行為的檢測,系統資源的監控,幫助恢復系統,評估造成的損失,計算機犯罪的取證,生成調查報告等。
由于日志不僅數據海量,格式和存儲方式不統一,而且不同類型的日志間相互聯系,使得對日志的分析變得更加困難。如果網絡管理員能了解日志的含義,知道如何分析和使用日志,那么日志用于網絡安全管理和決策支持的價值將無法估量。
根據不同的應用場景,日志的分析可以分為離線分析和實時分析,圖4給出了日志分析的體系結構。體系結構主要包括三個部分:日志的收集和預處理;日志數據的存儲;日志的分析、展示和使用[5]。
(1)離線分析日志文件:
為了對日志進行深度的數據分析和挖掘,以及對一些后臺操作記錄進行追溯,需要對海量的日志信息進行持久化存儲,Apache的Hadoop項目提供了解決方案,并在數據持久化存儲和分析中得到了廣泛的應用。對不需要進行實時分析的海量數據,可以將其保存在分布式文件系統HDFS上,然后通過MapReduce或者Hive SQL進行數據分析和挖掘,對需要進行實時展示的內容,則可以將其保存在HBase上,HBase是高可靠、高性能、可伸縮的列式存儲系統,支持數據表的自動分區,避免了傳統關系型數據庫單表容量的局限性,能支持海量數據的存儲。離線日志分析的特征是:批量獲取數據、批量傳輸數據、周期性批量計算數據、數據展示。

圖4 日志分析體系結構
常用的日志分析方法有關聯分析、序列分析、聚類分析[6]。
關聯分析又稱關聯挖掘,用于發現存在于數據集中的頻繁模式、關聯、相關性或因果結構,從而描述一個事物中某些屬性同時出現的規律和模式。計算機系統多種日志之間存在著隱蔽的關聯,通過關聯分析可以找出不同日志間關聯的事件,典型的應用是可以進行系統故障的溯源。常用的關聯分析算法有Apriori算法、LIG算法、FP算法等,其中Apriori算法最為經典,眾多算法均給予該算法改進。文獻[7]中分析了使用Apriori算法挖掘用戶頻繁訪問頁面在Hadoop上的應用。
序列分析:關聯分析是在忽略事物間在時間維度上的關系的前提下發現同一事物中的項之間存在的某種聯系。然而在日志分析中某一系統故障可能是另一系統故障的引發的,網絡入侵事件也具有相似的特征,因此事件發生的時間也非常重要。研究者經常利用時間對日志進行關聯以完成日志的序列分析,來達到網絡攻擊的預測及防范、系統故障的溯源等。
聚類分析是把數據劃分為有意義的組或簇,目標是同一組對象間的相似度最大,不同組中對象間的相似度最小。聚類分析是數據分析的一種重要技術,應用十分廣泛。聚類分析是數據分析的起點,對劃分成組的日志數據還要進一步結合具體的應用進行分析。
要深度分析日志數據,可以把文本日志轉換為離散的結構化的事件,然后進行日志依賴性挖掘,根據事件的依賴關系對系統故障進行溯源[8-9]。
(2)實時日志分析技術
流式數據的特征是數據會源源不斷地從各個地方匯集過來,來源眾多,格式復雜,且數據量巨大。對于流式數據的處理,有這樣的一種觀點,數據的價值隨著時間的流逝而降低,因此數據生成后要盡快處理,而不是等到數據累積后再定期地進行處理。這樣,對應的數據處理工具必須具備高性能、實時性、分布式和易用性等特征。對于流式數據的處理,更多關心的是數據的整體價值,而非數據的局部特征。在很多應用中需要分析實時日志數據,比如實時分析線上應用的負載、網絡流量、磁盤I/O等系統信息,異常日志的檢測。
流式計算的特征是:數據實時產生、數據實時傳輸、數據實時計算、實時展示。實時日志分析中需要多個大數據分析工具:Flume實時獲取數據,Kafka實時數據存儲,Storm實時數據計算,Redis實時結果緩存,MySQL實現持久化存儲。將源源不斷產生的數據實時收集并實時計算,盡可能快的得到計算結果,用來支持實時決策。
Flume作為數據傳輸工具獲取新增加的日志,并把新增的數據傳輸到指定的位置。Storm是Twitter公司開源的分布式實時流處理框架,可以實現單節點百萬級的數據處理與運算。
實時日志分析的過程是:使用Flume監聽日志文件,并實時把每一條日志信息抓取下來存入Kafka消息系統中,再由Strom消費Kafka中的消息,接下來使用用戶定義的Storm Topology進行日志的分析并輸出到Redis緩存數據庫中,最后由應用程序讀取緩存數據庫的內容并顯示,也可以把結果持久化的存儲在MySQL中。在Flume和Storm中加一個Kafka消息系統是為了防止Flume和Storm的處理速度不匹配而丟失數據。
(3)結果報表
常見的結果報表有:1)進行各種數據統計,這是最典型的報表形式,方便管理人員了解網絡的使用情況。2)分析某一現象為什么發生,為了進一步找出原因,可能需要和領域專家進行溝通,設計進一步的數據分析方案。3)通過歷史數據的分析,可以使用分析報告給出未來的趨勢,提供給管理人員與決策者作為決策的參考。Highcharts是一個主流的JavaScript圖表庫,主要為Web站點提供直觀的、交互式的圖表體驗,支持線圖、條形圖、曲面圖、條形曲面圖、柱狀圖、餅圖、散布圖等圖表樣式。使用Highcharts可以生產直觀的報表。
本文介紹數據分析和網絡日志分析的背景及常用分析技術。分析了大數據的特征,以及大數據分析的步驟及兩種典型的大數據分析模型。目前的日志數據滿足大數據的特征,以前的常規分析方法不再有效,根據使用場景構建了實時和離線的大數據日志分析體系結構。進一步的研究工作是要通過深入挖掘日志文件的隱含信息,并利用日志信息進行信息系統的故障溯源。
參考文獻:
[1]趙迦琪,張彩云,牛永紅.ELK日志分析平臺在系統運維中的應用[J].電子技術與軟件工程,2017(06):182-183.
[2]馮興杰,王文超.Hadoop與Spark應用場景研究[J].計算機應用研究,2018(09):1-8.
[3]彭敏佳林勇吳翀嚴盟.MapReduce技術在日志分析中的研究應用[J].計算機時代,2017(06):26-28.
[4]陳康賢.大型分布式網站架構設計與實踐[M].北京:電子工業出版社,2014.
[5]李濤.網絡安全中的數據挖掘技術[M].清華大學出版社,2017.
[6]薛文娟.基于層次聚類的日志分析技術研究[D].山東師范大學,2013.
[7]陳愛民,盛昀瑤.基于MapReduce的Web日志挖掘算法研究[J].現代計算機(專業版),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