导航

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

侧边栏
热门文章
1页面
程序员老黄历&求签
热度
494
2推文
一开始还以为是2.5次元的舞台剧,结果仔细一看是音乐剧!?有一丢丢的兴趣,到时候看看能不能搞到门票。 《FateZero》真人音乐剧 定妆照预告:https://www.bilibili.com/video/BV1RqSoYmEzJ
热度
207
3博文
《孤独摇滚》圣地巡礼——下北泽&下北泽咖喱节2023
热度
104
4博文
探访《蜡笔小新》老家——春日部游记
热度
91
5推文
知道这套道具的人年纪应该都不小了吧。
热度
65
6博文
如何使用ffmpeg.wasm在浏览器前端实现视频压缩和剪辑
热度
65
7博文
Live2d模型合集分享 | FaceRig | 海王星系列 | 初音未来 | 雷姆 | 凉风青叶 | 尼禄 | 薇尔莉特 | 小埋 | 樱花庄 | 玉藻前
热度
65
8推文
刚发完对《冒险岛Online》R区的遗憾没多久,韩服那边又开始搞事情了,做出了如下的修改: 1、删除持有金币,主要消耗、其他道具; 2、可使用拍卖、个人件交易、金币市场功能; 3、装备卷轴强化和可用附加潜能,但是该效果在3个月内不生效,R区的终伤BUFF仍旧保存3个月; 4、删除R区被动中BOSS装备掉率增加属性等全部属性; 5、现有装备道具均变为永久不可交易道具。 ※主要删除道具:金币、红魔方、黑魔方、痕迹、强大火花、核心宝石、可获得装备的部分消耗道具、可通过金币购买的道具等。 这可真是至R区于死地啊...要说修改游戏的模式也就算了,现在不仅没有任何补充,还把先前的劳动成果给删除了是不是太过分了!? 日服到时候肯定二话不说跟进,国际服那边如果没了韩服对R区的技术支持,个人觉得服软也是时间的问题。
热度
52
9博文
谈谈这次《冒险岛Online》日服R区的削弱事件
热度
52
10博文
文石BOOX Leaf2使用感想
热度
52
最新评论
广树
2024-11-21 16:04
@hikari:BGM也许是吧,歌曲部分感觉不一定
hikari
2024-11-21 09:52
居然是音乐剧!真是没想到,难道说会用梶浦大妈的配乐吗?看预告片里就用的是fz里最扣人心弦的bgm。🥰
广树
2024-11-20 08:18
@石樱灯笼:这应该是受众的年龄层的问题吧
石樱灯笼
2024-11-20 06:57
@广树:承太郎抽根烟,整张嘴都被打码。
广树
2024-11-20 06:48
@石樱灯笼:不是挺符合人设吗?为什么会离谱?
正在攻略

logo_kai.jpg


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

1210 x 50(蓝底).png

cloudcone