資料收集---web訪問日誌收集與統計
阿新 • • 發佈:2019-01-03
本文轉載自 http://blog.csdn.net/hugolyl/article/details/50404478
- 話說web訪問日誌,很多同學對百度統計,谷歌統計(google analytics)很熟悉,就是加點js程式碼埋點,然後很方便可以從百度等獲得網站的訪問情況統計。這種方式的確是很方便,自己可以不用管日誌的資料,對系統的影響也很小,還可以增加網站排名(?),哈哈,總之,是很方便。如果想了解其工作原理?如果想自己來收集儲存這個資料呢?我們一起來看看這個過程吧,做一個自己的統計工具。下面我們來說說整個步驟:
- 我有一個網站頁面test.html,新增埋點。
<html lang="en" >
<head>
<title>Document</title>
</head>
<body>
<p>這裡有很多東西,很多好看的yellow的圖片</p> <!---下面的js就是埋點了,有木有似曾相識的趕腳!--->
<script type="text/javascript">
var _maq = _maq || [];
_maq.push(['_setAccount', 'testname']);
(function() {
var ma = document.createElement('script'); ma.type = 'text/javascript'; ma.async = true;
ma.src = ('https:' == document.location.protocol ? 'https://localhost:8080' : 'http://localhost:8080') + '/ma.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ma, s);
})();
</script>
</body>
</html>
- 這個頁面一被瀏覽器執行,很明顯瀏覽器會觸發js指令碼,去非同步載入訪問http://localhost:8080/ma.js。這個就是我們的統計指令碼,這個是關鍵核心哦!
這個指令碼執行在tomcat中,我測試用的。ma.js樣子是這樣的:
(function () {
var params = {};
//Document物件資料
if(document) {
params.domain = document.domain || '';
params.url = document.URL || '';
params.title = document.title || '';
params.referrer = document.referrer || '';
}
//Window物件資料
if(window && window.screen) {
params.sh = window.screen.height || 0;
params.sw = window.screen.width || 0;
params.cd = window.screen.colorDepth || 0;
}
//navigator物件資料
if(navigator) {
params.lang = navigator.language || '';
params.apn = navigator.appName || '';
params.apv = navigator.appVersion || '';
params.apc = navigator.appCodeName || '';
params.ua = navigator.userAgent || '';
}
//解析_maq配置
if(_maq) {
for(var i in _maq) {
switch(_maq[i][0]) {
case '_setAccount':
params.account = _maq[i][1];
break;
default:
break;
}
}
}
//拼接引數串
var args = '';
for(var i in params) {
if(args != '') {
args += '&';
}
args += i + '=' + encodeURIComponent(params[i]);
}
//通過Image物件請求後端指令碼
var img = new Image(1, 1);
img.src = 'http://localhost:8080/1.gif?' + args;
})();
這裡面也很好理解,通過js獲得大堆資料,包括自定義的引數,然後拼接乘引數串,加到一個gif圖片後面作為引數,可憐的gif檔案其實什麼也沒有,就是用一個1*1的空白圖片。訪問了我們統計放在的圖片,我的伺服器當然會記錄下來這個過程,因為的的tomcat開啟了訪問日誌記錄。
conf/server.xml開啟註釋掉的
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
這樣我們就可以到日誌記錄檔案裡面去找結果了:
0:0:0:0:0:0:0:1 - - [11/Dec/2015:10:58:25 +0800] "GET /1.gif?domain=&url=file%3A%2F%2F%2FD%3A%2Ftmp%2Ftest.html&title=Document&referrer=&sh=768&sw=1366&cd=24&lang=zh-CN&apn=Netscape&apv=5.0%20(Windows)&apc=Mozilla&ua=Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20WOW64%3B%20rv%3A42.0)%20Gecko%2F20100101%20Firefox%2F42.0&account=testname HTTP/1.1" 200 808
0:0:0:0:0:0:0:1 - - [11/Dec/2015:11:00:06 +0800] "GET /ma.js HTTP/1.1" 304 -
0:0:0:0:0:0:0:1 - - [11/Dec/2015:11:00:06 +0800] "GET /1.gif?domain=&url=file%3A%2F%2F%2FD%3A%2Ftmp%2Ftest.html&title=Document&referrer=&sh=768&sw=1366&cd=24&lang=zh-CN&apn=Netscape&apv=5.0%20(Windows)&apc=Mozilla&ua=Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20WOW64%3B%20rv%3A42.0)%20Gecko%2F20100101%20Firefox%2F42.0&account=testname HTTP/1.1" 200 808
果然看到了誰從哪裡通過什麼裝置在什麼時候訪問了test.html,這就達到了我們要記錄的目的!!!
- 想通過圖表來做個統計,按時間按裝置等等方式來統計,想百度Google統計一樣。這個好辦,把日誌檔案抽取出來,寫到資料庫,然後寫SQL來統計,剩下的你懂的,有了資料都好辦了。
這個統計還可以用在其他的地方,比如推薦引擎
這個就簡單說到這了,下次來個kafka、flume之類的來處理日誌