GoAccess 是一个开源的、基于终端界面的实时 Web 日志分析工具。它支持从多种格式的访问日志中快速提取关键数据,如访问量、访客 IP、请求路径、用户代理、状态码等,并通过直观的终端界面或 HTML 报表展示这些信息
两种安装方式
1. 通过包管理器安装(简单但可能不是最新版)
- 优点:简单快捷
- 缺点:版本可能较旧,缺少最新功能支持
sudo apt update #更新系统
sudo apt install goaccess #安装goaccess
2. 通过源码编译安装(推荐)
注意事项:
- 建议从官网检查最新版本号
- 如果缺少其他依赖,configure步骤会提示
# 安装依赖
sudo apt update && sudo apt install -y libmaxminddb-dev libncursesw5-dev build-essentia
# 下载安装包(请检查最新版本)
wget https://tar.goaccess.io/goaccess-1.9.2.tar.gz
# 解压
tar -xzvf goaccess-1.9.2.tar.gz
cd goaccess-1.9.2/
# 配置编译选项
./configure --enable-utf8 --enable-geoip=mmdb --with-openssl
# 编译安装
sudo make
sudo make install
验证安装
which goaccess # 检查安装路径
goaccess -V # 检查版本
解决路径问题:如果命令未找到
sudo ln -s /usr/local/bin/goaccess /usr/bin/goaccess
GeoIP2数据库配置
- 配置GeoIP2数据库后,GoAccess的结果就能有地图功能
- 访问MaxMind https://www.maxmind.com官网注册账号
- 下载GeoLite2-City.mmdb文件
- 解压并记住保存路径(建议/usr/local/share/GeoIP/)
更新提示:该数据库需要定期更新(每月一次)
运行GoAccess
GoAccess有2种模式,一种是在指定的路径生成一个html报告,另一种是开始web实时更新的报告,这种方式就可以绑定一个域名或者用IP的方式访问
生成静态报告命令
运行后,会在/var/www/html下生成report.html文件,下载就能查看
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED --geoip-database=/path/to/GeoLite2-City.mmdb
实时HTML报告命令
/var/log/nginx/access.log:nginx的日志路径-o /var/www/html/report.html:是生成的结果路径log-format=COMBINED:默认COMBINED,常见还有COMMON、VCOMBINED(虚拟机)--geoip-database=/path/to/GeoLite2-City.mmdb:geoip2的保存路径--real-time-html:开启实时web浏览port=7890:web端口7890
goaccess /var/log/nginx/access.log -o /var/www/html/report.html \
--log-format=COMBINED \
--geoip-database=/path/to/GeoLite2-City.mmdb \
--real-time-html \
--port=7890
1. 开放端口(web实时浏览需要)
如果你想在浏览器可以直接查看,就需要加上–-real-time-html,同时开放7890端口才能,为了安全,关闭goaccess后还有关闭端口,暴露公网的端口有安全风险,不用的适合记得关闭,或者用域名绑定80端口,规避被入侵的风险。
ufw allow 7890 # 开放端口
ufw deny 7890 # 禁用端口
ufw reload # 重启防火墙
2. 配置nginx
sudo vim /etc/nginx/site-avaliable/goaccess.conf
# 内容
server {
listen 80;
server_name localhost; # 替换为您的域名或服务器IP地址
root /var/www/html; # 确保此路径指向报告文件所在目录
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location /report.html {
# 确保 GoAccess 报告文件可以访问
allow all;
try_files $uri =404;
}
# 日志配置(可选)
# access_log /var/log/nginx/goaccess_access.log;
# error_log /var/log/nginx/goaccess_error.log;
}
# 保存
:wq
# 建立软连接
sudo ln -s /etc/nginx/site-avaliable/goaccess.conf /etc/nginx/site-enabled/
# 验证配置
sudo nginx -t
# 重启nginx
sudo systemctl restart nginx
编写脚本
每次运行都要输入一长串命令,显得很麻烦,我们可写一个shell文件,每次运行脚本就可以
sudo vim ./run-goaccess.sh
# 内容
echo “端口$PORT已开放。”
# 清理函数(关闭端口+删除报告文件)
cleanup() {
echo "正在清理..."
# 关闭端口
sudo ufw delete allow $PORT/tcp
echo "端口 $PORT 已关闭。"
# 删除报告文件
rm -f "$REPORT_FILE"
echo "已删除报告文件: $REPORT_FILE"
exit
}
# 捕获退出信号(Ctrl+C等)
trap cleanup SIGINT SIGTERM
# 执行GoAccess命令
echo "正在启动GoAccess..."
LANG="zh_CN.UTF-8" bash -c "goaccess -f /var/log/nginx/access.log -o $REPORT_FILE --real-time-html -p /usr/local/etc/goaccess/goaccess.conf –-geoip-database=/root/geoip/GeoLite2-City.mmdb –-log-format=COMBIND"
# 等待GoAccess进程结束
wait
# 正常退出时也执行清理
cleanup
# 保存
:wq
# 赋予可执行权限
sudo chmod +x ./run-goaccess.sh
运行
./run-goaccess.sh
最后在浏览器上输入https://[ip]/report.html就能看到网站的数据