跳转到主要内容
杨月昌的软件博客
返回

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

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


1. 下载并安装 GoAccess

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

1.1 安装依赖库

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

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

1.2 编译安装

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 创建输出目录

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

2.2 设置定时任务

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

# 设置中文环境,防止乱码
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 压缩包)。如果你想查看过去一个月的聚合报告,可以执行以下逻辑:

# 合并当天和所有历史备份日志
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 运行):

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 注意事项


5. 安全访问建议

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

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

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

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

# 示例:匹配带响应时间的自定义格式
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 日志分析系统,实时洞察站点流量。



上一篇
SQL Server 2019 安装全攻略:为 .NET 开发者打造稳健后台
下一篇
Transformer:注意力革命十年回顾与2026年生态全景