天天看點

《Storm實時資料處理》一2.8 建立日志分析面闆

本節書摘來華章計算機《storm實時資料處理》一書中的第2章 ,第2.8節,(澳)quinton anderson 著 盧譽聲 譯更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

日志分析面闆是一個通過圖形的方式向使用者展示統計資訊的web應用程式。在實作它之前,我們需要先了解一下使用者界面設計原則。

區分焦點:隻顯示必要的内容,根據使用者試圖得到的東西來建立焦點,而不是讓使用者因無關内容而分心。

極簡主義:從可用性角度考慮,隻需要包含必要的圖形特性。

響應式處理:這是一種確定顯示内容清晰和一緻的方法,無論是在pc上還是在平闆電腦上進行檢視。

基于标準:你不應該使用非标準的技術進行開發,因為這有可能會妨礙在諸如ipad這樣的裝置上正常通路我們的程式。

本例中的面闆會顯示每個日志檔案每分鐘的日志體積動态圖。圖2-4展示了相關的視圖輸出。

《Storm實時資料處理》一2.8 建立日志分析面闆

圖2-5展示了詳細的監視輸出。

《Storm實時資料處理》一2.8 建立日志分析面闆

step01 建立一個名為log-web的項目,使用标準maven archetype指令來建構我們的項目:

《Storm實時資料處理》一2.8 建立日志分析面闆

該指令會為你生成标準的項目目錄結構和maven pom檔案。

step02 打開pom.xml檔案,删除一些預設的依賴項,再添加以下依賴項:

《Storm實時資料處理》一2.8 建立日志分析面闆
《Storm實時資料處理》一2.8 建立日志分析面闆

step03 然後在pom中的build區域增加以下建構插件:

《Storm實時資料處理》一2.8 建立日志分析面闆
《Storm實時資料處理》一2.8 建立日志分析面闆

step04 通過mvn eclipse:eclipse指令和eclipse項目導入功能把項目檔案導入eclipse。

step05 我們會使用優秀的twitter bootstrap gui庫來建立使用者界面。首先将這個庫下載下傳到你的獨立磁盤分區下,然後将其解壓縮。

《Storm實時資料處理》一2.8 建立日志分析面闆

step06 bootstrap提供了許多執行個體,這有助于我們快速掌握其基本要領。我們先簡單複制一份示例,然後再修改它:

《Storm實時資料處理》一2.8 建立日志分析面闆

對于開發任何基于web圖形使用者界面的程式來說,twitter bootstrap都是一個非常好的選擇。強烈建議你讀一讀剛才下載下傳的壓縮包中的文檔,它可能會給你帶來很大的幫助。

step07 有不少html都需要修改,我們先把重點放在幾項關鍵内容上面:核心展示内容和圖形。先更新index.html檔案,用以下代碼替換現有的

标簽和内容:

《Storm實時資料處理》一2.8 建立日志分析面闆
《Storm實時資料處理》一2.8 建立日志分析面闆

step09 然後在html檔案中包含這些javascript檔案,并編寫用于擷取資料和更新圖形的用戶端javascript代碼。

step10 在html檔案末尾的

step11 在html頭部增加css樣式表檔案:

《Storm實時資料處理》一2.8 建立日志分析面闆

step12 然後在其他導入腳本的代碼之後,靠近檔案末尾的位置,将以下自定義javascript代碼添加到标簽中:

《Storm實時資料處理》一2.8 建立日志分析面闆
《Storm實時資料處理》一2.8 建立日志分析面闆

step13 添加擷取伺服器資料的代碼:

《Storm實時資料處理》一2.8 建立日志分析面闆
《Storm實時資料處理》一2.8 建立日志分析面闆
《Storm實時資料處理》一2.8 建立日志分析面闆
《Storm實時資料處理》一2.8 建立日志分析面闆

step14 至此,用戶端的實作大功告成。為了讓客戶層能夠通路到這些資料,我們還需要為其提供擷取資料的服務。

step15 首先,在storm.cookbook.services.resources包中建立一個工具類cassandrautils,并添加以下内容:

《Storm實時資料處理》一2.8 建立日志分析面闆
《Storm實時資料處理》一2.8 建立日志分析面闆

step16 在同一包中建立logcount類,用于提供restful查詢服務:

《Storm實時資料處理》一2.8 建立日志分析面闆

step17 最後,通過建立logservices類來提供相關資料服務:

《Storm實時資料處理》一2.8 建立日志分析面闆

step18 配置web.xml檔案:

《Storm實時資料處理》一2.8 建立日志分析面闆

step19 這時就可以運作你的工程了,在web-log項目根目錄下執行如下指令:

《Storm實時資料處理》一2.8 建立日志分析面闆

然後通過localhost:8080通路你的日志分析面闆。

在上層實作中,面闆會根據指定時間周期性地查詢伺服器。為了能夠儲存查詢結果,它會在用戶端維持一個記憶體中的結構,并将二維數組轉換成圖形類。我們來看一下html,以下代碼定義了圖形顯示的位置:

《Storm實時資料處理》一2.8 建立日志分析面闆

通過以下代碼定義圖表:

《Storm實時資料處理》一2.8 建立日志分析面闆

記憶體結構其實是一個簡單的數值型二維數組,是以我們能夠通過以下方法把這些值映射到圖形中的x和y軸:

《Storm實時資料處理》一2.8 建立日志分析面闆

資料是通過fetch()方法來擷取的,該方法通過ajax異步請求将資料發送給伺服器。當用戶端接收到響應後,通過ondatareceived(series)回調,把相應結果添加到記憶體結構中。最後,getdata()方法負責将日志結構映射成對應圖形的二維數組。

在伺服器端,通過jersey來提供服務。它是一個開源且符合jsr311标準的産品,用于建構restful web服務。在jersey 中,服務通常是通過注解來定義的。本例隻需在logcount類中定義一種服務,通過以下注解來實作:

《Storm實時資料處理》一2.8 建立日志分析面闆

定義好後,這項服務就可以通過localhost:8080/services/logcount/totalforminutes/[timestamp]來通路了。我們把傳遞給timestamp變量的值作為查詢條件,來執行cassandra查詢。最終的查詢結果會被映射到json對象上,然後将其傳回給調用者:

《Storm實時資料處理》一2.8 建立日志分析面闆

通常來講,我們不會調用整個topology和叢集,這是為了確定測試web應用程式的簡單性。在支援材料中提到了一個實用的main類,它可以使用随機資料來填充列族,這樣就可以對web應用程式進行簡單獨立的測試了。

繼續閱讀