834 字
4 分钟
使用 GoAccess 在宝塔面板中进行 Web 日志分析

在网站运营中,了解“谁在访问”、“访问了什么”以及“是否存在恶意攻击”至关重要。GoAccess 是一款开源的实时 Web 日志分析工具,它不仅能在终端运行,还能生成美观、交互式的 HTML 报告。相比传统的 ELK 方案,它极度轻量,非常适合配合宝塔面板使用。


1. 下载并安装 GoAccess#

在宝塔面板的 终端 中执行以下步骤。

1.1 安装依赖库#

为了支持地理位置识别(GeoIP)和 UTF-8 字符集,先安装必要依赖:

Terminal window
# CentOS 系
yum install libmaxminddb-devel ncurses-devel -y
# Ubuntu/Debian 系
apt-get install libmaxminddb-dev libncursesw5-dev -y

1.2 编译安装#

Terminal window
wget https://tar.goaccess.io/goaccess-1.9.tar.gz
tar -xzvf goaccess-1.9.tar.gz
cd goaccess-1.9/
./configure --enable-utf8 --enable-geoip=mmdb
make && sudo make install

2. 在宝塔中配置自动化分析报告#

宝塔面板的站点日志默认存放在 /www/wwwlogs/。我们要实现的是:每隔一段时间自动更新分析报告。

2.1 创建输出目录#

Terminal window
mkdir -p /www/wwwroot/yourdomain.com/goaccess

2.2 设置定时任务#

进入宝塔面板 -> 计划任务 -> 添加任务:

  • 任务类型:Shell 脚本
  • 执行周期:每 30 分钟(或根据需求调整)
  • 脚本内容
Terminal window
# 设置中文环境,防止乱码
export LANG="zh_CN.UTF-8"
# 定义路径变量
LOG_PATH="/www/wwwlogs/yourdomain.com.log"
OUT_PATH="/www/wwwroot/yourdomain.com/goaccess/index.html"
# 生成报告
# --log-format=COMBINED 是 Nginx/Apache 默认格式
goaccess $LOG_PATH -o $OUT_PATH --log-format=COMBINED --real-os --no-global-config

3. 处理历史备份日志#

宝塔会自动进行日志切割(gz 压缩包)。如果你想查看过去一个月的聚合报告,可以执行以下逻辑:

Terminal window
# 合并当天和所有历史备份日志
zcat /www/wwwlogs/yourdomain.com_access_*.gz > /tmp/merged_all.log
cat /www/wwwlogs/yourdomain.com.log >> /tmp/merged_all.log
# 生成历史报告
goaccess /tmp/merged_all.log -o /www/wwwroot/yourdomain.com/goaccess/history.html --log-format=COMBINED
# 清理临时文件
rm -f /tmp/merged_all.log

4. 开启 WebSocket 实时分析功能#

如果你希望打开 HTML 页面时,数据能像心跳一样实时跳动,可以开启 Real-time HTML 模式。

4.1 启动实时服务#

在终端执行(建议配合 screennohup 运行):

Terminal window
goaccess /www/wwwlogs/yourdomain.com.log -o /www/wwwroot/yourdomain.com/goaccess/realtime.html --real-time-html --addr=0.0.0.0 --port=7890 --log-format=COMBINED

4.2 注意事项#

  • 放行端口:务必在宝塔面板的 安全 设置以及云服务器后台安全组中放行 7890 端口。
  • HTTPS 环境:如果你的站点启用了 SSL,WebSocket 必须走 WSS 协议。这通常需要通过 Nginx 反向代理 7890 端口或在 GoAccess 启动参数中指定证书路径。

5. 安全访问建议#

由于日志包含敏感信息(如 IP 地址、攻击路径等),绝对不能直接对外公开。

  1. 面板访问限制: 在宝塔面板中,点击 网站 -> 设置 -> 访问限制。为 /goaccess 目录设置用户名和密码。
  2. IP 白名单: 在 Nginx 配置中设置仅允许你自己的 IP 访问该目录:
location /goaccess {
allow 1.2.3.4; # 你的 IP
deny all;
}

6. 进阶技巧:自定义日志格式#

如果你在宝塔中修改了 Nginx 的日志格式(例如增加了响应时间 $request_time),GoAccess 可能会解析失败。此时你需要自定义格式字符串:

Terminal window
# 示例:匹配带响应时间的自定义格式
goaccess access.log --log-format='%h %^[%d:%t %^] "%r" %s %b "%R" "%u" %T' --date-format='%d/%b/%Y' --time-format='%H:%M:%S'

总结#

GoAccess 是网站管理员的“监控探针”。通过宝塔面板的计划任务配合 GoAccess,你可以用极低的成本搭建起一套专业级的 Web 日志分析系统,实时洞察站点流量。

使用 GoAccess 在宝塔面板中进行 Web 日志分析
https://sw.rscclub.website/posts/goaccess/
作者
杨月昌
发布于
2021-06-19
许可协议
CC BY-NC-SA 4.0