上次用awstats来自动分析nginx的日志,不过发现它只是累计的不能看一天或某个时间段内情况,于是就加了个goaccess来分析日志,

思路:每天将原来awstats集中过来的日志文件处理一下,生成符合goaccess的新的日志文件,然后用goaccess来生产静态页,nginx将这些静态页展示出来。

一、软件

    goaccess:

    ncurses(goaccess的依赖)

       

 ubuntu:apt-get install libncursesw5-dev

二、安装

    wget http://tar.goaccess.io/goaccess-1.1.1.tar.gz
    tar -zxvf goaccess-1.1.1.tar.gz
    cd goaccess-1.1.1
    ./configure —enable-geoip —enable-utf8
    make
    make install

三、配置goaccess.conf

    默认goaccess的log-format是比较简单的,我这自定义了

    time-format %H:%S:%M
    date-format %d/%b/%Y
    log-format %d:%t %^ %h %s %T  %m %U %H %b %R %u


官方给了各日志段的代码,可以参考着修改

SPECIFIERS
%x A date and time field matching the time-format and date-format variables. This is used when a timestamp is given instead of the date and time being in two separate variables.
%ttime field matching the time-format variable.
%ddate field matching the date-format variable.
%vThe server name according to the canonical name setting (Server Blocks or Virtual Host).
%eThis is the userid of the person requesting the document as determined by HTTP authentication.
%hhost (the client IP address, either IPv4 or IPv6)
%rThe request line from the client. This requires specific delimiters around the request (as single quotes, double quotes, or anything else) to be parsable. If not, we have to use a combination of special format specifiers as %m %U %H.
%qThe query string.
%mThe request method.
%UThe URL path requested.
Note: If the query string is in %U, there is no need to use %q. However, if the URL path, does not include any query string, you may use %q and the query string will be appended to the request.
%HThe request protocol.
%sThe status code that the server sends back to the client.
%bThe size of the object returned to the client.
%RThe "Referer" HTTP request header.
%uThe user-agent HTTP request header.
%DThe time taken to serve the request, in microseconds.
%TThe time taken to serve the request, in seconds with milliseconds resolution.
%L The time taken to serve the request, in milliseconds as a decimal number.
%^Ignore this field.
%~Move forward through the log string until a non-space (!isspace) char is found.
|Vertical pipe or bar is used for either the character prior to the vertical pipe or followed by the vertical pipe.


四、编写脚本

    我这nginx得日志格式是自定义的,所有做了处理。不同线路的访问日志也合并到一起来处理的。

#!/bin/bash
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
DATE=`/bin/date -d "1 days ago" +%Y%m%d`
PREFIXS='www p m news'
DOMS='xxx.com'
BASIC_DIR="/data/awstats"
for PREFIX in $PREFIXS
do
cat $BASIC_DIR/logs/$PREFIX/11/access_$DATE.log $BASIC_DIR/logs/$PREFIX/13/access_$DATE.log >$BASIC_DIR/goaccess/orig_logs/$PREFIX.$DOMS/access_$DATE.log
awk -F "|" '{print $2,$3,$5,$6,$12,$14,$11,$13}' $BASIC_DIR/goaccess/orig_logs/$PREFIX.$DOMS/access_$DATE.log >$BASIC_DIR/goaccess/logs/$PREFIX.$DOMS/access_$DATE.log
/usr/local/bin/goaccess -f $BASIC_DIR/goaccess/logs/$PREFIX.$DOMS/access_$DATE.log -p $BASIC_DIR/goaccess/scripts/goaccess.conf >$BASIC_DIR/goaccess/html/$PREFIX.$DOMS/access_$DATE.html
done

五、crontab自动处理

每天早上6点开始处理

0 6 * * * (bash /data/awstats/goaccess/scripts/goaccess.sh)

六、nginx展示goaccess的结果


 cat goaccess.conf

server{
        listen 88;
        server_name 11.1.2.252;
        root /data/awstats/goaccess/html/;
        autoindex on;
        access_log logs/access.ga.log;
        }

六、示例

wKioL1hBIbTD6LH5AATBGMRzmdY420.jpg-wh_50