piwik簡介
最近試用了開源的網站訪問統計系統——piwik,覺得功能非常強大,一點不輸於商業產品百度統計與google analysis,替代他們完全沒有問題。
關於piwik的簡介可以去piwik的官網(http://piwik.org)查看,有詳細的介紹和視頻演示。之前codeweblog.com也有簡單的介紹(http://www.codeweblog.com/p/piwik)。
以下是采集到的分析數據效果圖:
piwik安裝
首先需要解決依賴項(http://piwik.org/docs/requirements/),ubuntu/debian使用下列命令安裝所有依賴項(我用的是apache,別的webserver請替換成相應的軟件包)
apt-get install apache2 mysql-server php5 php5-mysql php5-gd
如需定位訪客的地理位置,參考官方文檔: http://piwik.org/docs/geo-locate/, 或者使用JS追蹤的方式,通過JS代碼獲取訪客的IP歸屬地。
安裝過程參考官方文檔(http://piwik.org/docs/installation),比較簡單,就不詳細介紹了。
配置好apache之后,通過瀏覽器訪問,一步步配置完畢之后,看到如下界面之后,就可以使用了:
piwik使用
剛裝好的Piwik是空空如也的,此時我們需要這個系統幫我們統計數據。
目前Piwik支持兩種采集用戶訪問記錄的方式: JS追蹤
和訪問日志追蹤
。
JS追蹤可定制型高,可以獲取到用戶的分辨率,瀏覽器插件等等,還可以捕獲自定義變量。訪問日志追蹤(如apache的accesslog)可以追蹤到用戶的錯誤請求(如40X錯誤,有助於捕獲到惡意用戶和爬蟲,蜘蛛等等),目前這兩種追蹤得到的數據還不支持合並
這兩種追蹤模式的詳細優缺點可以參考官方的這篇文檔: http://piwik.org/faq/log-analytics-tool/faq_16305/
JS追蹤
在管理設置-網站-右邊即可看到"顯示跟蹤代碼"
,如下圖所示:
將此代碼復制到web項目的footer
中即可(即所有頁面都嵌入這段相同的js代碼,用於捕獲用戶的信息,如分辨率,瀏覽器UA,IP等),還可以按照官方文檔,捕獲自定義變量。
參考官方文檔的幫助,這里不再贅述: http://piwik.org/docs/javascript-tracking/
log追蹤
log追蹤無需修改web項目,但是必須要有登錄服務器並讀取accesslog的權限。
log追蹤的詳細用法參考官方文檔: http://piwik.org/faq/log-analytics-tool/, https://piwik.org/log-analytics/
log追蹤的過程是解析webserver的accesslog,然后通過piwik的API上傳,最終在piwik頁面上展示。
這個過程不用自己去實現了,piwik的壓縮包中已經帶有一個python腳本可以幫助我們完成這個工作了,該腳本存儲於piwik目錄下的misc/log-analytics/import_logs.py
。
將這個腳本遠程拷貝到目標服務器上,按照腳本的參數格式執行即可,我的命令行:
./import_logs.py --url=http://192.168.1.106/piwik/ --idsite=1 --recorders=2 --token-auth=319fb461d3225905039551e861edde60 --enable-static --enable-bots --enable-http-errors --enable-http-redirects /var/log/apache2/access.log
使用--help
參數即可看到這個腳本的命令行,只有一個--url
參數是必須的,指明piwik的訪問路徑。詳細幫助參見官方文檔(https://piwik.org/docs/log-analytics-tool-how-to/),這里對我使用的參數做一下簡介:
--idsite
表明抓取到的信息上傳到哪個序號對應的網站(這里的參數為1,代表解析的數據會統計到first_web這個網站中)
--token-auth
這個參數是管理員的訪問token,在系統頁面最頂上的API
點開即可看到,如下圖所示。這個參數可以使用--login=LOGIN --password=PASSWORD
這兩個參數替代,必須是管理員的賬戶和密碼。
--recorders
使用多線程解析,默認為1,官方建議這個參數和核心數一致。
--enable-static --enable-bots --enable-http-errors
這三個參數基本上把apache的accesslog能抓取到的全部信息都抓全了,抓取靜態資源(jpg,png,js,css等非html的訪問),抓取bots(不知道這個是什么,猜測是否是機器人?),抓取html錯誤碼(如40X請求等等)
/var/log/apache2/access.log
apache的accesslog存放路徑,常見的webserver如nginx,lighthttpd等,腳本自帶有解析引擎,無需別的參數,如果非常見webserver的話,加上--log-format-regex
這個參數來自定義日志格式抓取。
當腳本執行完畢時,即可在piwik中看到網站的訪問記錄了,使用也很方便。長期使用可以寫入crontab
即可。
注意:
- log解析的方式追蹤比較慢,不適合實時追蹤用戶訪問記錄,建議每過幾小時執行一次crontab,來定時解析log。
- 如果開啟了
--enable-static --enable-bots --enable-http-errors
這三個參數,解析過程將會很緩慢(我這邊大概十幾條每秒),不要讓crontab太頻繁,會直接讓mysql數據庫超出連接而掛掉,我是每4小時執行一次crontab。
其他一些問題
1,log追蹤和js追蹤的方式互有優勢,都可以抓到一些對方所無法獲取的信息,但是目前這兩種方式追蹤到的數據還不支持合並,因此,需要同時使用這兩種方式追蹤時,建議分開兩個不同的網站追蹤不同的數據,如first_web用於JS追蹤,first_web(log)用於log追蹤。參見官方FAQ: http://piwik.org/faq/log-analytics-tool/faq_16307/
2,當訪問量較高時,請關閉Piwik觸發處理
,已提高頁面響應,刷新報表數據由后台crontab執行,參考如下圖所示,crontab的設置見右邊的提示中的官方文檔:
3,自動郵件的時間有些問題,piwik內部時間使用的是UTC
時間,也就是中國時區(CST,東八區)比UTC時區的時間快8個小時。如果使用默認的郵件發送時間0點發送,將會收到前天的訪問記錄報表(中國時間0點對應UTC時間昨天的16點,那么此時發昨天的報表就會收到前天的報告)。
這個問題已經給官方提過issue,不過官方還沒有回應我: http://forum.piwik.org/read.php?2,111809
暫時的方案是把時間改到8點以后,就可以收到正常的郵件報表。