作者:广树时间:2024-05-16 11:16:29分类:服务器
最近,我希望对博客的访问情况进行全面统计,以便实时了解博客的动态,并检查是否存在可疑访问行为。为此,我选择了GoAccess这款网站统计工具。本文将根据我的个人需求,记录GoAccess的部署过程。服务器系统选择Ubuntu 22。
GoAccess 是一款设计用于快速终端日志分析的工具。它的核心理念是无需使用浏览器,便能快速分析和查看网站服务器统计信息,实时了解网站动态(非常适合通过 SSH 快速分析访问日志,或是喜欢在终端中工作的用户)。
虽然终端输出是默认模式,但 GoAccess 也能生成完整的、独立的实时 HTML 报告(非常适合分析、监控和数据可视化),以及 JSON 和 CSV 格式的报告。
主要特点包括:
这里我选用的是【rsync】来同步AB服务器的数据。
rsync 是一个在 Unix-like 系统(如 Linux)中广泛使用的文件同步工具,它有以下几个主要特点:
在终端中输入以下命令来更新你的包列表:
sudo apt update
然后,输入以下命令来安装 rsync:
sudo apt install rsync
安装完成后,你可以通过输入以下命令来验证 rsync 是否已经成功安装:
rsync --version
如果 rsync 已经成功安装,这个命令将会显示 rsync 的版本信息。
在B服务器设置一个用户:
sudo adduser backupuser
按照要求填写密码
A服务器设置SSH密钥对:
ssh-keygen
因为是自动化需要,这个密钥对不设置密码。
将 A 服务器的公钥复制到 B 服务器:
ssh-copy-id backupuser@B服务器域名或者IP
假设备份的日志文件在log文件夹,要备份到B服务器的/path/rsync目录,则需要在/path/rsync目录下创建一个log文件夹并设置权限:
sudo chown -R backupuser /path/rsync/log
写一个同步用的定时脚本
#!/bin/bash
# 启动 ssh-agent
eval "$(ssh-agent -s)"
# 添加你的私钥到 ssh-agent
ssh-add /root/.ssh/id_rsa
rsync -avz /path/log backupuser@B服务器域名或者IP:/path/rsync
0 1 * * * /path/to/your/script.sh
例如,如果你想要每天凌晨 1 点运行你的脚本
请注意,你的 sh 脚本需要有执行权限。你可以使用 chmod 命令来给它添加执行权限:
chmod +x /path/to/your/script.sh
首先,你需要安装一些必要的构建工具和依赖项。在终端中输入以下命令:
sudo apt update
sudo apt install build-essential autoconf gettext autopoint libncursesw5-dev libmaxminddb-dev
下载 GoAccess 的源代码:
wget https://tar.goaccess.io/goaccess-1.9.2.tar.gz
具体版本可以通过官网获取: https://goaccess.io/download
解压下载的文件:
tar -xzvf goaccess-1.9.2.tar.gz
进入解压后的目录:
cd goaccess-1.9.2/
配置 GoAccess。这里我们启用 UTF-8 支持和 GeoIP 支持:
./configure --enable-utf8 --enable-geoip=mmdb
编译 GoAccess:
make
安装 GoAccess:
sudo make install
完成以上步骤后,GoAccess 就应该已经成功安装在你的 Ubuntu 22.04 系统上了。你可以通过输入 goaccess --version 来验证安装是否成功。
如果想要生成的HTML为中文,那么需要安装系统中文语言包
sudo apt-get install language-pack-zh-hans
进入GoAccess安装目录:
cd /usr/local/etc/goaccess
安装 gunzip,这是一个用于解压 .gz 文件的工具。在终端中输入以下命令:
sudo apt install gzip
然后,你可以从 DB-IP 下载免费的 GeoIP2 数据库。在终端中输入以下命令:
wget https://download.db-ip.com/free/dbip-city-lite-2024-05.mmdb.gz
下载完成后,你可以使用 gunzip 来解压下载的文件:
gunzip dbip-city-lite-2024-05.mmdb.gz
然后编辑【/usr/local/etc/goaccess/goaccess.conf】文件
找到【geoip-database】,去掉注释,并指定mmdb文件路径:
geoip-database /usr/local/etc/goaccess/dbip-city-lite.mmdb
先写一个脚本:
#!/bin/bash
# 获取当前日期和时间
datetime=$(date +'%Y%m%d%H%M%S')
# 设置日志文件和报告文件的路径
log_file="/path/rsync/log/blog.log"
report_file="/path/rsync/report/blogReport${datetime}.html"
# 设置语言为中文
# sudo apt-get install language-pack-zh-hans
export LANG=zh_CN.UTF-8
# 使用GoAccess分析日志文件并生成报告
goaccess ${log_file} --log-format=COMBINED -a -o ${report_file}
添加 cron 任务:
0 2 * * * /path/to/your/script.sh
因为我每天会对日志进行分割压缩,所以处理起来稍微复杂一些。
另外为了防止重复分析,将会记录上次解析的时间点,在下一次运行时只解析上次解析时间点之后的日志。
以下是脚本:
#!/bin/bash
# 设置日志文件和报告文件的路径
log_dir="/path/rsync/log/"
report_file="/path/rsync/report/blogReportAll.html"
timestamp_file="/path/rsync/report/last_processed_timestamp"
# 设置语言为中文
export LANG=zh_CN.UTF-8
# 获取上次处理日志文件的时间
if [ -f ${timestamp_file} ]; then
last_processed=$(cat ${timestamp_file})
else
last_processed=0
fi
# 获取当前的时间戳
current_timestamp=$(date +%s)
# 创建一个数组来缓存符合规则的文件
files_to_process=()
# 找出所有符合规则的文件并添加到数组中
for file in ${log_dir}wikimoeBlog.log_*.gz; do
file_timestamp=$(stat -c %Y ${file})
if [ ${file_timestamp} -gt ${last_processed} ]; then
files_to_process+=(${file})
fi
done
# 打印出所有要处理的文件
echo "Files to process: ${files_to_process[@]}"
# 遍历数组,处理每个文件
for file in ${files_to_process[@]}; do
echo "Processing file: ${file}"
zcat ${file} | goaccess --log-format=COMBINED -a -o ${report_file} --persist --restore -
done
# 记录当前的时间戳
echo ${current_timestamp} > ${timestamp_file}
添加 cron 任务:
0 3 * * * /path/to/your/script.sh
怎么说呢,不统计不知道,一统计发现小破站近半的访问来自各种爬虫😅。