# Light-Sentry 轻量级前端监控系统 - 架构设计文档 ## 一、设计理念 ### 1.1 核心原则 - **轻量优先**:SDK < 10KB (gzip),服务端单节点可运行 - **插件化架构**:核心极小,功能通过插件扩展,按需加载 - **性能友好**:不阻塞主线程,不影响页面性能 - **易于部署**:docker-compose up 一键启动,无需复杂运维 - **兼容 Sentry**:接口兼容 Sentry 协议,可平滑迁移 ### 1.2 设计目标 | 指标 | 目标值 | 说明 | |------|--------|------| | SDK 核心体积 | < 5KB gzip | 只含事件总线和上报 | | SDK 完整体积 | < 15KB gzip | 含错误+性能+网络插件 | | 单节点承载 | 10万+ 事件/天 | 1C2G 服务器 | | 部署时间 | < 5 分钟 | docker-compose 一键部署 | | 数据延迟 | < 30 秒 | 从上报到可查询 | --- ## 二、整体架构 ### 2.1 架构图 ``` ┌─────────────────────────────────────────────────────────────┐ │ 前端 SDK │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────────┐ │ │ │ Error │ │ Perf │ │ Network │ │ Behavior │ │ │ │ Plugin │ │ Plugin │ │ Plugin │ │ Plugin │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ └──────┬───────┘ │ │ └─────────────┴─────────────┴──────────────┘ │ │ │ │ │ ┌─────┴─────┐ │ │ │ Core │ │ │ │ (EventBus │ │ │ │ + Queue │ │ │ │ + Report)│ │ │ └─────┬─────┘ │ └──────────────────────────┼───────────────────────────────────┘ │ HTTP (beacon / fetch / img) ▼ ┌─────────────────────────────────────────────────────────────┐ │ Nginx 反向代理 │ │ 限流 · CORS · 负载均衡 · SSL 卸载 │ └──────────────────────────┬───────────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────────────┐ │ API 接入层 (Node.js) │ │ ┌───────────────────────────────────────────────────────┐ │ │ │ 1. DSN 认证 (publicKey 校验) │ │ │ │ 2. 协议解析 (envelope / store / 自定义) │ │ │ │ 3. 数据清洗 (脱敏、过滤、去重) │ │ │ │ 4. 错误指纹计算 │ │ │ │ 5. 内存队列 + 批量写入 │ │ │ └───────────────────────────────────────────────────────┘ │ └──────────┬───────────────────────────┬──────────────────────┘ ▼ ▼ ┌─────────────────────┐ ┌───────────────────────┐ │ Loki (日志) │ │ MySQL (聚合数据) │ │ - 原始错误堆栈 │ │ - 项目配置 │ │ - 性能指标明细 │ │ - 错误聚合统计 │ │ - 用户行为日志 │ │ - 性能指标趋势 │ │ 保留: 7-30 天 │ │ - 告警规则 │ └─────────────────────┘ │ - 用户管理 │ └───────────┬───────────┘ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 查询 & 展示层 │ │ ┌──────────────┐ ┌──────────┐ ┌──────────────────────┐ │ │ │ 管理后台 │ │ 告警引擎 │ │ Grafana 仪表盘 │ │ │ │ (原生 JS) │ │ (规则引擎)│ │ (复用现有工具) │ │ │ │ - 项目管理 │ │ - 规则 │ │ - 错误趋势图 │ │ │ │ - 错误查询 │ │ - 收敛 │ │ - 性能仪表盘 │ │ │ │ - 性能分析 │ │ - 通知 │ │ - 自定义面板 │ │ │ └──────────────┘ └──────────┘ └──────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` ### 2.2 模块职责 | 层级 | 模块 | 职责 | 技术选型 | |------|------|------|----------| | 采集层 | 前端 SDK | 数据采集、队列、上报 | TypeScript + 插件化 | | 接入层 | API Server | 认证、解析、清洗、入队 | Node.js + Express | | 存储层 | Loki | 原始日志存储 | Grafana Loki | | 存储层 | MySQL | 聚合数据、配置、用户 | MySQL 8.0 / SQLite | | 计算层 | 聚合服务 | 错误聚合、性能统计 | 定时任务 / 实时聚合 | | 计算层 | 告警引擎 | 规则匹配、告警通知 | 内置规则引擎 | | 展示层 | 管理后台 | 项目管理、数据查询 | 原生 HTML + JS | | 展示层 | Grafana | 数据可视化 | Grafana | --- ## 三、数据流 ### 3.1 错误上报流程 ``` 前端触发错误 ↓ ErrorPlugin 捕获 ↓ 封装为标准事件格式 ↓ 加入内存队列 ↓ 批量/定时/页面隐藏 触发上报 ↓ sendBeacon / fetch / img 标签 ↓ Nginx (限流 + CORS) ↓ API Server ├─ DSN 认证 ├─ envelope 解析 ├─ 数据清洗 (脱敏IP、UA) ├─ 计算错误指纹 └─ 写入内存队列 ↓ 批量消费 ├─ 写入 Loki (原始数据) └─ 更新 MySQL 聚合表 ↓ Grafana / 管理后台 查询 ↓ 告警引擎 检测规则 ↓ 触发通知 (Webhook / 邮件) ``` ### 3.2 性能指标流程 ``` PerformancePlugin 监听性能指标 ↓ (FP / FCP / LCP / CLS / TTI / Long Task) ↓ 采样过滤 (默认 10% 采样率) ↓ 批量上报 ↓ API Server 接收 ├─ 数据校验 └─ 写入 Loki ↓ 定时聚合任务 (每 5 分钟) ├─ 计算 P50 / P90 / P95 / P99 ├─ 按项目 + 页面 + 小时 聚合 └─ 写入 MySQL 性能表 ↓ Grafana 展示趋势图 ``` --- ## 四、技术选型说明 ### 4.1 为什么用 Loki 而不是 ES/ClickHouse? | 特性 | Loki | Elasticsearch | ClickHouse | |------|------|---------------|------------| | 部署复杂度 | 极低(单二进制) | 高(需调优) | 中 | | 资源消耗 | 低(内存 + 磁盘) | 高(内存密集) | 中高 | | 查询性能 | 中等(日志足够) | 高 | 极高 | | 全文检索 | 支持(Label + grep) | 强大 | 支持 | | Grafana 集成 | 原生 | 需配置 | 需配置 | | 适合场景 | 日志、错误追踪 | 全文检索、复杂分析 | OLAP、大数据量 | **结论**:轻量级监控,Loki 足够用,运维成本最低,和 Grafana 集成最好。 ### 4.2 为什么用 MySQL 存聚合数据? - 成熟稳定,运维简单 - 聚合后数据量不大(每天几千~几万行) - 事务支持,数据一致性好 - 管理后台查询方便 - 小项目甚至可以用 SQLite,零运维 ### 4.3 为什么前端用原生 JS? - 后台页面不复杂,原生 JS 足够 - 无构建流程,修改即生效 - 体积小,加载快 - 不依赖前端框架生态,长期维护成本低 --- ## 五、与现有 Light-Sentry 的关系 ### 5.1 现有能力 - ✅ Sentry 兼容接口(store / envelope) - ✅ Loki 原始日志存储 - ✅ Grafana 仪表盘 - ✅ 项目管理后台 - ✅ Docker Compose 一键部署 - ✅ NEL (Network Error Logging) 支持 ### 5.2 待完善能力 - 🚧 自研轻量 SDK - 🚧 错误指纹聚合 - 🚧 性能指标聚合 - 🚧 告警引擎 - 🚧 源 map 解析 - 🚧 用户会话追踪 - 🚧 行为分析插件 --- ## 六、文档目录 ``` docs/ ├── 00-architecture.md # 本文档 - 整体架构 ├── 01-sdk-design.md # 前端 SDK 设计 ├── 02-api-server.md # 服务端接入层设计 ├── 03-data-aggregation.md # 数据聚合与存储设计 ├── 04-alert-engine.md # 告警引擎设计 ├── 05-admin-dashboard.md # 管理后台与可视化设计 └── 06-deployment.md # 部署与运维设计 ```