goaccess—搭建开源GoAccess工具进行可视化Web日志分析
一、GoAccess简介
GoAccess 是一款开源的且具有交互视图界面的实时 Web 日志分析工具,其核心思想是实时快速分析和查看Web服务器统计信息,
支持内容
GoAccess可分析Apache/Nginx等WEB日志。
支持终端
通过你的 Web 浏览器或者 nix 系统下的终端程序(terminal)即可访问,旨在成为一个基于终端的快速日志分析器,
支持格式
同时还支持生成HTML、JSON、CSV等数据报告。
*具体优势
能为系统管理员提供快速且有价值的 HTTP 统计,并以在线可视化服务器的方式呈现。
二、GoAccess特点
所有面板和指标都定时在终端输出上每200毫秒更新一次,在HTML输出上每秒更新一次。GoAccess允许任何自定义日志格式字符串。预定义选项包括Apache,Nginx,Amazon S3,Elastic Load Balancing,CloudFront等跟踪提供请求所需的时间。如果您想跟踪减慢网站速度的网页,则非常有用。
数据持久性强,GoAccess能够通过磁盘上的B + Tree数据库逐步处理日志。GoAccess是用C语言编写的,要运行它,你只需要将ncurses作为依赖项,它甚至还具有自己的RFC6455兼容Web Socket服务器。您可以针对访问日志文件运行它,选择日志格式并让GoAccess解析访问日志并显示统计信息。
按小时或日期确定最慢运行请求的匹配数,访问者数,带宽数和指标数。多个虚拟主机,一个面板,显示哪个虚拟主机正在消耗大部分Web服务器资源。定制GoAccess以适合您自己的色彩品味。通过终端,或者只是更新HTML输出上的样式表。
– 快速、实时(由于基于C语言编写,可在毫秒或秒内完成更新)
– 只依赖于ncurses
– 兼容几乎所有的Web日志格式(Apache、Nginx、Amazon S3、Elastic Load Balancing、CloudFront等)
– 只需要配置日志格式即可运行
– 美丽的终端和引导仪表板(可自定义色彩方案)
三、GoAccess安装
GoAccess安装很简单,可以通过Linux的yum,Debian/Ubuntu的apt-get,FreeBS的pkg等方式进行安装,不过,不推荐这样的方式,因为版本不是最新的,推荐使用源码编译安装方式,因为可以使用高版本。目前是V1.4版本。
官方下载网址:https://goaccess.io/download
$ wget https://tar.goaccess.io/goaccess-1.4.6.tar.gz
$ tar -xzvf goaccess-1.4.6.tar.gz
$ cd goaccess-1.4.6/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
:::info
—enable-utf8
宽字符支持。依赖 Ncursesw 模块。
—enable-geoip=
地理位置支持。依赖 MaxMind GeoIP 模块。legacy 将使用原始 GeoIP 数据库。mmdb 将使用增强版 GeoIP2 数据库。
:::
:::warning
如果在执行./configure时,遇到错误的问题:
Bash
configure: error:
** Missing development files for the GeoIP library
或者是这个错误
Missing development files for libmaxminddb library
原因:未安装地理数据库导致的,这时要看—enable-geoip=
—enable-geoip=legacy解决方法:
$ wget https://github.com/maxmind/geoip-api-c/releases/download/v1.6.11/GeoIP-1.6.11.tar.gz
$ tar -xzvf GeoIP-1.6.11.tar.gz
$ cd GeoIP-1.6.11
$ ./configure
$ make
#make instal
如果make出现./bin2c: error while loading shared libraries: libGeoIP.so.1: cannot open shared object file: No such file or directory错误,使用ln -s /usr/local/lib/libGeoIP.so
—enable-geoip=mmdb解决方法:
Bash
$yum -y install libmaxminddb
:::
四、生成Web可视化日志
GoAccess支持分析多个日志文件,现在nginx的日志有服务器的朋友都会进行日志按每天进行切割成多份日志的。
#goaccess -a -d -f weblog_*.log --log-format=COMBINED -p /usr/local/etc/goaccess/goaccess.conf -o allreport.html --real-time-html
因为我的日志是nginx日志按天进行切割的,一天一个日志文件,所以我就进行用通适符进行 weblog_ 是日志前面固定的名称,* 号是后面日期的变量。GoAccess分析多个日志的方式有多几种,
allreport.html 生成的web文件,名字你可以随便起。当然,你可以将文件直接生成在网站目录下,到时就可以直接打开网址来查看了。
引用官方多日志说明,但是我还是觉得我使用的这个方法更方便些。
多日志文件
有多种方法可以实现让 GoAccess 同时解析多个日志文件。最简单的方法是直接将多个文件通过命令行传给 GoAccess:
# goaccess access.log access.log.1
甚至在正常读取文件的时候也可以同时通过管道解析文件:
# cat access.log.2 | goaccess access.log access.log.1 -
注意 添加到命令行末尾的破折号 - 是为了告诉 GoAccess 应该从管道中读取数据。
要更加灵活的使用 GoAccess,我们可以使用一系列的管道。
例如,我们希望处理所有压缩过的日志文件 access.log..gz 并附加到当前日志文件中,则我们可以这样做:
`# zcat access.log..gz | goaccess access.log -`
如果你要生成中文的界面,在执行命令时,先执行
Bash
LANG="zh_CN.UTF-8"
也可以进行修改系统的语言为中文,可以百度一下Linux系统语言修改方法。
五、定时生成日志的HTML文档
放在crontab中定时生成的话,默认是英文的,不会生成中文,所以需要用一个小脚本来处理,除非你的系统是中文,默认是中文的,因为GoAccess生成的语言是根据你系统语言来定的。下面的方法是引用51CTO博主xingliguang的脚本。也是文章后面最后一条链接。
1.方法一
#cat /root/goaccess.sh
#!/bin/bash
LANG="zh_CN.UTF-8"
/usr/local/bin/goaccess -p /tmp/goaccess.conf /var/log/nginx/access.log -o /www/html/go.html
然后再将脚本加入到crontab即可
Bash
#crontab -l
0 * * * * /bin/bash /root/goaccess.sh
2.方法二:直接将命令放在计划任务中
0 0 1 * * goaccess -a -d -f /data/logs/fanhaobai.com.access.log -p /etc/goaccess.conf -o /data/html/hexo/public/go-access.html 2> /data/logs/go-access.log
参考链接:
GoAccess官方:https://goaccess.io/
GoAccess国内中文站:https://goaccess.io/ 【这个网站下载的版本并不是最新的,最新的可以到官方英文站下】
尽管 GoAccess 很强大,但是它无法制定自定义监控规则,无法满足对站点更细粒度更全面的监控需求。还是推荐使用使用 ELK 日志平台 来分析站点的访问情况和流量分析。