Umami:轻量级开源网站分析工具,打造隐私友好的Google Analytics替代方案

Umami:轻量级开源网站分析工具,打造隐私友好的 Google Analytics 替代方案

背景

网站运营者都希望了解访客行为,但现有分析工具存在诸多问题:

  • Google Analytics 配置复杂,功能繁多但不实用
  • Google Analytics 依赖 Cookie,违反隐私法规(如 GDPR)
  • 商业分析工具价格高昂,个人站长难以承受
  • 数据存储在第三方,隐私无法保障
  • 追踪代码拖慢网站加载速度
  • 数据报告过于复杂,难以快速获取关键信息

今天介绍一款开源网站分析利器------Umami,它是 Google Analytics 的隐私友好替代方案。

什么是 Umami?

Umami 是一款简单、快速、注重隐私的开源网站分析工具,目标是提供 Google Analytics 的开源替代方案。

核心理念: "Simple, fast, privacy-focused alternative to Google Analytics"------简单、快速、注重隐私的 Google Analytics 替代方案。

核心特性:

特性 说明
隐私优先 默认不使用 Cookie,不跟踪个人数据
GDPR 合规 符合欧盟隐私法规
轻量高效 追踪脚本仅 2KB,加载极快
简单易用 界面清晰,关键指标一目了然
开源免费 MIT 许可证,完全免费
自托管 数据完全自主,隐私安全
多网站支持 一个实例管理多个网站

GitHub 地址: https://github.com/umami-software/umami

Star 数量: 20K+

Umami vs Google Analytics vs Plausible

对比项 Umami Google Analytics Plausible
价格 免费 免费(GA4) 免费/付费
开源 ✅ 完全开源 ❌ 闭源 ⚠️ 半开源
自托管 ✅ 完全支持 ❌ 不支持 ✅ 支持
Cookie ❌ 不使用 ⚠️ 需要 ❌ 不使用
GDPR 合规 ✅ 完全合规 ⚠️ 需配置 ✅ 合规
追踪脚本 ~2KB ~44KB ~1KB
界面复杂度 简单清晰 复杂 简单
数据存储 自己的数据库 Google 云 自己的数据库

Umami 的独特优势:

  • 完全开源,代码透明可审计
  • 隐私优先设计,不使用 Cookie,不跟踪个人
  • 追踪脚本极小(仅 2KB),不影响网站性能
  • 界面简洁,关键指标一目了然
  • 数据完全自主,隐私安全有保障
  • 支持多网站,一个实例管理所有网站

工作原理

Umami 采用轻量级追踪方案:

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                         访客浏览器                               │
│                                                                 │
│   加载网站 → 执行 Umami 追踪脚本(2KB)                         │
│                                                                 │
│   收集数据:                                                    │
│   - 页面 URL                                                    │
│   - 访问时间                                                     │
│   - 屏幕分辨率                                                   │
│   - 浏览器/操作系统                                              │
│   - 来源网站(referrer)                                         │
│   - 国家/地区(通过 IP 地理定位)                                │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                        Umami Server                              │
│                                                                 │
│   接收追踪数据 → 存储到 PostgreSQL 数据库                         │
│                                                                 │
│   数据处理:                                                    │
│   - 实时数据更新                                                │
│   - 会话聚合                                                    │
│   - 统计计算                                                    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                       Umami Dashboard                            │
│                                                                 │
│   数据可视化:                                                  │
│   - 实时访客                                                    │
│   - 页面浏览                                                    │
│   - 访问来源                                                    │
│   - 地理分布                                                    │
│   - 设备统计                                                    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

追踪脚本工作流程:

  1. 访客访问网站,加载 Umami 追踪脚本
  2. 脚本收集基本访问数据(无 Cookie,无个人识别)
  3. 数据以 JSON 格式发送到 Umami 服务器
  4. 服务器解析并存入数据库
  5. Dashboard 实时展示统计数据

快速上手

Docker 部署(推荐)

创建目录:

bash 复制代码
mkdir -p ~/umami && cd ~/umami

创建 docker-compose.yml:

yaml 复制代码
version: '3'

services:
  umami:
    image: ghcr.io/umami-software/umami:latest
    container_name: umami
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://umami:umami_password@db:5432/umami
      - DATABASE_TYPE=postgresql
      - APP_SECRET=your_random_secret_key
    depends_on:
      - db
    volumes:
      - ./umami-data:/app/data

  db:
    image: postgres:15-alpine
    container_name: umami_db
    restart: unless-stopped
    environment:
      - POSTGRES_USER=umami
      - POSTGRES_PASSWORD=umami_password
      - POSTGRES_DB=umami
    volumes:
      - ./db-data:/var/lib/postgresql/data

volumes:
  umami-data:
  db-data:

启动服务:

bash 复制代码
# 启动服务
docker-compose up -d

# 查看运行状态
docker-compose ps

# 查看日志
docker-compose logs -f

访问 Web 界面:

复制代码
http://your-server-ip:3000

默认账号:admin
默认密码:umami

首次登录后请立即修改密码!

使用 MySQL 数据库

yaml 复制代码
version: '3'

services:
  umami:
    image: ghcr.io/umami-software/umami:latest
    container_name: umami
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=mysql://umami:umami_password@db:3306/umami
      - DATABASE_TYPE=mysql
      - APP_SECRET=your_random_secret_key
    depends_on:
      - db

  db:
    image: mysql:8
    container_name: umami_db
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=root_password
      - MYSQL_USER=umami
      - MYSQL_PASSWORD=umami_password
      - MYSQL_DATABASE=umami
    volumes:
      - ./db-data:/var/lib/mysql

基础配置

添加网站:

复制代码
1. 登录 Umami Dashboard
2. 点击"Settings" → "Websites"
3. 点击"Add website"
4. 填写网站信息:
   - Website name:网站名称
   - Domain:网站域名
   - Website password:(可选)分享用的密码
5. 点击"Save"
6. 复制生成的追踪代码

追踪代码:

html 复制代码
<script async defer
    src="http://your-umami-server:3000/script.js"
    data-website-id="your-website-id">
</script>

将代码添加到网站:

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <!-- 其他 head 内容 -->
</head>
<body>
    <!-- 网站内容 -->

    <!-- Umami 追踪代码 -->
    <script async defer
        src="http://your-umami-server:3000/script.js"
        data-website-id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx">
    </script>
</body>
</html>

核心功能详解

1. 实时数据

实时访客面板:

复制代码
实时显示:
- 当前在线访客数量
- 当前浏览的页面
- 访客来源
- 访问设备类型

更新频率:实时
数据延迟:< 1 秒

2. 关键指标

核心指标:

指标 说明
页面浏览量(Pageviews) 页面被访问的总次数
独立访客(Unique visitors) 访问网站的不同 IP 数量
访问时长(Bounce rate) 单页面访问比例
平均访问时长(Avg. session) 访客平均停留时间
访问深度(Page depth) 访客平均浏览的页面数

3. 流量来源

来源分析:

来源类型 说明
直接访问 直接输入 URL 或书签访问
外部链接 从其他网站点击链接访问
搜索引擎 Google、Bing、百度等
社交媒体 微博、微信、Twitter 等

来源详情:

复制代码
追踪的来源信息:
- Referrer URL
- 搜索引擎关键词(如果适用)
- 社交平台
- 广告链接(UTM 参数)

4. 地理分布

访客地理位置:

复制代码
统计内容:
- 国家/地区分布
- 城市分布(部分支持)
- 语言设置分布

数据来源:
- IP 地址地理定位
- Browser Language

注意:精确度取决于 IP 定位服务

5. 设备统计

设备类型分析:

设备类型 说明
桌面 Windows/macOS/Linux
移动 iOS/Android 手机
平板 iPad/Android 平板

浏览器统计:

复制代码
追踪内容:
- 浏览器类型和版本
- 操作系统
- 屏幕分辨率
- 是否启用 JavaScript

6. 页面分析

页面性能:

复制代码
页面统计:
- 各页面浏览量
- 平均停留时长
- 跳出率
- 入口页面
- 退出页面

用途:
- 了解哪些内容最受欢迎
- 优化高跳出率页面
- 分析用户访问路径

7. 事件追踪

自定义事件:

javascript 复制代码
// 追踪按钮点击
umami.track('button_click', { button_id: 'signup', button_text: '注册' });

// 追踪表单提交
umami.track('form_submit', { form_id: 'contact', success: true });

// 追踪视频播放
umami.track('video_play', { video_id: 'intro', duration: 45 });

事件分析:

复制代码
Dashboard 查看:
- 事件触发次数
- 事件属性分布
- 事件转化漏斗

高级配置

反向代理配置

Nginx 配置:

nginx 复制代码
server {
    listen 80;
    server_name analytics.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 启用 WebSocket(用于实时数据)
    location /ws {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

启用 HTTPS:

nginx 复制代码
server {
    listen 443 ssl http2;
    server_name analytics.example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://localhost:3000;
        # ... 其他配置同上
    }
}

环境变量配置

完整环境变量:

yaml 复制代码
environment:
  # 数据库连接
  - DATABASE_URL=postgresql://umami:password@db:5432/umami
  - DATABASE_TYPE=postgresql

  # 应用密钥(生成随机字符串)
  - APP_SECRET=your_random_secret_key_min_32_chars

  # 可选配置
  - CHECK_UPDATE=false
  - LOG_LEVEL=info
  - FORCE_SSL=false
  - TRACKER_SCRIPT_NAME=script

生成随机密钥:

bash 复制代码
# Linux/macOS
openssl rand -base64 32

# 使用随机字符串
# 示例输出:YWxzamtsYWZzamtsYWZzamtsYWZzamtsYWZzamtsYWZ=

多网站管理

添加多个网站:

复制代码
管理多个网站:
1. Settings → Websites → Add website
2. 为每个网站生成独立追踪代码
3. 可设置网站密码保护
4. Dashboard 切换查看不同网站

团队协作:
- 共享网站访问
- 设置不同权限
- 分配网站给用户

数据保留设置

yaml 复制代码
# 数据保留策略(按需配置)
environment:
  # PostgreSQL 可设置表分区
  # 定期清理旧数据

# 手动清理脚本
docker exec umami_db psql -U umami -d umami -c "
  DELETE FROM event WHERE created_at < NOW() - INTERVAL '12 months';
"

隐私合规

GDPR 合规

Umami 的 GDPR 优势:

GDPR 要求 Umami 支持情况
明确同意 ✅ 不使用 Cookie,无需同意
数据最小化 ✅ 仅收集分析必需数据
数据保护 ✅ 数据存储在自有服务器
被遗忘权 ✅ 可删除所有用户数据
数据可携 ✅ 可导出所有数据

合规配置建议:

javascript 复制代码
// 延迟加载追踪脚本(等待用户交互)
<script>
  // 检测用户交互后再加载
  document.addEventListener('scroll', loadUmami, { once: true });
  document.addEventListener('mousemove', loadUmami, { once: true });

  function loadUmami() {
    var s = document.createElement('script');
    s.src = 'http://your-umami-server/script.js';
    s.setAttribute('data-website-id', 'your-id');
    document.body.appendChild(s);
  }
</script>

无需 Cookie 声明:

复制代码
Umami 不使用 Cookie,因此:
- 无需烦人的 Cookie 同意横幅
- 无需复杂的 Cookie 政策页面
- 访客体验不受影响
- 符合 ePrivacy 指令

数据导出

导出所有数据:

复制代码
1. 登录 Dashboard
2. 进入 Settings → Account
3. 点击 Export Data
4. 选择日期范围
5. 下载 JSON/CSV 格式数据

常见问题

Q:Umami 和 Google Analytics 有什么区别?

A:

  • Umami 不使用 Cookie,Google Analytics 使用
  • Umami 追踪脚本仅 2KB,GA 约 44KB
  • Umami 界面更简洁,指标更清晰
  • Umami 数据存储在自己的服务器
  • Umami 完全免费,GA 免费版功能受限

Q:数据准确性如何?

A:

  • 由于不使用 Cookie,同一访客多次访问可能计为多次
  • IP 地理定位精确度有限
  • 对于大多数网站分析需求,精度足够
  • 无法追踪单个用户行为路径

Q:需要多少服务器资源?

A:

  • 最低配置:1核1G
  • 推荐配置:2核2G
  • PostgreSQL 存储占用小
  • 月访问量 10 万以下,1GB 内存足够

Q:支持哪些数据库?

A:

  • PostgreSQL(推荐)
  • MySQL(支持但不如 PG 完善)

Q:可以追踪转化目标吗?

A:

  • 支持自定义事件追踪
  • 可设置转化目标和漏斗
  • 需要使用 umami.track() API

Q:如何更新 Umami?

A:

bash 复制代码
# Docker 更新
docker-compose pull
docker-compose up -d

# 注意:更新前建议备份数据库
docker exec umami_db pg_dump -U umami > umami-backup.sql

适用场景

推荐使用:

  • 个人博客和网站分析
  • 企业官网流量统计
  • 注重隐私的网站
  • 需要 GDPR 合规的网站
  • 不想使用 Google Analytics 的网站
  • 多个网站统一管理

不推荐使用:

  • 需要精确用户行为路径分析
  • 需要实时热力图
  • 超大规模电商网站分析
  • 需要 A/B 测试集成

总结

Umami 以"隐私优先 + 轻量高效 + 开源免费 + 简单易用"的组合,成为了网站分析领域的最佳开源选择。

核心优势回顾:

  • 隐私优先:不使用 Cookie,不跟踪个人数据
  • GDPR 合规:完全符合欧盟隐私法规
  • 轻量高效:追踪脚本仅 2KB,不影响网站性能
  • 简单易用:界面清晰,关键指标一目了然
  • 开源免费:MIT 许可证,无任何功能限制
  • 数据自主:自托管部署,数据完全可控

对于注重隐私、追求简洁、想要摆脱 Google Analytics 的网站运营者,Umami 是最佳选择。


本文由无边界科技技术团队分享,专注软件开发与技术解决方案。

官网:wubianj.com

© 版权归无边界科技所有,版权所有。

相关推荐
特长腿特长1 天前
centos、ubantu系列机的用户和用户组的结构是什么?具体怎么配置?用户组权限怎么使用?这篇文章持续更新,帮助你复习linux的基础知识
linux·运维·centos
星河耀银海1 天前
远控体验分享:安全与实用性参考
人工智能·安全·微服务
zzzyyy5381 天前
Linux环境变量
linux·运维·服务器
赛博云推-Twitter热门霸屏工具1 天前
Twitter运营完整流程:从0到引流获客全流程拆解(2026)
运维·安全·自动化·媒体·twitter
CHHC18801 天前
NetCore树莓派桌面应用程序
linux·运维·服务器
xixixi777771 天前
通信领域的“中国速度”:从5G-A到6G,从地面到星空
人工智能·5g·安全·ai·fpga开发·多模态
帮我吧智能服务平台1 天前
装备制造智能制造升级:远程运维与智能服务如何保障产线OEE
运维·服务器·制造
w6100104661 天前
cka-2026-cri-dockerd
运维·k8s·cka
人间打气筒(Ada)1 天前
「码动四季·开源同行」HarmonyOS应用开发:常见组件
华为·开源·harmonyos·组件·布局·鸿蒙开发
卤炖阑尾炎1 天前
PostgreSQL 日常运维全指南:从基础操作到备份恢复
运维·数据库·postgresql