我最近几年的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 需要依赖
ncurse运行。另外,启用地图功能需要下载
geoip数据库和
maxminddb。
1 sudo apt-get install -y pkg-config
2 sudo apt-get install -y libncursesw5-dev
3 sudo apt-get install -y libmaxminddb-dev
4 sudo mkdir -p /usr/local/share/GeoIP
5 sudo wget -O /usr/local/share/GeoIP/GeoLite2-City.mmdb https://raw.githubusercontent.com/P3TERX/GeoLite.mmdb/download/GeoLite2-City.mmdb
安装 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
时间格式设置
我在安装过程中出现时间格式设置错误问题
No time format was found on your conf file.
需要在
/usr/local/etc/goaccess/goaccess.conf 中指定时间格式,或者直接使用
COMBINED。
1 log-format COMBINED # 大概是第127行
功能测试
安装后可以测试是否能正常读取日志和输出。
1 goaccess /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.log 和
error.log,这里只需要
access.log。
该 Log 路径可以在
1Panel - 网站 - 网站目录 中找到。
实时页面
在 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]
2 Description = GoAccess Real-Time Web Log Analyzer
3 After = network.target
4 [ Service]
5 Type = simple
6 User = root
7 ExecStart = /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
14 Restart = always
15 RestartSec = 3
16 [ Install]
17 WantedBy = multi-user.target
设置开机启动
1 sudo systemctl daemon-reload
2 sudo systemctl start goaccess-real-time
3 sudo systemctl enable goaccess-real-time
计划任务
由于我的 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
如果有多站点,可以在创建计划任务时,多添加几个网站日志,然后将报告链接统一输出到一个页面。
示例多报告