0、yum安装依赖包 1 2 3 yum install GeoIP-devel gcc ncurses* glib2 glib2-devel zlib zlib-devel bzip2-devel -y rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm yum -y install GeoIP-update
1、下载安装goaccess(需科学上网) 1 2 3 4 5 6 wget https://tar.goaccess.io/goaccess-1.3.tar.gz tar -xzvf goaccess-1.3.tar.gz cd goaccess-1.3/ ./configure --enable-utf8 --enable-geoip=legacy make make install
2、修改配置文件(可根据自己需求配置),也可以在启动命令是单独指定: more /etc/goaccess.conf
1 2 3 4 5 6 7 8 9 10 time-format %H:%M:%S date-format %d/%b/%Y log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u" real-time-html true ssl-cert <cert.crt> ssl-key <priv.key> ws-url wss://<your-domain> port <port> output /var/www/<xxx>/stat/index.html
3、安装tokyocabinet用于持久化数据(如果不需要持久化数据到磁盘可不必安装) 1 2 3 4 5 6 7 cd /data/soft wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.48.tar.gz tar -zxvf tokyocabinet-1.4.48.tar.gz cd tokyocabinet-1.4.48 ./configure --prefix=/usr/local --enable-off64 --enable-fastest make make install
将生成的模块加入/lib64下
1 ln -s /data/soft/tokyocabinet-1.4.48/libtokyocabinet.so.9 /lib64/
如果没有这个模块会,重新编译goaccess会报错
1 /usr/local/bin/goaccess: error while loading shared libraries: libtokyocabinet.so.9: cannot open shared object file: No such file or directory
4、安装完tokyocabinet,配置goaccess加入btree 1 2 3 ./configure --enable-utf8 --enable-geoip=legacy --enable-tcb=btree make make install
5、增加打印日志功能(可选) 1 2 ./configure --enable-utf8 --enable-geoip=legacy --enable-tcb=btree --enable-debug make && make install
指定输出日志文件:
1 --debug-file=/tmp/goaccess.log
6、添加定时任务生成月度的日志分析表(月度报表) 添加到定时任务
1 2 cat /etc/crontab |grep sh 00 01 * * * root source /etc/profile && sh /root/test.sh
cat /root/test.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!bin/bash #前一天的日期 prestamp=`date -d '1 day ago' +'%Y%m%d'` #指定需要分析的前一天的日志的文件名称 prelogname=/usr/local/openresty/nginx/logs/go_access${prestamp}.log #prelogname=/usr/local/openresty/nginx/logs/go_access.log #每个月1号不生成 premonstamp=`echo ${prestamp:0:6}` #月度报表名称 monreportname=/data/web/oldreport/report${premonstamp}.html #持久化磁盘路径 disk_db_path=/tmp/goaccess${premonstamp} #将前一天生成日志文件追加到月度持久化磁盘里,并生成新的报表 /usr/local/bin/goaccess ${prelogname} -o ${monreportname} --load-from-disk --db-path=${disk_db_path} --keep-db-files --date-format='%d/%b/%Y' --log-format='%h %^[%d:%t %^] "%r" %s %b' --time-format='%H:%M:%S'
生成的报表样式如下:
7、每天凌晨定时生成新一天的报表,但是不建议持久化到磁盘,因为一旦中途进程挂掉,需要清空日志文件,如果不清空日志文件再次启动的话,会重复加载已经存在的数据。 cat /etc/crontab |grep sh
1 00 00 * * * root source /etc/profile && sh /root/test.sh
每天定时关闭goaccess并重新启动,将数据持久化到磁盘 cat /root/test.sh
1 2 3 4 5 6 #!/bin/bash stamp=`date +'%Y%m%d'` logname=/usr/local/openresty/nginx/logs/go_access.log reportname=/data/web/report/report${stamp}.html ps -ef|grep '/usr/local/bin/goaccess'|grep -v grep |awk '{print $2}' |xargs kill /usr/local/bin/goaccess ${logname} -o ${reportname} --log-format=COMBINED --real-time-html --daemonize
8、生成前一天的历史报表(在日志文件每天定时切割的情况下,如果不按天切割将无法生成前一天的报表) cat /etc/crontab |grep sh
1 00 01 * * * root source /etc/profile && sh /root/test.sh
cat /root/test.sh
1 2 3 4 5 6 #!/bin/bash prestamp=`date -d '1 day ago' +'%Y%m%d'` prelogname=/usr/local/openresty/nginx/logs/go_access${prestamp}.log #prelogname=/usr/local/openresty/nginx/logs/go_access.log prereportname=/data/web/report/report${prestamp}.html /usr/local/bin/goaccess ${prelogname} -o ${prereportname}
9、下面列举一些单独的命令生成自己需要的报表 实时报表
1 /usr/local/bin/goaccess /usr/local/openresty/nginx/logs/go_access.log -o /data/web/report/report20181204.html --log-format=COMBINED --real-time-html --daemonize
增量追加持久化数据,将日志加载到磁盘,不使用配置文件(命令行指定)
1 /usr/local/bin/goaccess /tmp/api_access.log --load-from-disk --db-path=/tmp/goaccess --keep-db-files --debug-file=/tmp/goaccess.log --date-format='%d/%b/%Y' --log-format='%h %^[%d:%t %^] "%r" %s %b' --time-format='%H:%M:%S'
增量追加持久化数据,将日志加载到磁盘,同时输出到html表(添加-o 参数,指定输出html)
1 /usr/local/bin/goaccess /tmp/api_access.log -o /data/web/oldreport/oldreport20181205.html --load-from-disk --db-path=/tmp/goaccess --keep-db-files --debug-file=/tmp/goaccess.log --date-format='%d/%b/%Y' --log-format='%h %^[%d:%t %^] "%r" %s %b' --time-format='%H:%M:%S'
添加到后台运行(因为没有–real-time-html使用–daemonize是不生效的)
1 /usr/local/bin/goaccess /tmp/api_access.log -o /data/web/oldreport/oldreport20181205.html --load-from-disk --db-path=/tmp/goaccess --keep-db-files --debug-file=/tmp/goaccess.log --date-format='%d/%b/%Y' --log-format='%h %^[%d:%t %^] "%r" %s %b' --time-format='%H:%M:%S' &
对已经持久化的数据,使用-o参数生成报表
1 /usr/local/bin/goaccess -o /data/web/oldreport/oldreport20181205.html --log-format=COMBINED --keep-db-files --db-path=/tmp/goaccess --load-from-disk
10、使用过程遇到的问题 1 2 3 4 1、在goaccess后台运行并且开启持久化的情况下,不能使用kill -9 pid方法,使用这种方法杀掉进程会毁坏数据,可以使用kill pid的方法 2、使用持久化功能,进程宕掉之后,重启进程需要清空日志文件中的数据,否则会把日志文件中的旧数据重复加载一遍。 3、--daemonize添加守护进程,只用--real-time-html可用时生效 4、使用real_time_html适时生效需要开启goaccess的端口默认为7890
11、goaccess html参数详解 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 General Statistics:此面板提供了几个指标的摘要,其中一些包括:有效和无效请求的数量,分析数据集所花费的时间,唯一访问者,请求的文件,静态文件(CSS,ICO,JPG等)HTTP引用,404s,已解析日志文件的大小和带宽消耗。 Unique visitors(每日独立访客 - 包括网络机器人):此面板显示点击次数,唯一身份访问者和每个日期的累积带宽等指标。包含相同IP,相同日期和相同用户代理的HTTP请求被视为唯一访问者。默认情况下,它包括网络爬虫/蜘蛛。 可以使用--date-spec = hr将日期特异性设置为小时级别,这将显示日期,例如05 / Jun / 2016:16。如果您想跟踪小时级别的每日流量,这非常棒。 Requested files(请求的文件):此面板显示Web服务器上请求最多的文件。它显示了匹配,唯一身份访问者和百分比,以及累积带宽,协议和使用的请求方法。 Requested static files(请求的文件):列出了最常用静态文件,如:JPG,CSS,SWF,JS,GIF,和PNG文件类型,使用相同的指标作为最后的面板一起。可以将其他静态文件添加到配置文件中。 404 or Not Found(未找到的URLS):显示与先前请求面板相同的指标,但是,其数据包含在服务器上找不到的所有页面,或通常称为404状态代码。 Hosts(未找到的URLS):此面板包含有关主机本身的详细信息。这非常适合发现×××性爬虫,并确定谁在吃你的带宽。 扩展面板可以显示更多信息,例如主机的反向DNS查找结果,原产国和城市。如果-a启用了参数,则可以通过选择所需的IP地址,然后按Enter来显示用户代理列表。 Operating Systems(操作系统):此面板将报告主机在到达服务器时使用的操作系统。它试图提供每个操作系统的最具体版本。 Browsers(操作系统):此面板将报告主机在访问服务器时使用的浏览器。它试图提供每个浏览器的最具体版本。 Visit Times(时间分配):此面板将显示每小时报告。此选项显示24个数据点,每天一小时一个。 可选地,可以使用--hour-spec = min将小时特异性设置为十分之一水平,这将显示小时为16:4如果您想要发现服务器上的流量峰值,这很好。 Virtual Hosts:此面板将显示从访问日志中解析的所有不同虚拟主机。如果在日志格式字符串中使用%v,则会显示此面板。 Referrers URLs:如果相关主机通过其他资源访问了网站,或者是从其他主机链接转移给您,则会在此面板中提供引用它们的网址。请参阅`--ignore-panel`配置文件以启用它。 (默认禁用) Referring Sites(推荐网站):此面板仅显示主机部分,但不显示整个URL。请求来自的URL。 Keyphrases(谷歌搜索关键字):它报告了用于Google搜索,Google缓存和Google翻译的关键字,这些关键字已导致您的网络服务器。目前,它仅通过HTTP支持Google搜索查询。请参阅`--ignore-panel`配置文件以启用它。 (默认禁用) Geo Location(地理位置):确定IP地址在地理位置的位置。统计数据按大陆和国家分列。它需要使用GeoLocation支持进行编译。 HTTP Status Codes(HTTP状态码):HTTP请求的数字状态代码的值。 Remote User (HTTP authentication):这是HTTP身份验证确定的请求文档的人员的用户ID。如果文档没有密码保护,则此部分将为“ - ”,就像前一个部分一样。除非%e在log-format变量中给出,否则不会启用此面板。 --real-os 展示真实的操作系统。在Operation System模块中,是否展示更详细的操作系统信息。
12、goaccess与nginx日志格式日常转换表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 nginx goaccess $time_local %d:%t %^ $host %v $http_host %v $remote_addr %h $request_time %T $request_method %m $request_uri %U $server_protocol %H $request %r $status %s $body_bytes_sent %b $bytes_sent %b $http_referer %R $http_user_agent %u
如果找不到对应的格式可以使用“%^”–Ignore this field,来忽略那一部分