鄭騰霄
(四川大學計算機學院,成都 610000)
隨著互聯網技術的飛速發展,企業的門戶網站已成為對外宣傳、提升服務水平的重要途徑,網絡也已成為政府機關為公眾提供信息的重要渠道,及時對網站流量和用戶訪問情況進行統計分析,通過數據來分析用戶的瀏覽習慣,可對優化網站運營架構、調整推廣策略起到積極的作用[1]。
網站流量統計是指在獲得網站訪問量等基本數據的情況下,對有關數據進行統計、分析,從而發現用戶訪問網站的規律[2]。網站流量統計又分為:PV(Page View),UV(Unique Visitor)。PV即頁面瀏覽量,用來衡量一個網站的網頁用戶訪問量,用戶每進行一次頁面刷新,就算作一次PV流量。UV即獨立訪客數,代表訪問某個站點的不同IP地址的人數。
通過對網站進行流量分析,可以刻畫出網站近期的運營情況,從而引導網站開發,運營人員作出相關決策來改進網站的服務,對網站維護,制定網站營銷策略提供有力的依據,對網站的運營架構進行調整,促進網站整體的改進。
站點流量分析有多重相關的評估指標,總體可以分為網站PV,UV維度,以及網站用戶維度,以下對這兩個維度分別進行介紹。
(1)網站每天(每周,每月)的PV。網站每天(每周,每月)所有頁面總共被訪問的次數。
(2)網站每天(每周,每月)的UV。網站每天(每周,每月)所有頁面被獨立的IP所訪問的次數。
(3)網站總PV,UV的環比情況。網站今天-昨天(本周-上周,本月-上月)的瀏覽量對比增長或者減少的百分比。
(4)網站每天瀏覽量的變化趨勢。根據網站每天的訪問量繪制折線圖,刻畫出網站每天流量的走勢。
(5)網站單獨頁面PV,UV分析。一個網站通常會有多個頁面,對各個頁面的瀏覽量進行分析可以更好地對網站進行分析。
(1)訪問者的來源[3]。分析訪問者的來源類型,來源類型分為搜索引擎、其他網站跳轉和直接輸入網址。
(2)訪問者使用的設備。根據網站日志得到訪問者所使用的設備(電腦、手機型號、瀏覽器、操作系統等)。
Nginx是一個雖然輕量級,但是性能比較高的Web服務器。有著并發能力強,占有內存較少等特點。
YAF框架是一中用C語言編寫的PHP框架。所有的框架類,不需要編譯,在PHP啟動的時候加載,并常駐內存。YAF框架還具有更短的內存周轉周期,相比于原生的PHP框架,YAF框架的執行速度更快,占用的內存更少[4]。
Hadoop Streaming是Hadoop平臺提供的一種編程工具,它允許用戶使用任何可執行文件或腳本作為Mapper和Reducer[5]。面對大小為數十G甚至上百G的日志文件,如果使用一個單機的程序去分析,時間復雜度會非常高,效率很低。本文通過使用Hadoop Streaming分布式計算框架,將單機的日志分析程序分布式并行運行,解決了單機分析比較大的日志文件速度極慢的問題。
LNMP就是指Linux系統下Nginx+MySQL+PHP這樣的網站服務器架構[6]。
系統采用標準B/S三層結構開發,三層結構分別為:用戶界面層(UI)、業務邏輯層和數據層。
其中,數據層主要負責:數據拉取,分布式數據計算,數據入庫的操作。邏輯層主要負責系統頁面的路由,以及數據的獲取以及展現,可視化之前的預處理等工作。UI層負責數據的可視化工作,繪制出數據的各種圖形,如圖1所示,下面詳細進行分析。

圖1 數據傳輸層邏輯圖
(1)數據層
原始的日志數據存放于網站服務器所在的線上機上,通過Linux,crontab命令編寫例行化腳本每天定時拉取到HDFS上面,然后編寫相應的腳本,通過Ha?doop Streaming計算框架對日志進行計算,結果存放于集群。然后同樣通過Linux下的Crontab命令,編寫Python腳本定時從線上集群下載文件到服務器。然后編寫Python腳本,首先使用open函數逐行讀取從集群下載的臨時文件,通過Python的ConfigParser類讀取配置文件獲得數據庫地址以及數據表名,并通過MySQLdb類的connect方法鏈接數據庫,最后通過exe?cutemany(sql,args)方法來將每行數據插入數據表,其中sql為插入的sql語句,valuse為Python的list數組,對應數據表的每列的數據。
(2)邏輯層
用戶訪問系統的主頁時,Nginx服務器會根據主頁的url路由到對應的action,然后加載smart模塊的對應的tpl文件,然后觸發嵌入tpl文件中的js文件,然后組裝傳入的參數,調用AJAX請求,然后Nginx服務器會再次根據AJAX路由到對應的action,從數據庫中獲得相應的數據返回給js。js中獲得返回的數據之后使用echart繪圖框架繪制相應的圖形,根據設定的id,展示到相應的tpl文件中的對應的div控件上面。
(3)UI層
UI層主要負責頁面的展示。
本系統采用Linux+Nginx+PHP+MySQL這樣的網站服務器架構。首先,需要在Linux系統下安裝好MySQL,本系統采用5.1.45版本。然后安裝Nginx服務器,將框架的入口文件配置在Nginx服務器上。然后安裝PH以及所用到的AP框架。系統的前段頁面使用了smarty模板的技術,所以還要安裝以及配置smarty模塊。
日志的初始地址位于線上機,為了使用Hadoop對日志進行分析,需要將其定時(每天)拉取到HDFS(Ha?doop分布式文件系統),本文使用Linux系統下的crontab命令來定時運行shell腳本的方法來實現。
Crontab命令的配置如下:

腳本的內容如下:

Hadoop-Streaming是Hadoop平臺提供的一個編程工具。使用它可以讓任何語言的程序在Hadoop Map Reduce中運行。

以上為分析日志的Hadoop-Streaming程序,可以指定maper與reducer的數量,輸入與輸出的集群目錄,以及用于計算的mapper與reducer程序。
Mapper腳本的主要代碼如下:

通過以上腳本,可以統計出每天網站的PV總量,其他的計算指標,比如網站總PV,UV等可以通過類似的方法得出,再次不一一贅述。
在使用Hadoop-Streaming對日志分析完畢后,最后的輸出存放在Hadoop分布式文件存儲系統,HDFS上面,為了將數據在Web頁面可視化展示,需要將數據存入數據庫中。本文的設計思路如下:首先使用ha?doop命令將HDFS上的文件下載到本地:

數據表設計如下:

表1 可視化系統,后端數據庫設計
其中,id是此數據表的自增主鍵,唯一標識了某一天的PV,或者UV訪問量;type字段標識了表中每一條數據對應value字段所代表類型,type=1時代表當天的pv,type=2代表當天的u;value字段標識了每種數據的指標量;time代表本條數據所對應的日期。
系統界面展示模塊采用了LNMP的架構模型。LNMP就是指Linux系統下Nginx+MySQL+PHP這樣的網站服務器架構[7]。這四種軟件均為免費開源軟件,組合到一起,成為一個免費、高效、擴展性強的網站服務系統。其中,后端使用的框架為YAF框架,前端使用到的技術有:smarty模板技術,ajax技術,JavaScript以及echarts數據可視化框架。Smarty是一個使用PHP寫出來的模板引擎,可以將HTML代碼與PHP代碼實現邏輯分離。AJAX可以通過與后端服務器的少量的數據交換來實現網頁的局部更新操作。JavaScrip是一種腳本語言,現已被廣泛的應用于Web開發中,可以為網頁添加各種動態的功能,本文更是通過echarts數據可視化框架來繪制圖表讓頁面更加美觀。Echarts是一種可視化的框架,通過提供方便豐富的可視化圖表,極大縮短了用戶與數據的距離。
前端展示效果如下:

圖2 可視化系統前端展示效果
基于Hadoop-Streaming+LNMP的網站流量分析系統,使用Hadoop-Streaming這個Map-Reduce框架在網站運營過程中,在服務器上所產生的日志進行分析,得出一些網站運營情況的一些數據以及結論,然后通過LNMP架構,echarts數據可視化工具將這些數據展現出來,刻畫出網站運營過程當中所出現的問題,為網站運營人員作出相應的運營決策提供了有效的參考以及依據。彌補了傳統的流量分析方法在大流量網站數據分析方面的缺陷。
[1]杜曉春.基于Web的網站數據分析軟件Wysistat的設計與實現[D].西安:西安電子科技大學,2010.
[2]焦榮梅.淺談網站流量統計分析法[J].科技信息,2007(16):264.
[3]馮英健.如何獲得網站流量統計數據[EB/OL].(2005-03-02)[2016-10-29].http://www.marketingman.net/FAQ/2005.htm.
[4]Inacio C M,Trammell B.YAF:yet Another Flowmeter[C].Proceedings of the 24th International Conference on Large installation System Administration.USENIX Association,2010:1-16.
[5]7.Zeng Z.Moodle 2 Distributed Computing Architecture Based on LNMP[J].Computer Era,2013.
[6]王風玲.基于PHP+MYSQL的新聞發布系統的研究與實現.計算機應用與軟件,2012,36(24):42-44.
[7]Zeng Z.Moodle 2 Distributed Computing Architecture Based on LNMP[J].Computer Era,2013.