大數(shù)據(jù)時(shí)代,數(shù)據(jù)量呈幾何增長,為避免被時(shí)代潮流“拍在沙灘上”,就必須了解大數(shù)據(jù)的核心組成要素。其中,海量日志尤為重要,不管是IT達(dá)人還是企業(yè)本身,掌握海量日志的分析技術(shù)都必不可少。
今天,就讓小愛帶你探秘海量日志分析技術(shù),一起來看吧。
一.為什么海量日志很重要?
在討論海量日志分析技術(shù)之前,我們先來討論一下什么是海量日志。
海量日志是大數(shù)據(jù)的重要組成部分。數(shù)據(jù)倉庫之父比爾.恩門(Bill Inmon) 在他的2016年的新書《數(shù)據(jù)架構(gòu)》中提到,企業(yè)中數(shù)據(jù)的組成部分中,非結(jié)構(gòu)化的數(shù)據(jù)占比已經(jīng)達(dá)到了 70% 以上。而這些非結(jié)構(gòu)化數(shù)據(jù)中,占據(jù)主導(dǎo)位置的是日志數(shù)據(jù),可以說日志數(shù)據(jù)是“大數(shù)據(jù)”分析的核心。
這些數(shù)據(jù)貫穿所有的企業(yè)經(jīng)營活動(dòng),用戶的操作行為、服務(wù)器的系統(tǒng)日志、網(wǎng)絡(luò)設(shè)備的日志記錄、應(yīng)用程序的調(diào)試日志等等,會(huì)直接影響企業(yè)的日常運(yùn)行,與IT運(yùn)維人員也是息息相關(guān)。
二.海量日志數(shù)據(jù)有什么特征?
海量的日志數(shù)據(jù)十分滿足大數(shù)據(jù)的4V特征:
1. 產(chǎn)生速度快,每秒超過數(shù)萬、數(shù)十萬的情況已經(jīng)比比皆是
2. 數(shù)據(jù)量巨大,速度一快,如果想要分析這數(shù)據(jù),勢(shì)必會(huì)帶來巨大的數(shù)據(jù)量
3. 數(shù)據(jù)種類多,日志數(shù)據(jù)涵蓋IT系統(tǒng)的方方面面
4. 價(jià)值密度低,雖然日志數(shù)據(jù)中能夠分析出大量有價(jià)值的信息,往往一條分析結(jié)果需要數(shù)百萬甚至上億條的數(shù)據(jù)支撐,而且單條日志的信息量有限
日志樣例
我們可以通過一組數(shù)據(jù)來感受一下海量日志的威力。假設(shè)有一個(gè)對(duì)外應(yīng)用服務(wù)器集群,產(chǎn)生日志的速度為10000條/s,每條日志的平均大小為200字節(jié),那么這個(gè)應(yīng)用服務(wù)器每天、每月、每年的日志增量為:
三.大數(shù)據(jù)條件下計(jì)算方式的變革
從行式存儲(chǔ)到列式存儲(chǔ),再到流式計(jì)算
這么多的數(shù)據(jù),我們?nèi)绾蝸磉M(jìn)行分析呢?一方面我們需要能夠處理更多的數(shù)據(jù),另一方面,我們希望查詢結(jié)果更加的實(shí)時(shí)(例如:1秒之內(nèi)返回結(jié)果)。
如果這些數(shù)據(jù)在關(guān)系型數(shù)據(jù)庫的世界里,數(shù)據(jù)以行的方式存儲(chǔ),假設(shè)我們需要對(duì)數(shù)以億計(jì)的數(shù)據(jù)中的某一個(gè)數(shù)據(jù)進(jìn)行求和計(jì)算,那么首先,我們需要將所有這些數(shù)據(jù)全部讀出來,找到對(duì)應(yīng)的字段,然后進(jìn)行累加,而我們的計(jì)算瓶頸完全取決于磁盤的讀寫能力。
我們可以用分庫或者分表的方式將數(shù)據(jù)庫進(jìn)行拆分,增加系統(tǒng)并行計(jì)算的能力,但是可能依然需要數(shù)百臺(tái)設(shè)備才能在1s之內(nèi)返回這些數(shù)據(jù)。然而我們沒有這么多機(jī)器,那么只能慢慢等待分析任務(wù)執(zhí)行完畢。如此一來,既耗時(shí)又費(fèi)力。
后來,大數(shù)據(jù)技術(shù)誕生了。在大數(shù)據(jù)分析的場景中,列式存儲(chǔ)架構(gòu)取代了行式存儲(chǔ)。如果要對(duì)某一個(gè)字段進(jìn)行統(tǒng)計(jì),只需要讀取相應(yīng)列的數(shù)據(jù),不需要進(jìn)行整個(gè)表的遍歷,這樣一來,需要讀取的數(shù)據(jù)量變小了,同時(shí),MapReduce 也能夠使得分析應(yīng)用更好地實(shí)現(xiàn)分布式計(jì)算。
可即便如此,計(jì)算的瓶頸依然在磁盤的讀寫效率上,計(jì)算速度并沒有本質(zhì)的變化,如果需要做實(shí)時(shí)數(shù)據(jù)的分析,還是需要大投入大量的存儲(chǔ)和計(jì)算資源。
行式數(shù)據(jù)庫vs列式數(shù)據(jù)庫
從邏輯上來說,如果要對(duì)海量的數(shù)據(jù)進(jìn)行快速的分析,在資源不變的前提下,最好的方法就是減少每次計(jì)算所需要讀取的數(shù)據(jù)量。但是如果減少了數(shù)據(jù)量的讀取,分析的結(jié)果就無法做到更大的覆蓋范圍和更加精準(zhǔn)的結(jié)果。
基于這個(gè)思考,我們可以將計(jì)算分層,將最近一段時(shí)間產(chǎn)生的數(shù)據(jù)放在實(shí)時(shí)要求高的數(shù)據(jù)存儲(chǔ)中,使用更好的計(jì)算資源來進(jìn)行分析,將更長時(shí)間的歷史數(shù)據(jù)存入離線存儲(chǔ)設(shè)備中進(jìn)行批量計(jì)算,這部分計(jì)算時(shí)間可能長達(dá)數(shù)十分鐘或者數(shù)個(gè)小時(shí),但是計(jì)算的結(jié)果可以用于和實(shí)時(shí)分析的結(jié)果進(jìn)行合并,使得分析的覆蓋范圍和結(jié)果的精準(zhǔn)度不受影響。
在大數(shù)據(jù)分析技術(shù)中,還有一項(xiàng)非常重要的技術(shù) —— 流式計(jì)算,即數(shù)據(jù)進(jìn)入系統(tǒng)時(shí)就進(jìn)行必要的預(yù)處理操作,這部分的處理,同樣減少了后續(xù)數(shù)據(jù)分析中所需要讀取的數(shù)據(jù)量。
海量日志分析技術(shù)數(shù)據(jù)流程圖
四.海量日志分析技術(shù)
愛數(shù) AnyRobot Family 3.0(下面簡稱 AnyRobot) 海量日志分析融入了大數(shù)據(jù)分析技術(shù),其核心要點(diǎn)在于三個(gè)重要方面:海量日志的采集處理、海量日志的存儲(chǔ)、海量日志的分析。下面,我們就以AnyRobot為例剖析海量日志分析技術(shù)。
1.海量日志的采集處理方面
有兩個(gè)核心點(diǎn),分別是數(shù)據(jù)采集的多樣性和實(shí)時(shí)數(shù)據(jù)處理的性能。
在采集數(shù)據(jù)源的多樣性方面,AnyRobot 可以對(duì)接文件、TCP二進(jìn)制數(shù)據(jù)量、壓縮文件、結(jié)構(gòu)化數(shù)據(jù)、Syslog、SNMP 等多種數(shù)據(jù)源,我們還內(nèi)置了大量的分析模板,支持市面上多種網(wǎng)絡(luò)設(shè)備、數(shù)據(jù)庫、應(yīng)用軟件、中間件等各類應(yīng)用,可以實(shí)現(xiàn)大部分場景數(shù)據(jù)的“開箱即用”。當(dāng)然,數(shù)據(jù)源的接入也可以通過界面配置的方式快速完成。在實(shí)時(shí)處理方面,AnyRobot 采用了可擴(kuò)展的消息隊(duì)列和流計(jì)算引擎,保證了實(shí)時(shí)處理的性能,能夠自如地應(yīng)對(duì)數(shù)萬甚至數(shù)十萬每秒的數(shù)據(jù)流量。
2.海量日志的存儲(chǔ)方面
我們采用存儲(chǔ)分層的策略對(duì)數(shù)據(jù)進(jìn)行分層,根據(jù)我們上文中探討的分析思路,應(yīng)該盡量減少用戶在實(shí)時(shí)分析場景下使用的數(shù)據(jù)量,我們將分析數(shù)據(jù)的存儲(chǔ)分為三個(gè)層次:
第一層:用于實(shí)時(shí)分析和查詢的數(shù)據(jù),這部分?jǐn)?shù)據(jù)有兩個(gè)來源。第一部分是短期內(nèi)進(jìn)入系統(tǒng)中的數(shù)據(jù),這部分?jǐn)?shù)據(jù)保留的大量的細(xì)節(jié)信息,可以用戶排錯(cuò)、細(xì)粒度的管理分析、事件分析等場景。第二部分是歷史數(shù)據(jù)經(jīng)過離線批量計(jì)算產(chǎn)生的分析結(jié)果,這部分?jǐn)?shù)據(jù)的細(xì)節(jié)已經(jīng)被隱藏起來,主要用戶統(tǒng)計(jì)分析和報(bào)表場景。這一部分的數(shù)據(jù)由于實(shí)時(shí)性要求高,也有高可用的要求,因此數(shù)據(jù)的量多于進(jìn)入系統(tǒng)的數(shù)據(jù)量,存儲(chǔ)方式可以采用更高性能的 SSD 存儲(chǔ)。
第二層:用戶存儲(chǔ)離線分析的數(shù)據(jù),這部分?jǐn)?shù)據(jù)是對(duì)第一層數(shù)據(jù)的長期保存和離線分析,這部分?jǐn)?shù)據(jù)可以存儲(chǔ)在成本更低的對(duì)象存儲(chǔ)或者云存儲(chǔ)中,能夠滿足小時(shí)級(jí)別的數(shù)據(jù)分析和訪問需求,需要進(jìn)行實(shí)時(shí)分析和日志追溯時(shí),可以重新導(dǎo)入到實(shí)時(shí)分析存儲(chǔ)中去。這部分?jǐn)?shù)據(jù)可以通過壓縮的方式進(jìn)行存儲(chǔ),由于日志文件的特性,壓縮比最高能夠達(dá)到原始數(shù)據(jù)1:5以上。
第三層:歸檔存儲(chǔ),由于合規(guī)性的要求和日志長期保存的需求,可以將更長時(shí)間的日志數(shù)據(jù)通過備份的方式進(jìn)行歸檔,采用愛數(shù)的 AnyBackup 就能夠完成這一工作。這部分?jǐn)?shù)據(jù)不需要再實(shí)時(shí)或者離線分析中進(jìn)行查看,對(duì)它們的歷史分析結(jié)果已經(jīng)合并到和上兩層的分析當(dāng)中。這部分?jǐn)?shù)據(jù)采用 AnyBackup 自帶的壓縮和重復(fù)數(shù)據(jù)刪除功能,能夠獲得 95% 以上重復(fù)數(shù)據(jù)刪除率
數(shù)據(jù)分層存儲(chǔ)
3.海量日志的分析方面
AnyRobot 實(shí)現(xiàn)了一個(gè)基于 SPL(搜索處理語言)的搜索引擎,采用分布式計(jì)算的方式對(duì)數(shù)據(jù)進(jìn)行分析和計(jì)算,在實(shí)時(shí)分析方面能夠快速的在數(shù)億級(jí)別數(shù)據(jù)量的情況下進(jìn)行實(shí)時(shí)分析,同時(shí)能夠兼容 Hadoop、Spark 等離線分析引擎,并能連接外部數(shù)據(jù)源,將實(shí)時(shí)分析、離線分析結(jié)果和外部數(shù)據(jù)源的查詢結(jié)果合并后呈現(xiàn)給最終用戶。
在新版本的 AnyRobot 中也集成了機(jī)器學(xué)習(xí)能力,能夠?qū)崿F(xiàn)異常檢測(cè)、趨勢(shì)分析等應(yīng)用,滿足更多使用場景的覆蓋。
五.結(jié)語
日志是大數(shù)據(jù)的重要組成,為了滿足海量日志分析的需要,我們需要從海量日志處理、存儲(chǔ)和分析三個(gè)方面來設(shè)計(jì)我們的日志分析系統(tǒng)。愛數(shù) AnyRobot Family 3.0 通過加入消息隊(duì)列、流式處理、存儲(chǔ)分層、離線分析、機(jī)器學(xué)習(xí)等特性,是的海量日志分析的的效率和用戶體驗(yàn)都得到了大幅的提升。
評(píng)論