2013年12月18日星期三

使用 goaccess 分析 nginx access.log


​不需要很强大,只需要够用。
安装,今天刚好赶上一个新版本的发布:
$ yum -y install glib2 glib2-devel ncurses ncurses-devel GeoIP GeoIP-devel
$ wget http://downloads.sourceforge.net/project/goaccess/0.7/goaccess-0.7.tar.gz
$ tar -xzvf goaccess-0.7.tar.gz
$ cd goaccess-0.7/
$ ./configure --enable-geoip --enable-utf8 
$ make
# make install
因为access 的format 不一样,所以需要修改一下, 我这里默认的 NCSA 也对不上,看看我的nginx 的 access log format:

    log_format  main  '$remote_addr $http_host $upstream_addr [$time_local] $request '
                      '"$status" $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$request_time"';
眼睛看了老半天,终于按空格对上号了(部分字段由于中间有空格,但是没有引号,所以又被多算了一列), vim ~/.goaccessrc:
date_format %d/%b/%Y
log_format %h %^ %^ %^[%d:%^] %^ %r %^ "%s" %b "%R" "%u" "%^" "%D"

上面这个保存为文件,就不用每次去按照下面的提示按 C 去修改了。(至于每个字段的含义,可以去官方查询,另外发现有些是没有,
也有可能是我没发现,比如 $upstream_addr, $http_x_forwarded_for, 没有暂时用 %^ 啰)

然后就是执行命令
$goaccess -f access.log
可以重定向输出为 csv 格式或者 html 格式,罗列的各种 top 分析比较清晰。

ps: 不足之处,缺少 hourly 的支持,比如我的想要对比相邻几个小时内的访问情况,来分析异常请求,这个在作者 github 上有个 issue,
     希望能够早点实现。
https://github.com/allinurl/goaccess/issues/8



没有评论:

发表评论