莫恭鈿,韋 端
(廣西交通職業(yè)技術(shù)學(xué)院,廣西 南寧 530023)
當(dāng)前,數(shù)字圖書(shū)館作為一種全面、高效、便捷的公共資源管理平臺(tái)正在得到廣泛的應(yīng)用.通過(guò)使用Java與Nginx服務(wù)器的網(wǎng)站技術(shù),開(kāi)發(fā)出符合高職院校業(yè)務(wù)需求的數(shù)字圖書(shū)館公共資源管理平臺(tái),可以為高職院校專業(yè)建設(shè)、課程開(kāi)發(fā)、師資隊(duì)伍培養(yǎng)、教改和科研等工作提供高效率、深層次、多元化信息服務(wù)能力.但是,隨著網(wǎng)絡(luò)用戶訪問(wèn)流量的不斷增大,讓數(shù)字圖書(shū)館公共資源管理平臺(tái)面臨著巨大的網(wǎng)絡(luò)安全風(fēng)險(xiǎn).
在網(wǎng)絡(luò)日志處理流程中,主要有兩類網(wǎng)絡(luò)日志處理方式,[1]一種是日志數(shù)據(jù)離線處理,另一種是日志數(shù)據(jù)實(shí)時(shí)流處理.網(wǎng)絡(luò)本數(shù)字圖書(shū)館公共資源管理平臺(tái),將使用實(shí)時(shí)日志數(shù)據(jù)處理.通過(guò)使用 Nginx、Flume、Kafka和Spark Streaming的組合技術(shù)進(jìn)行日志分析方案設(shè)計(jì),[2]讓本系統(tǒng)具有實(shí)時(shí)性、功能針對(duì)性強(qiáng)、操作簡(jiǎn)便等特點(diǎn).
數(shù)字圖書(shū)館公共資源管理平臺(tái)所產(chǎn)生的web日志信息主要包含表1內(nèi)容.
通過(guò)表1數(shù)據(jù)字段的信息,主要進(jìn)行如下3個(gè)方面分析:
(1)網(wǎng)站平臺(tái)流量分析.重點(diǎn)在于分析不同的網(wǎng)絡(luò)用戶在一段時(shí)間內(nèi)使用數(shù)字圖書(shū)館公共資源管理平臺(tái)的流量變化趨勢(shì)情況.主要指標(biāo)是總頁(yè)面訪問(wèn)量和各網(wǎng)絡(luò)用戶的頁(yè)面訪問(wèn)量.
(2)用戶來(lái)源分析.統(tǒng)計(jì)分析通過(guò)各種搜索引擎工具、網(wǎng)站外部鏈接來(lái)源以及其他等方式進(jìn)入本網(wǎng)站平臺(tái)的情況.通過(guò)用戶來(lái)源分析結(jié)果可以及時(shí)提醒數(shù)字圖書(shū)館公共資源管理平臺(tái)相關(guān)管理人員,哪種類型的來(lái)源為其帶來(lái)了更多用戶訪問(wèn),以及為網(wǎng)站溯源調(diào)查提供便利.
(3)用戶所訪問(wèn)網(wǎng)頁(yè)分析.統(tǒng)計(jì)分析每個(gè)用戶訪問(wèn)數(shù)字圖書(shū)館公共資源管理平臺(tái)頁(yè)面的相關(guān)操作,分析內(nèi)容包括統(tǒng)計(jì)分析頁(yè)面對(duì)訪問(wèn)者吸引力程度,用戶對(duì)網(wǎng)頁(yè)有哪些潛在安全、違規(guī)操作,以便幫助平臺(tái)管理員更有針對(duì)性的提高平臺(tái)的安全性和可靠性.
表1 web日志主要信息Tab.1 main information of Web log
Nginx:主要考慮數(shù)字圖書(shū)館公共資源管理平臺(tái)是運(yùn)行在多個(gè)linux系統(tǒng)的Nginx服務(wù)器上,平臺(tái)運(yùn)行使用所產(chǎn)生的日志文件就是Nginx原始日志文件,并且Nginx可以提供負(fù)載均衡等技術(shù)功能,提高了實(shí)時(shí)日志系統(tǒng)資源的利用率.
Flume:可以實(shí)現(xiàn)可靠的、分布式的實(shí)時(shí)日志采集和傳輸能力,便于日志數(shù)據(jù)的收集,適用于作為數(shù)字圖書(shū)館公共資源管理平臺(tái)Nginx日志文件收集.
Kafka:主要用于快速并行機(jī)制加載實(shí)時(shí)的日志數(shù)據(jù),[3]作為集群功能為后續(xù)的Spark Streaming提供數(shù)據(jù)分析.
Spark Streaming:可以實(shí)現(xiàn)實(shí)時(shí)流數(shù)據(jù)處理能力,并且具有強(qiáng)大的容錯(cuò)機(jī)制.可以將Kafka的實(shí)時(shí)日志流數(shù)據(jù),根據(jù)某些時(shí)間設(shè)定和數(shù)據(jù)格式要求,通過(guò)程序處理,得到最終實(shí)時(shí)日志分析結(jié)果.
同時(shí),本人以及所在單位的工作團(tuán)隊(duì)具有較高的軟件開(kāi)發(fā)能力以及工作經(jīng)驗(yàn),為本系統(tǒng)的順利研究和開(kāi)發(fā)提供了重要的技術(shù)保障.[4]
實(shí)時(shí)日志分析系統(tǒng)應(yīng)具有對(duì)網(wǎng)站平臺(tái)流量分析、用戶來(lái)源分析以及所訪問(wèn)網(wǎng)頁(yè)分析三大功能機(jī)構(gòu),如圖1所示.
圖1 系統(tǒng)總體結(jié)構(gòu)圖Fig.1 overall structure of the system
數(shù)據(jù)庫(kù)的功能是主要用來(lái)存放日志分析的最終結(jié)果,[5]以便于數(shù)據(jù)的保存以及為最后圖形化顯示提供數(shù)據(jù)來(lái)源.本系統(tǒng)涉及網(wǎng)站平臺(tái)流量分析、用戶來(lái)源分析以及所訪問(wèn)網(wǎng)頁(yè)分析三大功能機(jī)構(gòu).因此,可以制定網(wǎng)站平臺(tái)流量表、用戶來(lái)源表以及所訪問(wèn)網(wǎng)頁(yè)表三張表進(jìn)行分析后數(shù)據(jù)的保存.
工具類的功能作用主要包含了實(shí)體類的封裝,便于可視化界面的數(shù)據(jù)呈現(xiàn).以及對(duì)數(shù)據(jù)庫(kù)的操作、數(shù)據(jù)格式的轉(zhuǎn)換、實(shí)時(shí)日志文件的數(shù)據(jù)清洗.
離線日志分析,對(duì)日志信息的監(jiān)控、告警、實(shí)時(shí)分析能力較弱.較為流行的離線日志分析系統(tǒng)采用Flume、HDFS和Spark SQL相結(jié)合的技術(shù)方案.離線日志分析系統(tǒng)側(cè)重于在離線階段完成數(shù)據(jù)分析過(guò)程,因此得到的數(shù)據(jù)分析結(jié)果相對(duì)來(lái)說(shuō)是較為滯后的,無(wú)法將分析結(jié)果及時(shí)反映,而實(shí)時(shí)日志分析則填補(bǔ)了這一部分的空白.通過(guò)采用Nginx、Flume、Kafka、Spark Streaming的組合技術(shù)建立實(shí)時(shí)日志分析系統(tǒng),可以利用Nginx的高并發(fā)、低內(nèi)存消耗、配置簡(jiǎn)單,flume可以提供分布式、高效率的網(wǎng)站日志信息收集功能,kafka可以實(shí)現(xiàn)持久化存儲(chǔ),Spark streaming具有實(shí)時(shí)處理日志數(shù)據(jù),并且Nginx、Flume、Kafka、Spark Streaming的組合技術(shù)是目前較為技術(shù)成熟、數(shù)據(jù)收集較為可靠也是最為常用的實(shí)時(shí)日志數(shù)據(jù)分析處理的解決方案.通過(guò)實(shí)時(shí)日志分析,能夠展示用戶較為真實(shí)的需求結(jié)果.
核心程序流程主要分為部署Nginx服務(wù)器、使用Flume實(shí)時(shí)讀取Nginx日志、通過(guò)Kafka集群接收Flume實(shí)時(shí)數(shù)據(jù)、在Spark Streaming接收Kafka數(shù)據(jù)等五大大步驟,具體如圖2所示.
圖2 實(shí)時(shí)日志分析流程Fig.2 Real time log analysis process
在多個(gè)linux系統(tǒng)中通過(guò)流量均衡負(fù)載技術(shù)部署多臺(tái)Nginx服務(wù)器,數(shù)字圖書(shū)館公共資源管理平臺(tái)掛載在Nginx服務(wù)器上,平臺(tái)所產(chǎn)生的原始日志文件在Nginx服務(wù)器產(chǎn)生.通過(guò)多個(gè)Nginx服務(wù)器接收數(shù)字圖書(shū)館公共資源管理平臺(tái)日志文件,有效加強(qiáng)了平臺(tái)運(yùn)行的數(shù)據(jù)處理能力、提高了網(wǎng)絡(luò)的靈活性和安全性.
在每個(gè)Nginx節(jié)點(diǎn)安裝Flume軟件,通過(guò)Flume軟件將本服務(wù)器的數(shù)字圖書(shū)館公共資源管理平臺(tái)日志文件進(jìn)行實(shí)時(shí)采集,并將實(shí)時(shí)日志數(shù)據(jù)發(fā)送到Kaf Ka進(jìn)行統(tǒng)一集中處理.每個(gè)Nginx節(jié)點(diǎn)主要流程為:安裝Flume軟件→定義agent各組件→配置source組件→配置sink組件→配置channel組件→配置source channel sink之間的連接關(guān)系→啟動(dòng)agent去采集Nginx服務(wù)器的日志文件.
通過(guò)flume Kafka軟件,實(shí)現(xiàn)手動(dòng)設(shè)定flume的sink命令,指定實(shí)時(shí)日志數(shù)據(jù)的傳送目的地之后,將平臺(tái)實(shí)時(shí)日志數(shù)據(jù)從channel數(shù)據(jù)傳輸通道中提取出,再通過(guò)kafka的相關(guān)功能將實(shí)時(shí)日志信息寫(xiě)進(jìn)并保存.即使日志消息有沒(méi)有被消耗,Kafka也會(huì)自動(dòng)存檔所有的實(shí)時(shí)日志信息,確保實(shí)時(shí)日志信息的安全、可靠.
Kafka集群中傳來(lái)的實(shí)時(shí)日志數(shù)據(jù)信息被spark streaming轉(zhuǎn)換為Dstream格式之后再接收和使用.本實(shí)時(shí)日志分析系統(tǒng)將通過(guò)直接讀取的功能接收實(shí)時(shí)日志數(shù)據(jù),首先,在Spark Streaming程序中通過(guò)驅(qū)動(dòng)程序啟動(dòng)作業(yè),然后使用執(zhí)行器通過(guò)偏移范圍的方式讀取Kafka集群中的日志文件數(shù)據(jù).[5]讀取完一輪數(shù)據(jù)之后,再通過(guò)查詢Kafka中的最新偏移范圍,再執(zhí)行日志數(shù)據(jù)的讀取,依次循環(huán)直到查詢不到最新的偏移范圍為止.具體流程如圖3所示.
圖3 直接讀取方式接收數(shù)據(jù)Fig.3 Receiving data by direct reading
(1)日志解析程序設(shè)計(jì):為了消除未解析的日志數(shù)據(jù)帶來(lái)的影響,對(duì)日志解析程序設(shè)計(jì)要實(shí)現(xiàn)兩個(gè)操作.一是對(duì)日志數(shù)據(jù)進(jìn)行數(shù)據(jù)清理;二是解析得到本系統(tǒng)功能所需的日志數(shù)據(jù)元組.偽代碼如下:
//清理日志數(shù)據(jù)
//logPattern定義日志格式的正則表達(dá)式
def filter Log(s:String)={
logPattern.findFirstIn(s)match{
case Some(logPattern(_*))=>true
case_=>false
}
}
//解析日志數(shù)據(jù)
def parseLog(s:String)={
val m=logPattern.find AllIn(s)
if(m.hasNext){
//如下方式提取需要的日志數(shù)據(jù)字段,包括客戶的IP地址、用戶來(lái)源、用戶瀏覽頁(yè)面信息
val clientIP=m.group(1).toString
}}
(2)主體程序設(shè)計(jì):通過(guò)利用Spark Streaming編寫(xiě)程序?qū)崟r(shí)分析日志數(shù)據(jù),實(shí)現(xiàn)網(wǎng)站平臺(tái)流量分析、用戶來(lái)源分析、網(wǎng)站頁(yè)面分析功能要求,最終將日志分析結(jié)果寫(xiě)入數(shù)據(jù)庫(kù)進(jìn)行保存,同時(shí)也可以直觀地展示日志分析結(jié)果.具體編寫(xiě)程序流程如圖4所示.
圖4 Spark Streaming編寫(xiě)程序流程Fig.4 Spark streaming programming process
軟件測(cè)試就是在測(cè)試階段設(shè)計(jì)出一系列的設(shè)計(jì)方案來(lái)驗(yàn)證系統(tǒng)是否存在錯(cuò)漏,[4]本實(shí)時(shí)日志分析系統(tǒng)通過(guò)了性能測(cè)試和功能測(cè)試.
通過(guò)使用TTCPW等多個(gè)測(cè)試工具,對(duì)實(shí)時(shí)日志分析系統(tǒng)進(jìn)行性能測(cè)試.可知系統(tǒng)的網(wǎng)絡(luò)吞吐量、頁(yè)面響應(yīng)時(shí)間、并發(fā)數(shù)、系統(tǒng)性能都達(dá)標(biāo).性能測(cè)試結(jié)果如表2所示.
表2 系統(tǒng)性能測(cè)試Tab.2 system performance test
在數(shù)字圖書(shū)館公共資源平臺(tái)正常運(yùn)行情況下,對(duì)本實(shí)時(shí)日志分析系統(tǒng)進(jìn)行功能測(cè)試.例如,測(cè)試統(tǒng)計(jì)分析本平臺(tái)的用戶訪問(wèn)流量在24 h當(dāng)中的占比,經(jīng)過(guò)分析測(cè)試結(jié)果如圖5所示.可知一天當(dāng)中15時(shí)是整個(gè)平臺(tái)訪問(wèn)的流量高峰期,其次是16時(shí)和20時(shí).其余的功能也能夠顯示出分析結(jié)果.功能呈現(xiàn)結(jié)果達(dá)到了預(yù)期的要求.
圖5 系統(tǒng)功能測(cè)試Fig.5 system function test
平臺(tái)經(jīng)過(guò)了性能測(cè)試和功能模塊測(cè)試之后,又進(jìn)行了壓力測(cè)試以及試運(yùn)行測(cè)試.[4]經(jīng)過(guò)測(cè)試能夠?qū)崿F(xiàn)對(duì)平臺(tái)的總訪問(wèn)量、用戶來(lái)源以及網(wǎng)站頁(yè)面等功能進(jìn)行實(shí)時(shí)數(shù)據(jù)分析,并能夠以可視化的方式正常顯示分析結(jié)果,系統(tǒng)的平均反應(yīng)時(shí)間能夠達(dá)到日志數(shù)據(jù)采集的要求,且在長(zhǎng)時(shí)間的運(yùn)行后,依然能夠正常分析處理日志數(shù)據(jù).
經(jīng)過(guò)測(cè)試,基于數(shù)字圖書(shū)館公共資源平臺(tái)的實(shí)時(shí)日志分析系統(tǒng)各項(xiàng)功能都達(dá)到預(yù)期設(shè)計(jì)目標(biāo),具有數(shù)據(jù)實(shí)時(shí)分析、功能針對(duì)性強(qiáng)、結(jié)果可視化直觀等特點(diǎn),完全符合數(shù)字圖書(shū)館公共資源管理平臺(tái)的要求.對(duì)數(shù)字圖書(shū)館公共資源管理平臺(tái)的使用,能夠及時(shí)統(tǒng)計(jì)平臺(tái)的數(shù)據(jù)訪問(wèn)量、對(duì)平臺(tái)的用戶來(lái)源進(jìn)行分析以及對(duì)每個(gè)用戶訪問(wèn)平臺(tái)的頁(yè)面進(jìn)行分析,可以提高平臺(tái)的安全性以及及時(shí)、有針對(duì)性地更新用戶訪問(wèn)量高的板塊內(nèi)容,同時(shí)也為其他類型的網(wǎng)站日志分析提供借鑒的意義.