硬核乾貨!海量日誌分析技術,聽說IT達人都想知道……
大資料時代,資料量呈幾何增長,為避免被時代潮流“拍在沙灘上”,就必須瞭解大資料的核心組成要素。其中,海量日誌尤為重要,不管是IT達人還是企業本身,掌握海量日誌的分析技術都必不可少。
今天,就讓小愛帶你探祕海量日誌分析技術,一起來看吧。
一.為什麼海量日誌很重要?
在討論海量日誌分析技術之前,我們先來討論一下什麼是海量日誌。
海量日誌是大資料的重要組成部分。資料倉庫之父比爾.恩門(Bill Inmon) 在他的2016年的新書《資料架構》中提到,企業中資料的組成部分中,非結構化的資料佔比已經達到了 70% 以上。而這些非結構化資料中,佔據主導位置的是日誌資料,可以說日誌資料是“大資料”分析的核心。
這些資料貫穿所有的企業經營活動,使用者的操作行為、伺服器的系統日誌、網路裝置的日誌記錄、應用程式的除錯日誌等等, 會直接影響企業的日常執行,與IT運維人員也是息息相關。
二.海量日誌資料有什麼特徵?
海量的日誌資料十分滿足大資料的4V特徵:
1. 產生速度快,每秒超過數萬、數十萬的情況已經比比皆是
2. 資料量巨大,速度一快,如果想要分析這資料,勢必會帶來巨大的資料量
3. 資料種類多,日誌資料涵蓋IT系統的方方面面
4. 價值密度低,雖然日誌資料中能夠分析出大量有價值的資訊,往往一條分析結果需要數百萬甚至上億條的資料支撐,而且單條日誌的資訊量有限
日誌樣例
我們可以通過一組資料來感受一下 海量日誌的威力 。假設有一個對外應用伺服器叢集,產生日誌的速度為10000條/s,每條日誌的平均大小為200位元組,那麼這個應用伺服器每天、每月、每年的日誌增量為:
三.大資料條件下計算方式的變革
從行式儲存到列式儲存,再到流式計算
這麼多的資料,我們如何來進行分析呢?一方面我們需要能夠處理更多的資料,另一方面,我們希望查詢結果更加的實時(例如:1秒之內返回結果)。
如果這些資料在關係型資料庫的世界裡,資料以行的方式儲存,假設我們需要對數以億計的資料中的某一個數據進行求和計算,那麼 首先 ,我們需要將所有這些資料全部讀出來,找到對應的欄位, 然後 進行累加,而我們的計算瓶頸完全取決於磁碟的讀寫能力。
我們可以用分庫或者分表的方式將資料庫進行拆分,增加系統平行計算的能力,但是可能依然需要數百臺裝置才能在1s之內返回這些資料。然而我們沒有這麼多機器,那麼只能慢慢等待分析任務執行完畢。如此一來,既耗時又費力。
後來,大資料技術誕生了。在大資料分析的場景中,列式儲存架構取代了行式儲存。如果要對某一個欄位進行統計,只需要讀取相應列的資料,不需要進行整個表的遍歷,這樣一來,需要讀取的資料量變小了,同時,MapReduce 也能夠使得分析應用更好地實現分散式計算。
可即便如此,計算的瓶頸依然在磁碟的讀寫效率上,計算速度並沒有本質的變化,如果需要做實時資料的分析,還是需要大投入大量的儲存和計算資源。
行式資料庫vs列式資料庫
從邏輯上來說,如果要對海量的資料進行快速的分析,在資源不變的前提下,最好的方法就是減少每次計算所需要讀取的資料量。但是如果減少了資料量的讀取,分析的結果就無法做到更大的覆蓋範圍和更加精準的結果。
基於這個思考,我們可以將計算分層,將最近一段時間產生的資料放在實時要求高的資料儲存中,使用更好的計算資源來進行分析,將更長時間的歷史資料存入離線儲存裝置中進行批量計算,這部分計算時間可能長達數十分鐘或者數個小時,但是計算的結果可以用於和實時分析的結果進行合併,使得分析的覆蓋範圍和結果的精準度不受影響。
在大資料分析技術中,還有一項非常重要的技術 —— 流式計算 ,即資料進入系統時就進行必要的預處理操作,這部分的處理,同樣減少了後續資料分析中所需要讀取的資料量。
海量日誌分析技術資料流程圖
四.海量日誌分析技術
愛數 AnyRobot Family 3.0(下面簡稱 AnyRobot) 海量日誌分析融入了大資料分析技術,其核心要點在於三個重要方面:海量日誌的採集處理、海量日誌的儲存、海量日誌的分析。下面,我們就以AnyRobot為例剖析海量日誌分析技術。
1.海量日誌的採集處理方面
有兩個核心點,分別是資料採集的多樣性和實時資料處理的效能。
在採集資料來源的多樣性方面,AnyRobot 可以對接檔案、TCP二進位制資料量、壓縮檔案、結構化資料、Syslog、SNMP 等多種資料來源,我們還內建了大量的分析模板,支援市面上多種網路裝置、資料庫、應用軟體、中介軟體等各類應用,可以實現大部分場景資料的“開箱即用”。當然,資料來源的接入也可以通過介面配置的方式快速完成。在實時處理方面,AnyRobot 採用了可擴充套件的訊息佇列和流計算引擎,保證了實時處理的效能,能夠自如地應對數萬甚至數十萬每秒的資料流量。
2.海量日誌的儲存方面
我們採用儲存分層的策略對資料進行分層,根據我們上文中探討的分析思路,應該儘量減少使用者在實時分析場景下使用的資料量,我們將分析資料的儲存分為三個層次:
第一層:用於實時分析和查詢的資料,這部分資料有兩個來源。第一部分是短期內進入系統中的資料,這部分資料保留的大量的細節資訊,可以使用者排錯、細粒度的管理分析、事件分析等場景。第二部分是歷史資料經過離線批量計算產生的分析結果,這部分資料的細節已經被隱藏起來,主要使用者統計分析和報表場景。這一部分的資料由於實時性要求高,也有高可用的要求,因此資料的量多於進入系統的資料量,儲存方式可以採用更高效能的 SSD 儲存。
第二層:使用者儲存離線分析的資料,這部分資料是對第一層資料的長期儲存和離線分析,這部分資料可以儲存在成本更低的物件儲存或者雲端儲存中,能夠滿足小時級別的資料分析和訪問需求,需要進行實時分析和日誌追溯時,可以重新匯入到實時分析儲存中去。這部分資料可以通過壓縮的方式進行儲存,由於日誌檔案的特性,壓縮比最高能夠達到原始資料1:5以上。
第三層:歸檔儲存,由於合規性的要求和日誌長期儲存的需求,可以將更長時間的日誌資料通過備份的方式進行歸檔,採用愛數的 AnyBackup 就能夠完成這一工作。這部分資料不需要再實時或者離線分析中進行檢視,對它們的歷史分析結果已經合併到和上兩層的分析當中。這部分資料採用 AnyBackup 自帶的壓縮和重複資料刪除功能,能夠獲得 95% 以上重複資料刪除率
資料分層儲存
3.海量日誌的分析方面
AnyRobot 實現了一個基於 SPL(搜尋處理語言)的搜尋引擎,採用分散式計算的方式對資料進行分析和計算,在實時分析方面能夠快速的在數億級別資料量的情況下進行實時分析,同時能夠相容 Hadoop、Spark 等離線分析引擎,並能連線外部資料來源,將實時分析、離線分析結果和外部資料來源的查詢結果合並後呈現給終端使用者。
在新版本的 AnyRobot 中也集成了機器學習能力,能夠實現異常檢測、趨勢分析等應用,滿足更多使用場景的覆蓋。
五.結語
日誌是大資料的重要組成,為了滿足海量日誌分析的需要,我們需要從海量日誌處理、儲存和分析三個方面來設計我們的日誌分析系統。愛數 AnyRobot Family 3.0 通過加入訊息佇列、流式處理、儲存分層、離線分析、機器學習等特性,是的海量日誌分析的的效率和使用者體驗都得到了大幅的提升。
【本文版權歸儲存線上所有,未經許可不得轉載。文章僅代表作者看法,如有不同觀點,歡迎新增儲存線上微信公眾號(微訊號:doitmedia)進行交流。】