GoAccess是一个用C语言编写的Web日志分析工具,具有快速、高效、漂亮且支持多种Web服务端特性的且仍在保持快速进化的特点。它不仅可以在终端展现Web Server的日志分析结果,也可以将结果输出成为具有现代外观的HTML展示页面。

2021.09 北京怀柔 日出东方凯宾斯基酒店

功能

  • 完全实时:所有指标在终端上每 200 毫秒更新一次,在 HTML 输出上每秒更新一次。
  • 跟踪应用程序响应时间:跟踪服务请求所需的时间。如果你想跟踪减慢了网站速度的网页,则非常有用。
  • 访问者:按小时或日期确定最慢运行的请求的点击量、访问者数、带宽数和指标。
  • 按虚拟主机的度量标准:如果有多个虚拟主机(Server),它提供了一个面板,可显示哪些虚拟主机正在消耗大部分 Web 服务器资源。

安装

Goaccess现在已经可以在主流Linux发行版中直接安装了。当然,你也可以获取它的源代码,根据实际需要进行编译部署。

编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 默认编译参数
# 下载源码安装
$ wget https://tar.goaccess.io/goaccess-1.9.3.tar.gz
$ tar -xzvf goaccess-1.9.3.tar.gz
$ cd goaccess-1.9.3/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install

# git拉取源码安装
$ git clone https://github.com/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fi
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install

包管理

1
2
3
4
# Fedora 或者 开启epel库
yum install goaccess
# Ubuntu
apt-get install goaccess

Docker

1
2
3
4
5
6
docker pull allinurl/goaccess

# 输出静态页面
cat access.log | docker run --rm -i -e LANG=$LANG allinurl/goaccess -a -o html --log-format COMBINED - > report.html
# 动态实时显示
tail -F access.log | docker run -p 7890:7890 --rm -i -e LANG=$LANG allinurl/goaccess -a -o html --log-format COMBINED --real-time-html - > report.html

使用

配置参数

1
2
3
4
5
# 需要配置的参数
time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
geoip-database /usr/share/GeoIP/dbip-country-lite-2024-11.mmdb

需要注意的是地图展示,需要下载mmdb地理信息包。其默认配置表中的地理信息数据库是商用的。因为我们其实没有那么高的需求,使用免费版本即可。下载链接如下:DB-IP国别信息数据库。额外注意,下载的时候需要点击同意它的使用授权。

效果示意:

终端使用

1
2
# 使用tab键来切换标签页
goaccess -c /var/log/access.log
  1. 可以按照日志格式进行输出,可以看到有命令格式提示
  2. 页面展示

输出页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 输出默认界面
goaccess access.log -o report.html --log-format=COMBINED

# 输出中文界面
LC_TIME="zh_CN.UTF-8" bash -c 'goaccess access.log --log-format=COMBINED -o report.html '

# 指定格式输出到指定页面
# -a 指定列出user-agents信息
# -d 输出IP解析信息
# -p 指定配置文件
# -f 指定输入原始日志文件
# -o 指定输出展示页面文件
goaccess -a -d -f /var/log/nginx/blog.access.log -o /opt/blog/source/html/access.html

# 多个日志同时输出
goaccess access.log access.log.1 access.log.2 -o report.html --log-format=COMBINED
cat access.log.2 | goaccess access.log access.log.1 -

# 日志压缩包的输出
zcat access.log.*.gz | goaccess access.log -

实时输出

1
2
3
4
5
6
7
8
# 将goaccess作为后台进程来持续实时输出
goaccess access.log -o report.html --log-format=COMBINED --real-time-html --daemonize
# 指定使用其他端口
goaccess access.log -o report.html --real-time-html --daemonize --port=9870
# 指定其他服务器的goaccess来进行分析
ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess -
# 多个网卡,指定其中一个或指定仅本地访问
goaccess access.log -o report.html --real-time-html --addr=127.0.0.1