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 代替。