老T博客

在1panel中使用Goaccess取代网站监控和网页统计

在1panel中使用Goaccess取代网站监控和网页统计

我最近几年的VPS上几乎都安装了 1Panel 面板,主要是简单、易用。但自从 1Panel 推出专业版后,像网站监控这种功能,免费版就没法使用了。

此前我的博客放在 Vercel 或 Cloudflare 上,要么使用后台自带的用量统计,要么就是用 Umami 这种自托管的第三方应用。但最近我在使用过程中发现,Umami 所依赖的 Next.js 出现漏洞,导致 VPS 一直高负载运行。而在切换 Vercel 托管后,发现连接速度不尽如人意,所以最终还是想弃用 Umami 改成在 VPS 上使用内置服务来监测。包括博客也托管到了 VPS 上。

Github 构建 Hugo 博客后通过 Rsync 同步到 VPS 非常简单,我也在之前简单写过, 怎样将 HUGO 博客部署到VPS 这里不再赘述。

Goaccess安装方法

Goaccess 就是一款对服务器日志进行读取和自动分析的插件,功能齐全,消耗资源少。如果想简单安装,直接 apt install goaccess 即可,但我用的 debian 软件库中 goaccess 还是 1.7.2 版本的,如果需要安装新版本,可以按照官方建议,如下操作:

Goaccess
Goaccess

  1. 安装依赖项

Goaccess 需要依赖 ncurse运行。另外,启用地图功能需要下载 geoip数据库和 maxminddb

1sudo apt-get install -y pkg-config
2sudo apt-get install -y libncursesw5-dev
3sudo apt-get install -y libmaxminddb-dev
4sudo mkdir -p /usr/local/share/GeoIP
5sudo wget -O /usr/local/share/GeoIP/GeoLite2-City.mmdb https://raw.githubusercontent.com/P3TERX/GeoLite.mmdb/download/GeoLite2-City.mmdb
  1. 安装 Goaccess
1$ wget https://tar.goaccess.io/goaccess-1.9.4.tar.gz
2$ tar -xzvf goaccess-1.9.4.tar.gz
3$ cd goaccess-1.9.4/
4$ ./configure --enable-utf8 --enable-geoip=mmdb
5$ make
6# make install
  1. 时间格式设置

我在安装过程中出现时间格式设置错误问题 No time format was found on your conf file.

需要在 /usr/local/etc/goaccess/goaccess.conf 中指定时间格式,或者直接使用 COMBINED

1log-format COMBINED # 大概是第127行
  1. 功能测试

安装后可以测试是否能正常读取日志和输出。

1goaccess /var/log/nginx/access.log -o report.html --geoip-database=/usr/local/share/GeoIP/GeoLite2-City.mmdb

搭配 1Panel 使用

新版本 1Panel 中的网站目录一般是 /opt/1panel/www/sites/domain.com/index ,日志则是在 /opt/1panel/www/sites/domain.com/log,通常有两个文件 access.logerror.log,这里只需要 access.log

该 Log 路径可以在 1Panel - 网站 - 网站目录 中找到。

  1. 实时页面

在 1Panel 中添加一个新的静态网站,例如 stats.domain.com,设置好必要的域名、SSL 等内容。

1/usr/local/bin/goaccess /opt/1panel/www/sites/domain.com/log/access.log \
2  --output=/opt/1panel/www/sites/stats.domain.com/index/index.html \
3  --real-time-html \
4  --daemonize

也可以通过修改 /etc/systemd/system/goaccess-real-time.service 文件将其设置为系统服务,实现开机启动确保更加稳定运作。

 1[Unit]
 2Description=GoAccess Real-Time Web Log Analyzer
 3After=network.target
 4[Service]
 5Type=simple
 6User=root
 7ExecStart=/usr/local/bin/goaccess /opt/1panel/www/sites/lawtee.com/log/access.log \
 8            --output=/opt/1panel/www/sites/realtime.lawtee.com/index/index.html \
 9            --real-time-html \
10            --log-format='%h %^[%d:%t %^] "%r" %s %b "%R" "%u" "%v"' \
11            --date-format=%d/%b/%Y \
12            --time-format=%T \
13            --geoip-database=/usr/local/share/GeoIP/GeoLite2-City.mmdb
14Restart=always
15RestartSec=3
16[Install]
17WantedBy=multi-user.target

设置开机启动

1sudo systemctl daemon-reload
2sudo systemctl start goaccess-real-time
3sudo systemctl enable goaccess-real-time  
  1. 计划任务

由于我的 VPS 性能较差,也就不难为它了,设置每天定时输出两次报告到指定页面即可。实测 400MB 日志,在 1C1G VPS 上大概几秒钟就生成完毕,也没必要太担心这个问题。

先在 1Panel 中添加一个新的静态网站,例如 stats.domain.com,设置好必要的域名、SSL 等内容。

然后在 1Panel 计划任务中创建计划任务,类型为 shell 脚本,周期为每天一次或多次,使用 root 用户执行。脚本内容如下:

1/usr/local/bin/goaccess /opt/1panel/www/sites/domain.com/log/access.log \
2  --output=/opt/1panel/www/sites/stats.domain.com/index/index.html \
3  --log-format='%h %^[%d:%t %^] "%r" %s %b "%R" "%u" "%v"' \
4  --date-format=%d/%b/%Y \
5  --time-format=%T \
6  --geoip-database=/usr/local/share/GeoIP/GeoLite2-City.mmdb

如果有多站点,可以在创建计划任务时,多添加几个网站日志,然后将报告链接统一输出到一个页面。

示例多报告
示例多报告

#1panel #goaccess #网站监控 #日志分析

评论