网站统计分析是一种通过收集、处理和分析网站数据来评估网站性能、用户行为和流量来源的综合方法。通过分析用户访问模式、页面浏览量、访问时长、用户地理位置、设备类型、访问来源等方面的数据,可以获得网站运营状况的整体视图。深入开展网站统计分析涉及多个学科领域,如数据科学、统计学、信息技术、SEO等,使之成为一门跨领域的复杂学问。
通常,进行网站统计分析的主要目的是提升用户体验、优化网站性能、增加转化率以及调整内容策略。而对于我个人而言,主要需求是查看网站流量数据,因此目标相对简单、明确。
这些指标的意义:
流量分析是网站分析的基础环节,通过深入挖掘流量数据,帮助我们了解网站访问情况、评估营销效果,并为后续优化提供数据支持。
通过分析流量来源,可以理解各渠道的引流效果,从而优化营销策略,提升流量质量。
用户行为分析有助于了解用户在网站上的行为模式,找出用户的需求和痛点,并优化用户体验。
设备和技术分析帮助我们了解不同设备和浏览器用户的行为,进而优化网站的适配性和兼容性。
当然,搭建一个自主可控的工具才是本文的目标,所以主要还是来介绍一下这些个开源的工具;
这些工具并不是完全统计,可能有些理解会有些许个人意见,最好是大家自己去搭建体验一下;
点击卡片即可跳转至仓库;
GoAcess
是一款基于Web服务器日志的分析工具,通过直接解析Nginx
、Apache
等服务器生成的日志文件来获取访问数据,不需要在客户端嵌入代码。因其分析的是服务器端日志文件,不依赖客户端跟踪,适合注重隐私的数据统计需求。GoAccess
支持实时终端呈现和HTML报告
导出。GoAccess
聚焦基础访问数据分析,如IP地址、访问量、页面浏览量、访问来源等,适合快速的流量监控和性能评估。
PostHog
是一款产品分析平台,主要通过在前端和后端埋点收集用户行为数据,支持嵌入JavaScript
或SDK
以追踪用户操作。PostHog
可以实时追踪用户行为并支持A/B测试、漏斗分析、用户画像等深入分析功能。PostHog
支持深度的用户行为分析,包括会话重放、事件追踪等,且支持自定义事件及API扩展,适合产品团队优化用户体验。其自托管选项帮助企业控制数据隐私。
主要功能的差异
适用场景的差异
所以,如果你要只做一些网站访客分析的话,肯定不会选择 GoAccess
和 PostAccess
,但是你应该也明白了我为什么要提这两个工具;
Umami
、GoatCounter
或Plausible
,这些工具易于部署,界面友好。这里面我推荐 Umami
,不说别的,看 GitHub 上的星星数就能看出来更多人的选择;我选择它的其他理由下个章节细说;
如果你的需求比较复杂,对隐私保护的要求高,需要应用到复杂分析和高度定制的场景,Matomo
、 Fathom
都是比较好的选择,这里面我推荐 Matomo
,全面的数据分析功能、高度的定制性、强大的数据隐私保护都是优势;
先说一句就是这个工具已经可以在
Vercel
上部署了,我这里主要记录的是在自己服务器上部署;
我主要图它特别轻量,基本不会对页面加载速度产生负面影响;界面设计的很优美、简洁;隐私方面支持无Cookie跟踪,不会收集用户的个人数据;Umami
的部署过程相对简单,不管是有没有技术经验,支持使用Docker一键部署就,非常适合自托管的需求。另外,虽然 Umami
提供的功能相对简化,但对于小型网站和个人博客来说,它提供的基本流量统计、页面浏览、来源分析、以及事件跟踪功能已经足够满足需求。
这个就不多说了,很简单;
这个方式并不推荐啊,比较麻烦;
umami 提供了两个镜像,分别是 PostgreSQL 和 MySQL:
支持 PostgreSQL 的镜像:
docker pull docker.umami.is/umami-software/umami:postgresql-latest
或者支持 MySQL 的镜像:
docker pull docker.umami.is/umami-software/umami:mysql-latest
安装命令如下,然后你还要修改对应的数据库配置,保证连接数据库,上面说了,这里支持的是 PostgreSQL 和 MySQL:
docker run -d \
--name umami \
-p 3000:3000 \
--env DATABASE_URL="db_type://db_user:db_password@db_host:db_port/db_name" \
--env DATABASE_TYPE=db_type \
--env APP_SECRET=replace-me-with-a-random-string \
--restart always \
ghcr.io/umami-software/umami:postgresql-latest
如果你不想用运维管理面板,这个就是推荐做法;
如果你需要部署两个服务,也就是 Umami 和数据库编排管理,就可以用下面这个方案;
官方提供的docker-compose.yml
version: '3'
services:
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://umami:umami@db:5432/umami
DATABASE_TYPE: postgresql
APP_SECRET: replace-me-with-a-random-string
depends_on:
db:
condition: service_healthy
restart: always
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
interval: 5s
timeout: 5s
retries: 5
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: umami
POSTGRES_USER: umami
POSTGRES_PASSWORD: umami
volumes:
- umami-db-data:/var/lib/postgresql/data
restart: always
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 5
volumes:
umami-db-data:
参数说明:
version: 指定 Docker Compose 的配置文件版本,这里是版本 3。 services: 定义要部署的服务,这里包含两个服务:
ghcr.io/umami-software/umami:postgresql-latest
镜像运行 Umami 服务。 DATABASE_URL
: 指定连接 PostgreSQL 数据库的 URL 信息。DATABASE_TYPE
: 指定数据库类型为 PostgreSQL。APP_SECRET
: 用于加密数据,需要替换为一个随机字符串。db
服务,确保数据库启动后再启动 Umami 服务。curl
命令发送一个 HTTP GET 请求到容器内部的 http://localhost:3000/api/heartbeat
端口,以检查服务是否正常运行。postgres:15-alpine
镜像运行 PostgreSQL 数据库。 POSTGRES_DB
: 指定数据库名称为 umami
。POSTGRES_USER
: 指定数据库用户名为 umami
。POSTGRES_PASSWORD
: 指定数据库密码为 umami
。umami-db-data
: 将容器的 /var/lib/postgresql/data
目录映射到主机的 umami-db-data
卷,用于存储数据库数据,即使容器重启,数据也不会丢失。pg_isready
命令检查数据库是否已启动并可用。检查间隔为 5 秒,超时时间为 5 秒,重试 5 次。volumes: 定义持久化存储卷:
然后 docker compose up -d
即可;
但是,如果你不想再起一个数据库服务占硬件资源,你就修改一下 docker-compose.yml
即可:
version: '3'
services:
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://external_user:external_password@external_db_host:external_db_port/external_db_name
DATABASE_TYPE: postgresql
APP_SECRET: replace-me-with-a-random-string
restart: always
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
interval: 5s
timeout: 5s
retries: 5
如果你想连接自己的 MySQL
服务,你就修改下面对应参数就行:
DATABASE_URL: mysql://external_user:external_password@external_db_host:external_db_port/external_db_name
DATABASE_TYPE: mysql
这个我没有实践,就是记录一下,所有内容来源于:https://github.com/umami-software/umami/blob/master/README.md
npm install -g yarn
git clone https://github.com/umami-software/umami.git
cd umami
yarn install
创建一个名为 .env
的文件,并添加以下内容:
DATABASE_URL=连接字符串
连接字符串格式:
postgresql://用户名:密码@主机地址:端口/数据库名
mysql://用户名:密码@主机地址:端口/数据库名
yarn build
yarn start
默认情况下,这将在 http://localhost:3000
上启动应用程序。您需要将请求从您的 Web 服务器 代理 过来,或者更改 端口 以直接提供应用程序服务。
要给 Umami 配置一个方向代理,套上https,不然会有一些奇奇怪怪的问题;
首先要去你的域名解析服务上加条记录:
配置反向代理我这里就是用 1Panel
直接搞的,很方便;其实直接配置 Nginx
或者用宝塔都很简单;
我这里就放了个图,如果你熟悉的话不用看,如果你不熟悉的话,建议结合 1panel
的文档操作;
这个除了官网,可以参考一下这个中文文档:简中文档
详细的步骤我就不说了,主要记录一些关键点;
输入你的地址,进去之后登录,默认用户名 admin
密码 umami
;
进去之后要修改密码;
点击新建网站的编辑;
选择跟踪代码,然后复制;
如果是halo,直接全局注入:
回到你自己的网站,刷新几下,然后回到Umami看一眼,如下,大功告成
您想访问自己的网站,但不希望您的访问出现在统计数据中。为此,您需要在浏览器中添加一个设置。
打开浏览器中的开发者控制台:设置 -> 更多工具 -> 开发者工具
在控制台中,输入以下代码并按 Enter
:
localStorage.setItem('umami.disabled', 1);
直接 F12 打开,粘贴即可:
可以查看一下是否安装成功,在开发者工具的 Application 或者 应用里面查看:
此设置适用于 每个网站,因此您需要为每个希望排除的网站执行此操作。
要移除该设置,请输入以下代码并按 Enter
:
localStorage.removeItem('umami.disabled');
本文其实主要的目的不是玩 Umami
,本文主要还是分享网站分析知识和工具,希望大家看完这篇博客,对相关内容有一个大范围的了解,进一步能有一些自己的选择或者说判断。最后搭建了 Umami
主要也是实践一下,把路给走通。希望你能有所收获;
Umami
能玩的东西还有很多,要折腾的东西也很多;后面有机会再继续捣腾吧,先让它帮我分析着;再就是 Umami
的 UI
真的设计的很不错,用起来很丝滑;
如果你对我的内容有不同的看法,或者好的建议,欢迎在评论区留言,非常期待与大家进行交流。