GoAccess将web服务器日志可视化


GoAccess web日志可视化

有时候我们希望能分析一下web服务器的访问记录,如果是直接打开/var/log/nginx/access.log的话,虽然的确可以看到访问记录,但是数据太多了,也很难直观的分析出我们想要的结果。而使用命令来分析虽然可行,但是命令比较难记忆,也不算直观。

今天了解到了一款轻量易部署的工具——goaccess,可以用来将我们nginx服务器的访问日志可视化,将数据直观的展现给我们。除了nginx日志,该工具还可以将apache等服务端的日志可视化展示

安装GoAccess

官方给出了安装教程,有linux包管理器安装,源码编译安装,docker镜像等多种部署方式,由于ubuntu18源里面的goaccess版本还算比较新,可以直接使用sudo apt install goaccess来安装

强烈建议不想折腾的话直接用包管理器安装!!!体验基本是相同的

不过这篇文章中我计划直接下载源码编译安装最新版,获得最新的体验:

我计划使用geoip city的mmdb数据库(一开始我以为可以精确到城市,但是查看github issues发现他们其实还没做精确到城市的显示…),所以得先去下载geoip2的数据库 https://www.maxmind.com/ 需要注册才能下载,还不能挂代理。

# 首先安装依赖避免出现下面那些报错
sudo apt-get install libncursesw5-dev libglib2.0-dev libgeoip-dev libtokyocabinet-dev libbz2-dev
$ 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=mmdb --enable-tcb=btree #这里的各个配置可以查看教程中的介绍如果要开启ssl 使用 --with-ssl参数
$ make
$ make install

第一次尝试安装出现报错

checking for MMDB_open in -lmaxminddb… no
configure: error:
Missing development files for libmaxminddb library.*

说明我们还没有安装 libmaxminddb库。

libmaxminddb库提供一个用于读取MaxMind数据库文件的C 库,包括来自MaxMind的GeoIP2数据库。 这是定制的二进制格式,旨在方便快速查找IP地址,同时允许在与地址相关的数据类型中具有很大的灵活性。

我们先进行该库的安装:

wget https://github.com/maxmind/libmaxminddb/releases/download/1.4.2/libmaxminddb-1.4.2.tar.gz
tar -zxvf libmaxminddb-1.4.2.tar.gz
cd libmaxminddb-1.4.2
$ ./configure
$ make
$ make check
$ sudo make install
$ sudo ldconfig

尝试configure的时候再次报错 configure: error: ** Missing development libraries for ncursesw*,使用sudo apt-get install libncursesw5-dev补上我们缺少的依赖。

之后还有一个依赖缺少问题 configure: error: *** Missing development libraries for Tokyo Cabinet Database

所以记得在configure之前先安装依赖 sudo apt-get install libncursesw5-dev libglib2.0-dev libgeoip-dev libtokyocabinet-dev

./configure执行成功

之后再次执行./configure --enable-utf8 --enable-geoip=mmdb --enable-tcb=btree,执行成功之后再执行make make install来安装,然后使用sudo cp goaccess /usr/bin/将二进制文件移动到/usr/bin目录。之后编辑配置文件 nano /usr/local/etc/goaccess/goaccess.conf修改 geoip-database /usr/local/src/GeoLite2-City.mmdb 这里填你下载的数据库路径

编译安装还是比较麻烦,再次建议直接使用apt/yum/pacman安装

更多的安装教程可以查看上面的安装教程链接。

GoAccess的多种展示方式

goaccess有多种数据可视化的方式,分别为:

  1. 命令行输出格式化数据
  2. 利用access.log生成静态的可视化数据
  3. 生成实时可视化数据

注意,如果是编译安装且选择了 –enable-geoip=mmdb的话需要编辑配置文件,并在使用命令的时候带上参数 –config-file=/usr/local/etc/goaccess/goaccess.conf,如果是用包管理器安装的话则不需要

命令行输出GoAccess

goaccess /var/log/nginx/access.log -c,会先询问你数据的格式,我这里的日志使用的是第一种。

命令行下的可视化数据

解析accesslog生成静态html

GoAccess还可以解析access.log生成静态html,以更加直观的方式来展示数据。

goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED,之后再使用浏览器访问report.html即可查看报告,各种数据一应俱全。

实时解析访问日志

GoAccess除了可以生成静态的html文件,还可以生成实时网站访问数据!

goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html --config-file=/usr/local/etc/goaccess/goaccess.conf

添加中文支持

Goaccess 1.3之后的版本提供了多语言支持,先在命令行中执行 apt install language-pack-zh-hans 安装中文包,再使用export LANG=zh_CN.UTF-8修改环境变量,再次使用 goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html --config-file=/usr/local/etc/goaccess/goaccess.conf启动GoAccess可以发现已经是中文界面了。

关于实时模式,可以查看官网的demo https://rt.goaccess.io/?20200209201008

异常退出

如果实时模式没有正常退出,可能无法再次正常启动,GoAccess默认使用7890 websocket端口,所以使用lsof -i:7890查看占用该端口的进程号并kill即可。

ssl支持

如果需要在加密连接上输出实时数据,则需要使用 --ssl-cert=--ssl-key=,我在设置之后访问report.html发现数据依旧是静态的,突然想起我用了cloudflare cdn,而7890端口并不在cloudflare的支持端口列表里面,所以我使用参数 --ws-url=wss://服务器域名(我们的浏览器会尝试与该域名的8443端口见了ws连接):8443 --port=8443 把端口改成了8443。令人没想到的是,此时的report.html使用代理链接的时候是可以连接的,并可以查看实时信息,而直接连接的时候依旧是静态数据,tcping一看。

去cloudflare的官网可以发现如下内容

只有端口 80 和 443 可兼容以下服务:

  • 对于启用了中国网络的域名的中国境内数据中心 HTTP/HTTPS 流量,

也就是说,国内是没办法通过cloudflare连接非80/443端口的…

反向代理

但是也不是没有办法连接,最后我想到了反向代理的方案。

将启动参数改为--ws-url=wss://你的域名.com/goaccess --port=7890

修改nginx站点配置文件 /etc/nginx/site-available/default,添加下面内容

    location /goaccess {
        proxy_redirect off;
        proxy_pass https://127.0.0.1:7890;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
    }

注意,如果你的站点配置文件里面开启了url重写,为了避免 /goaccess 受到影响,我们需要把该路径排除重写。

# 把重写规则都放到location / 里面去
location / { 
    if (-f $request_filename/index.html){
    rewrite (.*) $1/index.html break;
    }
    if (-f $request_filename/index.php){
    rewrite (.*) $1/index.php;
    }
    if (!-f $request_filename){
    rewrite (.*) /index.php;
    }
} 
#下面什么都不需要做
location /goaccess/ {
}

之后重启nginx,再访问report.html,发现左边齿轮处终于显示connect了。

如果你只是自己看或者不在意ip暴露,其实直接使用ip直接连接不走cdn就没那么麻烦了。

参考

https://goaccess.cc/?mod=man

https://goaccess.io/

http://www.xiaomlove.com/2019/04/01/simple-parse-nginx-access-log-by-goaccess/

https://stackoverflow.com/questions/26093270/nginx-how-to-let-rewrite-rules-ignore-files-or-folders


文章作者: HavocW
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 HavocW !
评论
 上一篇
Buyvm拉斯维加斯配置升级后测试 Buyvm拉斯维加斯配置升级后测试
Buyvm拉斯维加斯机房的vps处理器全部升级为了AMD Ryzen 9 3900X,且磁盘io也比原来高了很多,每加1.25美元可以增加256GB的块储存,G口无限流量,国际方向带宽比较充足,但是大陆速度大不如前。
2020-04-16
下一篇 
vps测试工具收集 vps测试工具收集
当买到的 vps 开机后,相信不少人对于 vps 的 cpu / 硬盘 / 网络等表现如何肯定是相当的好奇,我这里也搜集一些​vps 测试脚本 / 程序方便自己之后的使用,也方便大家的查询。
2020-04-11
  目录