导航

萌即是正义!时不时分享一些ACG活动记录与有趣代码的小站!

侧边栏
热门文章
1博文
《摇曳露营△》十周年纪念展
热度
311
2页面
程序员老黄历&求签
热度
299
3推文
发现《摇曳百合》联动交通安全宣传海报。
热度
91
4页面
阅读
热度
91
5页面
友链
热度
91
6博文
探访日本的废校 《轻音少女》圣地巡礼之丰乡小学校旧校舍群
热度
78
7页面
追番
热度
78
8推文
晚饭吃了高冈车站附近特色的黑酱油拉面。 店名叫次元拉面,整个区域唯一排着长队的饮食店。 出于好奇排了40分钟后点了当地特色套餐。有黑拉面、可乐饼、海苔饭团。 黑酱油拉面的酱油确实比普通的酱油更黑,也更浓厚。就是味道有点熟悉,有点像我老家的面。 可乐饼的味道也不错。 海苔饭团就有意思了,上面裹了一层海苔丝,海苔味十足。 另外店内有好多名人的签名呀!还有大量的漫画。不知道这个次元是不是那个次元的意思呢?
热度
65
9推文
作为凉宫春日等人就读的“北高”的原型,其校园风景在动画中得以重现的兵库县立西宫北高等学校,将在2027年3月末以“西宫北高校”的名义关闭,并由“西宫苦乐园高校”接管。 一直以来,许多粉丝都将西宫北高作为凉宫春日的“圣地”来访问。虽然该校此前从未对外开放校内,但这次将首次举办校内公开企划! 在这次活动中,大家可以欣赏动画中出现的场景,并在校园内进行拍照留念等活动。 ※ 截至2025年11月14日,入场门票已全部售罄,且不会追加销售。请注意,未持有入场门票者将无法进入会场。
热度
65
10博文
【RPG Maker MV】插件脚本指令文档 | Script Calls
热度
65
最新评论
广树管理员
2025-11-21 19:57
@石樱灯笼:那就少子老龄化吧
石樱灯笼
2025-11-21 13:13
@广树:这玩意叫少子化,不叫老龄化。
广树管理员
2025-11-20 22:03
虽然不是真正意义上的闭校。但是作为作品中的那所学校因为少子老龄化最后并校与更名,还是有些可惜的。 很想去,但是似乎知道的有些太迟了呢。
广树管理员
2025-11-20 11:26
@小彦:淡定,日本民众根本不关心这些
广树管理员
2025-11-20 11:26
@老张博客:是呀
攻略中
全民高尔夫环球之旅
暂无评分
Steam全民高尔夫环球之旅
2025年9月07日 12时 ~ 攻略中
已累计游玩2个月16天
《全民高尔夫 环球之旅》除了能体验到与过去作品相同的乐趣、爽快与深奥之外, 还有着以精美图像设计而成、个性丰富的角色们与以世界各地为主题的球场, 以及能让所有人热血沸腾的全新模式等等,是本系列的全新力作!
ToHeart
暂无评分
SteamToHeart
2025年6月26日 19时 ~ 攻略中
已累计游玩4个月29天
AQUAPLUS推出的“温暖人心的校园恋爱游戏”将以高清全3D形式焕新归来!
fault - StP - LIGHTKRAVTE
暂无评分
Steamfault - StP - LIGHTKRAVTE
2025年5月29日 20时 ~ 攻略中
已累计游玩5个月27天
全球累计销量超过50万份的“fault”系列最新作!故事的舞台是一个融合了奇幻与科幻的超前世界——卢森海德王国。本作讲述了生活在此地的一个平凡又平庸的究极普通市民——名为果子的少年的故事。
PSN奖杯卡

PSN奖杯卡

归档
赞助商广告

利用GoAccess生成全方面网站访问分析报告

作者:广树时间:2024-05-16 11:16:29分类:服务器

最近,我希望对博客的访问情况进行全面统计,以便实时了解博客的动态,并检查是否存在可疑访问行为。为此,我选择了GoAccess这款网站统计工具。本文将根据我的个人需求,记录GoAccess的部署过程。服务器系统选择Ubuntu 22。


什么是GoAccess?

GoAccess 是一款设计用于快速终端日志分析的工具。它的核心理念是无需使用浏览器,便能快速分析和查看网站服务器统计信息,实时了解网站动态(非常适合通过 SSH 快速分析访问日志,或是喜欢在终端中工作的用户)。

虽然终端输出是默认模式,但 GoAccess 也能生成完整的、独立的实时 HTML 报告(非常适合分析、监控和数据可视化),以及 JSON 和 CSV 格式的报告。


主要特点包括:

  1. 快速实时更新,速度以毫秒/秒计,使用 C 语言编写
  2. 仅依赖 ncurses 库
  3. 支持几乎所有的 web 日志格式(如 Apache、Nginx、Amazon S3、Elastic Load Balancing、CloudFront、Caddy 等)
  4. 只需设置日志格式并对日志运行分析
  5. 提供美观的终端和 bootstrap 仪表盘(可以根据个人喜好定制颜色和样式)
  6. 经过 Valgrind 测试,确保稳定性和可靠性
  7. 通过 GoAccess,你可以高效地监控和分析网站的访问情况,获得有价值的实时统计数据。


我的需求

  1. 通过Nginx当天的访问记录生成当天的访问统计。
  2. 通过过往的Nginx记录生成全时段的访问统计。
  3. 因为解析会消耗一定性能,统计解析工作交由B服务器完成。
  4. 每天凌晨执行一次


大致流程梳理

  1. 博客服务器A定时将Nginx记录同步备份到统计服务器B。
  2. B服务器定时解析Nginx记录,并生成HTML报告。


同步Nginx记录

这里我选用的是【rsync】来同步AB服务器的数据。


什么是rsync?

rsync 是一个在 Unix-like 系统(如 Linux)中广泛使用的文件同步工具,它有以下几个主要特点:

  1. 增量复制:rsync 只会复制文件中改变的部分,而不是整个文件,这使得它在处理大文件或者大量文件时非常高效。
  2. 压缩和解压缩:在传输数据时,rsync 会自动压缩和解压缩数据。这可以减少网络传输的数据量。
  3. 保留文件属性:rsync 不仅可以复制文件的内容,还可以复制文件的权限、时间戳等属性。
  4. 支持本地和远程同步:rsync 可以在本地的两个目录之间同步文件,也可以在本地和远程服务器之间同步文件。
  5. 安全:当在远程服务器之间同步文件时,rsync 可以使用 ssh 来加密数据。
  6. 链接支持:rsync 可以识别并正确处理符号链接和硬链接。
  7. 排除文件:rsync 允许你指定某些文件或目录不进行同步,这可以通过使用 --exclude 选项来实现。
  8. 断点续传:如果同步过程中被中断,rsync 可以从中断处继续同步,而不是重新开始。


安装

在终端中输入以下命令来更新你的包列表:

sudo apt update

然后,输入以下命令来安装 rsync:

sudo apt install rsync

安装完成后,你可以通过输入以下命令来验证 rsync 是否已经成功安装:

rsync --version

如果 rsync 已经成功安装,这个命令将会显示 rsync 的版本信息。


AB服务器之间的SSH通信

在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


在B服务器安装配置GoAccess

安装GoAccess

首先,你需要安装一些必要的构建工具和依赖项。在终端中输入以下命令:

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


配置定时任务

生成当天访问记录HTML

先写一个脚本:

#!/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


生成全部时间段的HTML

因为我每天会对日志进行分割压缩,所以处理起来稍微复杂一些。

另外为了防止重复分析,将会记录上次解析的时间点,在下一次运行时只解析上次解析时间点之后的日志。

以下是脚本:

#!/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


最终生成的HTML预览

image-ccornfho.png

怎么说呢,不统计不知道,一统计发现小破站近半的访问来自各种爬虫😅。

donate.png


telegram banner (1).png


1210 x 50(蓝底).png

cloudcone