自己写了个网站访问统计工具:Site Analytics 开源了

做网站的人大都想知道:谁来过、从哪来、停留多久、看了什么。市面上的统计工具要么把数据交给第三方,要么得装一堆依赖。我自己搭服务器的时候,不想为了加一段统计再去起一个数据库服务,于是用 Python 标准库写了个轻量的——叫 Site Analytics,今天放出来给大家用。

它解决什么

核心就一句话:前端埋点、本地存储,不碰 Nginx 日志。日志里混着爬虫、CDN 回源、监控探活这些机器流量,算出来的 PV 是失真的;埋点只在真实浏览器里触发,天然把这些噪音挡掉,还能拿到日志给不了的停留时长和跳出率。

举个例子:同样一百次请求,日志里可能只有六十次是真人,剩下四十次是各家机器人;埋点底下报上来的基本都是带了真实浏览器环境的会话,数据干净不少。

几个我自己在用的点

  • 零依赖:后端只用 Python 标准库(http.server),图表用本地 ECharts,不联网、不装数据库;
  • 数据在你自己服务器的 SQLite 文件里,不经过任何第三方;
  • PV、UV、跳出率、平均停留、人均页数这些核心指标都有,外加热门页面、来路、设备、浏览器维度;
  • 实时监控面板,每 5 秒刷一次最近访客;
  • 反作弊:自动剔除 webdriver 和已知爬虫 UA,云主机、数据中心来源打「疑似数据采集」标;
  • 可选的 GeoIP 地域分布,缺了不影响其它功能;
  • 数据保留期可在站点管理里设置,过期自动清,不用担心文件越滚越大。

为什么不直接用现成的

GA 功能强,但数据在 Google 手里,国内访问还经常不稳;Plausible 这类轻量自托管方案不错,但要起一个 Node 服务、配数据库,对只想看个数的人来说还是重了。我想要的是:一条命令跑起来、数据落在本机、不依赖任何外部服务。Site Analytics 就是照这个目标写的——部署完它就是个纯 Python 进程加一个 SQLite 文件,备份直接拷文件就行。如果你也烦透了为了看个数据被迫把访客信息交给大厂,这个工具应该合你胃口。

怎么用

在要统计的页面尾部加一行埋点脚本,填上你的站点标识就行。面板里点「添加站点」会直接生成好代码,复制粘贴即可,不用重启。

后端默认跑在 127.0.0.1:8899,对外用 Nginx、Caddy 或 Apache 反代配 HTTPS 即可。仓库里带了 systemd 单元、启动和重启脚本,还有个服务管理控制台,升级回滚一条命令搞定;国内服务器可以走 Gitee 镜像,避开 GitHub 的限速。

面板是单页仪表盘,顶栏能切中英文、切深色和浅色主题。下面这张是我自己站点的实时面板截图(域名已打码):

Site Analytics 仪表盘(域名已打码)

隐私方面

访客 ID 是浏览器里随机生成的,跟 IP 不挂钩,所以同一家公司几十人共享一个 NAT 出口 IP,也不会被算成一个人。不采集表单内容、不采精确位置,GeoIP 只在本地解析到国家、城市级别,不上传任何东西。

部署要注意的几点

踩过几个坑,顺手记一下:反代一定要透传 X-Forwarded-For 和 X-Real-IP,否则后端看到的全是 127.0.0.1,地域和来源就全错了;用缓存或合并 JS 插件时,直接引 tracker.js 可能被本地化而失效,换成仓库里的内联加载器就好;GeoIP 数据库约一两个月更新一次,重跑 update_geoip.sh 再重启后端即可。

最后说两句

这工具的定位很明确:给个人站和小团队用的轻量数据后台,不是企业级分析平台。如果你要做百万级 PV、需要漏斗归因或者广告回传,直接上 GA4 或商业 CDP 更合适。我自己的几个小站都在用,每天打开看一眼流量从哪来、哪个页面跳出高,基本能满足「心里有数」的需求。

代码已经开源,MIT 协议,随便用、随便改。如果你觉得好用,去 GitHub 点个 star 就是对我最大的支持;用的时候遇到任何问题,或者有想加的功能,直接开 issue 告诉我,我看到就会回。

  • GitHub 仓库:github.com/gg4midas/site_analytics
  • Gitee 镜像(国内):gitee.com/operations-go_0/site_analytics
热门标签
滚动至顶部