这个项目能做什么

Glance 是一款自托管的 Web 分析服务,以单个 Go 二进制文件(由一个 SQLite 文件支持)或一个 Docker 容器的形式提供。它的功能范围被刻意限制在一组简单的指标,而非完整的产品分析平台:包括访客数、页面浏览量、热门页面、来源、国家和地区、设备、浏览器、操作系统以及简单的自定义事件。它不提供会话、漏斗、队列、热力图或会话回放功能。 追踪机制:网站嵌入一段约 1 KB 的无 Cookie 代码片段(由 /glance.js 提供)。它在每次页面浏览时通过 sendBeacon 发送一个小型 JSON 正文,并针对单页应用(SPA)在 pushState 和 popstate 时重新发送。页面可触发自定义事件,虽然目前接受属性但会被忽略。服务器会验证页面主机名是否与站点域名匹配,过滤已知机器人、带有 webdriver 标记的浏览器以及超大正文,并始终返回 202 响应。为了在部署前进行测试,系统接受 localhost 和私有局域网地址。派生维度包括浏览器、操作系统、设备、国家、地区和活动标签。 隐私保护:不使用 Cookie,不存储 IP。访客通过对每日盐值(salt)、站点、IP 和用户代理进行截断的 SHA-256 哈希来识别;盐值每 UTC 天轮换一次并持久化,因此无法跨日追踪访客。单日访客数是精确的,而多日总数则是每日唯一访客的累加。国家和地区优先从代理国家请求头获取,否则通过 IANA 派生表将浏览器时区进行映射;地区为该时区的城市部分,因此不提供城市级报告。来源被简化为仅保留主机名,且常见主机名会被设置别名。 架构设计:事件进入内存队列,在请求路径上绝不直接接触数据库;一个 writer goroutine 每秒或每 200 个事件通过一次事务提交队列。每小时和每日的汇总数据每分钟以及在打开仪表盘时根据原始事件重新构建,仪表盘仅读取汇总数据。原始事件在保留期后被清理(默认 7 天,最少 2 天,最高可调至 90 天,除非通过环境变量固定);汇总数据永久保留。Favicons 由 Glance 自身通过 SSRF 防护机制获取(拒绝回环、私有、链路本地和运营商级 NAT 地址),地图使用捆绑的 Natural Earth 轮廓并通过 MapLibre 渲染,因此运行时无需第三方服务。 仪表盘与 API:内置的 Svelte UI 列出所有站点及其 Favicon、14 天趋势线以及本周与上周的访客对比,并支持拖拽排序。针对单个站点,它显示 24 小时至 180 天内与前一等长窗口对比的总量、图表、过去 30 分钟内的活跃人数、分项卡片(页面、来源、位置、设备、事件)、可展开的过滤列表、过去 5 分钟的实时 3D 地球和范围地图,以及站点的名称、域名、默认范围、强调色和主国家等设置。端点位于 /api/v1,涵盖 collect、sites、stats、breakdown、live、favicons、rollup、status、settings、export 和令牌管理。管理员认证使用会话 Cookie 或 HTTP Basic;API 令牌以哈希形式存储且为只读。 额外功能:在 /mcp 提供一个只读的 Model Context Protocol 端点(Streamable HTTP),为 AI 代理提供 list_sites、overview、site_stats、breakdown、search_terms 和 revenue 等工具;Glance 内部没有 LLM。可选集成包括通过 OAuth 添加 Google Search Console 搜索词(webmasters.readonly 权限,连接时拉取约 16 个月数据并每日刷新)以及 Polar 收入(首次触达归因记录在访客浏览器的 localStorage 中并通过结账元数据传递)。部署指南涵盖 Docker Compose 和针对 linux/amd64 及 linux/arm64 的预构建 ghcr.io 镜像,以及针对 Dokploy 类主机的独立 compose 文件,并支持使用 Go 1.27、Node 24 和纯 Go SQLite 驱动从源码构建。发布镜像大小约为 37 MB,空闲内存占用低于 10 MB。许可证:MIT。