834 字
4 分钟
使用 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 -y1.2 编译安装
wget https://tar.goaccess.io/goaccess-1.9.tar.gztar -xzvf goaccess-1.9.tar.gzcd goaccess-1.9/./configure --enable-utf8 --enable-geoip=mmdbmake && sudo make install2. 在宝塔中配置自动化分析报告
宝塔面板的站点日志默认存放在 /www/wwwlogs/。我们要实现的是:每隔一段时间自动更新分析报告。
2.1 创建输出目录
mkdir -p /www/wwwroot/yourdomain.com/goaccess2.2 设置定时任务
进入宝塔面板 -> 计划任务 -> 添加任务:
- 任务类型:Shell 脚本
- 执行周期:每 30 分钟(或根据需求调整)
- 脚本内容:
# 设置中文环境,防止乱码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-config3. 处理历史备份日志
宝塔会自动进行日志切割(gz 压缩包)。如果你想查看过去一个月的聚合报告,可以执行以下逻辑:
# 合并当天和所有历史备份日志zcat /www/wwwlogs/yourdomain.com_access_*.gz > /tmp/merged_all.logcat /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.log4. 开启 WebSocket 实时分析功能
如果你希望打开 HTML 页面时,数据能像心跳一样实时跳动,可以开启 Real-time HTML 模式。
4.1 启动实时服务
在终端执行(建议配合 screen 或 nohup 运行):
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=COMBINED4.2 注意事项
- 放行端口:务必在宝塔面板的 安全 设置以及云服务器后台安全组中放行
7890端口。 - HTTPS 环境:如果你的站点启用了 SSL,WebSocket 必须走 WSS 协议。这通常需要通过 Nginx 反向代理
7890端口或在 GoAccess 启动参数中指定证书路径。
5. 安全访问建议
由于日志包含敏感信息(如 IP 地址、攻击路径等),绝对不能直接对外公开。
- 面板访问限制:
在宝塔面板中,点击
网站->设置->访问限制。为/goaccess目录设置用户名和密码。 - 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 日志分析系统,实时洞察站点流量。
使用 GoAccess 在宝塔面板中进行 Web 日志分析
https://sw.rscclub.website/posts/goaccess/