之前网站在阿里云虚拟主机,自带日志分析工具,利用的是开源的AWStats,当时觉得还挺好用,后来转用服务器后,其配置对与不懂编程的人来说有点难度,后来又发现了一个开源的日志分析工具GoAccess,安装配置都很简单,数据报告页面也比AWStats更好看,对于我来说唯一的缺点就是在数据报告页面不支持选择制定日期,不过这都是小事。

安装步骤

如果服务器为 Debian 或 Ubuntu,可直接在其官方仓库下载。为确保GoAccess是最新版本,请在终端输入以下命令:

1.添加 GoAccess 的官方 Debian/Ubuntu 仓库

wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null 
echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list 

2.更新包列表

sudo apt-get update

3.安装 GoAccess

sudo apt-get install goaccess

配置使用

1.配置修改

在配置文件末尾添加如下代码,配置文件一般在/etc/goaccess/goaccess.conf

time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

2.生成报告

在终端输入以下命令

LANG=zh_CN.UTF-8 goaccess -f /www/wwwlogs/access.log(要分析的日志路径) -o /www/wwwlogs/index.html(填写要生成报告的路径)

注意:生成报告的路径,一定要提前把相应的文件夹和读写权限设置好。
如果 LANG=zh_CN.UTF-8 不起作用,可以尝试换成 LC_ALL=zh_CN.UTF-8 。

设置定时脚本内容

LANG="zh_CN.UTF-8" bash -c 'goaccess -f /www/wwwlogs/access.log(要分析的日志路径) -o /www/wwwlogs/index.html(填写要生成报告的路径)'

3.查看报告

方法1:静态文件

在生成报告的目录里下载数据报告静态文件,在本地用浏览器打开查看。

方法2:在线查看

如果想利用域名直接输入地址查看数据报告,可以把生成报告的路径写到网站根目录里。

注意:如果生成的报告不是中文,请参考这篇文章Debian系统配置中文语言

4.特殊需求

1.过滤爬虫

如果想要在数据报告页面过滤爬虫,在生成报告的终端指令后面加上--ignore-crawlers即可

2.只看爬虫

在生成报告的终端指令后面加上--crawlers-only即可

3.显示ip归属地

如果想要在数据报告页面显示ip国家和城市,需要下载相应数据文件GeoLite2-City.mmdb,上传到服务器任意目录,然后把文件地址放到 GoAccess 配置文件即可。格式如下:

geoip /usr/share/GeoIP/GeoLite2-City.mmdb

4.分析多个.gz的压缩存档

如果网站日志切割成多个压缩包,可以用zcat命令,如下:

zcat access.log.*.gz | goaccess -o report.html

日志名称支持通配符,可实现查看某月某天等数据,比较灵活。(建议提前按天分隔日志)

5.过滤指定ip地址

如果不想在数据报告页面看到自己本地的访问数据,可以在配置文件里填写以下内容,多个ip就添加多行。

exclude-ip 127.0.0.1

或者在终端指令后面加上--exclude-ip=xx.xx.xx.xx即可。

6.查看指定ip数据

终端指令如下

grep 'xx.xx.xx.xx' access.log | goaccess  -o report.html

grep 不止可以查看 ip,可以查看日志里任何想看的数据。grep 是一个在 Unix 和类 Unix 操作系统中常用的命令行工具,用于搜索文件中匹配指定模式的行。比如查看指定状态码数据grep "404" grep 404 ,而且grep还支持正则写法,可以让指令更精准。

7.查看指定状态码数据

如果是查看 gz 压缩包的日志,写法略有不同,要先有日志数据,然后通过管道符将 zcat 的输出作为 grep 的输入,具体如下:

zcat access.log.*.gz | grep 404 | goaccess -o report.html

8.查看最近N天数据

在终端指令后面加上--keep-last 7即可。数字为天数,可任意修改。

更多功能和设置,请查看 GoAccess官方 GoAccess中文网