GoAccess是一款開源的網站日志實時分析工具。
GoAccess 的工作方式就是讀取和解析 Apache/Nginx/Lighttpd/jboss 的訪問日志文件 access
log,然后以更友好的方式把統計信息顯示出來。統計的內容包括:訪問概況、動態頁面請求、靜態頁面請求(如圖片、樣式表、腳本等)、訪客排名,訪客使用
的操作系統,訪客使用的瀏覽器,來路域名,404 錯誤,搜索爬蟲,搜索關鍵詞等等。
GoAccess 的性能比較不錯,據官方測試,在一臺 Intel Xeon CPU @ 2.40ghz CPU, 2GB 內存的機器上處理日志文件的速度是97000行每秒。
下面采用源代碼安裝的方式:
在 CentOS 上安裝編譯 GoAccess 時需要的工具和庫:
# yum groupinstall 'Development Tools'
# yum install glib2 glib2-devel ncurses-devel
另外在 Ubuntu 12.04 上安裝編譯 GoAccess 時需要的工具和庫:
$ sudo apt-get install build-essential
$ sudo apt-get install libglib2.0-dev libncursesw5-dev
下載 GoAccess 的源代碼、編譯和安裝:
$ wget http://downloads.sourceforge.net/project/goaccess/0.7.1/goaccess-0.7.1.tar.gz
$ tar -xzvf goaccess-0.7.1.tar.gz
$ cd goaccess-0.7.1/
$ ./configure --enable-utf8
$ make
$ sudo make install
運行 GoAccess,選擇 NCSA Combined Log Format:
$ goaccess -f /usr/local/nginx/logs/access.log
由于工作需要,服務器用的是JBOSS,所以出現不匹配的問題
JBOSS access 打開方法:
在默認的情況下,JBoss7.1是沒有開啟access_log的,如果要開啟這項功能,就需要修改$JBOSS_HOME\standalone\configuration\standalone.xml這個文件
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
<virtual-server name="default-host" enable-welcome-root="true">
<alias name="localhost"/>
<alias name="example.com"/>
<access-log pattern="%v %a %t %r %s %b %u %m" rotate="true">
<directory path="."/>
</access-log>
</virtual-server>
</subsystem>
添加以上黑體部分就可以打開jboss的acess日志功能。其中 pattern="%v %a %t %r %s %b %u %m"用于日志記錄。
參數內容如下:
%a? ? 遠端IP
%A 本地IP
%b??? 發送的字節數,不包含HTTP頭,如果為0,使用”-”
%B??? 發送的字節數,不包含HTTP頭
%h??? 遠端主機名(如果resolveHosts=false),遠端的IP
%H??? 請求協議
%l??? 從identd返回的遠端邏輯用戶名,總是返回’-’
%m??? 請求的方法
%p??? 收到請求的本地端口號
%q??? 查詢字符串
%r??? 請求的第一行
%s 響應的狀態碼
%S??? 用戶的sessionID
%t??? 日志和時間,使用通常的log格式
%u??? 認證以后的遠端用戶(如果存在的話,否則為’-’)
%U??? 請求的URI路徑
%v??? 本地服務器的名稱
%D 處理請求的時間,以毫秒為單位
%T??? 處理請求的時間,以秒為單位
由于goaccess 適用于Apache/Nginx? 對于JBOSS的日志支持不是特別好 下面是apche參數與jboss參數比較
%a 遠端IP地址? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %a? ? 遠端IP?
%A 本機IP地址? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %A 本地IP
%B 除HTTP頭以外傳送的字節數? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %B? ? 發送的字節數,不包含HTTP頭
%b 以CLF格式顯示的除HTTP頭以外傳送的字節數,也就是當沒有字節傳送時顯示’-'而不是0。? ? ? ? ? ? ? ? %b? ? 發送的字節數,不包含HTTP頭,如果為0,使用”-”
%{Foobar}C 在請求中傳送給服務端的cookieFoobar的內容。
%D 服務器處理本請求所用時間,以微為單位。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %D 處理請求的時間,以毫秒為單位
%{FOOBAR}e 環境變量FOOBAR的值
%f 文件名
%h 遠端主機? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %h? ? 遠端主機名(如果resolveHosts=false),遠端的IP
%H 請求使用的協議? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %H? ? 請求協議
%{Foobar}i 發送到服務器的請求頭Foobar:的內容。
%l 遠端登錄名(由identd而來,如果支持的話),除非IdentityCheck設為"On",否則將得到一個"-"。? ? ? ? %l? ? 從identd返回的遠端邏輯用戶名,總是返回’-’
%m 請求的方法? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %m? ? 請求的方法
%{Foobar}n 來自另一個模塊的注解Foobar的內容。
%{Foobar}o 應答頭Foobar:的內容。
%p 服務器服務于該請求的標準端口。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %p? ? 收到請求的本地端口號
%P 為本請求提供服務的子進程的PID。
%{format}P 服務于該請求的PID或TID(線程ID),format的取值范圍為:
%q 查詢字符串(若存在則由一個"?"引導,否則返回空串)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %q? ? 查詢字符串
%r 請求的第一行 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %r? ? 請求的第一行
%s 狀態。對于內部重定向的請求,這個狀態指的是原始請求的狀態,—%>s則指的是最后請求的狀態。? ? ? ? ? %s 響應的狀態碼
%t 時間,用普通日志時間格式(標準英語格式)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %t? ? 日志和時間,使用通常的log格式
%{format}t 時間,用strftime(3)指定的格式表示的時間。(默認情況下按本地化格式)
%T 處理完請求所花時間,以秒為單位。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %T? ? 處理請求的時間,以秒為單位
%u 遠程用戶名(根據驗證信息而來;如果返回status(%s)為401,可能是假的)? ? ? ? ? ? ? ? ? ? ? ? ? ? %u? ? 認證以后的遠端用戶(如果存在的話,否則為’-’)
%U 請求的URL路徑,不包含查詢字符串。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %U? ? 請求的URI路徑
%v 對該請求提供服務的標準ServerName。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %v? ? 本地服務器的名稱
%V 根據UseCanonicalName指令設定的服務器名稱。
%X 請求完成時的連接狀態:X= 連接在應答完成前中斷。
+= 應答傳送完后繼續保持連接。
-= 應答傳送完后關閉連接。
(在1.3以后的版本中,這個指令是%c,但這樣就和過去的SSL語法:%{var}c沖突了)
%I 接收的字節數,包括請求頭的數據,并且不能為零。要使用這個指令你必須啟用mod_logio模塊。
%O 發送的字節數,包括請求頭的數據,并且不能為零。要使用這個指令你必須啟用mod_logio模塊
%S? ? 用戶的sessionID
goaccess使用方法
1、goaccess -f? access.log
2、goaccess -f access.log -p ~/.goaccess? -a > report.html? 用于輸出html報表。
其中.goaccess 為配置文件 內容如下:
time-format %T
date-format %d/%b/%Y
log-format %v %h [%d:%t %^] %m %U %H %^ %s %b %^ %D
其中log-format 中%d 為 date-format?? %t 為time-format
%^為忽略字段,在goaccess參數中 %r 為 %m %U %H 合集。
所以此處%r 用 %m %U %H 代替。