Articles阿康Chinese content only

Pulse 开源了:一个 SQLite 文件的网站统计,AI 也能直接读

Pulse 是一个开源、API 优先的网站统计:一个 SQLite 文件、Docker 一键自托管,支持渠道与 UTM、设备与地区、目标与漏斗,AI 可以直接读数据。

你做了个小产品,或者一个自己的网站,总想知道几件事:今天来了多少人,他们从哪来,哪次推广带来了注册。

装一个功能齐全的统计,往往要先配数据库、管账号、记升级步骤。用云服务省事,数据却在别人手里,用量大了往往还要付费。

我也是这样一路折腾过来的。后来我自己写了 Pulse,现在我所有的站点都已经从 Umami 换成了它。今天把它开源。

Pulse 站点总览

所有站点一屏看完

Pulse 是一个自托管的网站统计服务。数据只存一个 SQLite 文件,一个 Docker 容器就能跑起来,不用另外准备数据库。

打开首页,流量最高的三个站点做成大卡片,放在最上面:访问量、访客、事件、趋势线,还有此刻在线的人数。其余站点排在下面的列表里,按访问量排序。站点再多,也能在一屏里看出哪个在涨、哪个在掉。

能看到什么

  • 浏览量、访客、事件,可以和上一周期或去年同期对比,涨跌一目了然

  • 流量来源:来源网站,以及直接访问、自然搜索、社交、引荐、邮件、付费这几类渠道

  • UTM 来源、媒介和活动,推广链接打好标记,就能看到每一次活动带来多少访客

  • 浏览器、系统、设备、国家和地区、语言

  • 目标转化率:把"注册"或"访问定价页"设成目标,直接看到有多少访客完成

  • 漏斗:按顺序统计访客走到了哪一步,在哪一步流失最多

渠道和 UTM 按访客的整次访问归因。访客从某条推广链接进来,后面点的每个页面、触发的每个事件,都算在这条链接名下。所以你能直接问"这个活动带来的访客里,有多少人注册了"。

Pulse 目标转化与漏斗

点一下就筛选

想看"从 Google 来的手机访客",在来源列表里点 google.com,在设备里点手机。页面上所有数字、趋势图、目标和漏斗会一起变成这批访客的数据。再点一次就取消。

Pulse 点击筛选

同样的筛选条件在 API 里也能用,界面上看到什么,接口里就能取到什么。

给 AI 用

Pulse 界面上的每个页面,背后都有对应的接口。Key 分三种权限:上报、读取、管理。给 AI 助手一把只读的 Key,它就能自己去取数据,不需要登录账号,也不用抓网页。

整页报表一个请求就能拿到:

curl -s "$PULSE/v1/websites/$SITE_ID/report?days=7&compare=prev" \
  -H "x-api-key: $READ_KEY"

想知道某个渠道表现如何,换一个接口:

curl -s "$PULSE/v1/websites/$SITE_ID/breakdown?by=channel&days=30" \
  -H "x-api-key: $READ_KEY"

你可以让助手每周一汇总一次:上周哪个渠道带来的注册最多,哪个页面的访问掉得最厉害。接口带 OpenAPI 文档,仓库里还有一份写给 Agent 的使用指南。

Pulse 报表

隐私与体积

Pulse 不保存访客的 IP,也不保存原始的 User-Agent,只留下浏览器、系统、设备、国家、语言这类派生信息。埋点脚本不设 Cookie,只在浏览器里存一个随机的匿名 ID。页面路径里的查询参数也会被去掉,免得链接里带的令牌被记下来。

整个服务就是一个容器加一个数据文件。备份就是复制数据目录,换服务器时把它带走。界面有中英双语,浅色和深色两套。

安全与升级

开源之前,我把整个项目从安全角度完整审了一遍。越权问题已经修掉。站点级的 Key 不能再去吊销别的站点的 Key,也不能创建新站点。浏览器上报会校验来源域名,请求大小有上限,限流和暴力尝试锁定都已经打开。依赖里的安全告警从 71 个降到了 3 个。

数据库升级是自动的。上线之前,我拿线上数据的一份副本演练了一遍迁移,每个站点的汇总数字前后完全一致。

它还没有的

Pulse 目前没有会话回放、用户旅程、留存分析和收入归因。需要这些,Umami 是更合适的选择。

它也不能直接导入 Umami 的历史数据。仓库里写了一份迁移指南:两边同时跑一段时间,对比数字,确认没问题再关掉旧的。

试一试

三条命令起服务:

git clone https://github.com/k7airos/pulse.git && cd pulse
docker compose up -d
docker compose exec pulse cat /data/BOOTSTRAP_ADMIN_KEY.txt

打开 http://127.0.0.1:4592,粘贴管理员 Key,创建站点,把页面给出的代码片段放进你的网站,刷新几次,就能在总览里看到第一批访客。

用起来有问题,或者缺了你要的功能,可以直接在仓库里提 issue。Pulse 用 MIT 许可证开源,地址是 github.com/k7airos/pulse。