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

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

相关推荐
努力的lpp2 小时前
小迪安全课程第五节复习笔记:渗透测试命令与反弹连接技术
笔记·安全
bai_lan_ya2 小时前
嵌入式linux--文件IO中dup/dup2的使用
linux·运维·服务器
睿观·ERiC2 小时前
跨境电商 AI Agent 赛道爆发:从开源生态到垂直 Skill 落地,2026 年 3 月核心技术动态盘点
人工智能·开源
MadPrinter2 小时前
deer-flow:ByteDance 开源的 SuperAgent Harness 终极指南
ai·开源·自动化·openclaw
H_老邪2 小时前
新人初识ECS 服务器
运维·服务器
北风toto2 小时前
Jenkins的安装与启动
运维·servlet·jenkins
牛奶咖啡132 小时前
DevOps自动化运维实践_Legacy Boot与UEFI Boot网络启动(PXE)的原理解析
运维·devops·dhcp·pxe·tftp·uefi boot网络启动原理·legacy boot启动原理
Cx330❀2 小时前
Linux System V标准简介
大数据·linux·运维·服务器·人工智能
毕设源码-赖学姐2 小时前
【开题答辩全过程】以 基于springboot的酒店预订小程序自动化订制系统为例,包含答辩的问题和答案
运维·小程序·自动化