feat: downgrade tech stack to stable versions and integrate GA4 error monitoring

- Downgrade Next.js 16→14.2, React 19→18.3, Tailwind 4→3.4
- Add comprehensive GA4 error monitoring system
- Create Jenkins CI/CD pipeline with quality gates
- Fix build issues: ESLint, SWC conflict, config format
- Add documentation for deployment and error tracking
This commit is contained in:
张翔
2026-05-12 12:45:18 +08:00
parent f08874f5c4
commit 8840c4398a
24 changed files with 8567 additions and 3632 deletions
+347
View File
@@ -0,0 +1,347 @@
# GA4 错误监控集成完成报告
## 📊 集成概述
**日期**: 2026-01-15
**技术方案**: Google Analytics 4 (GA4) 异常事件追踪
**成本**: 完全免费(使用现有 GA4 账户)
**状态**: ✅ 已完成并验证
---
## 🎯 实现目标
1. **零成本错误监控** - 利用现有 GA4 账户,无需额外付费服务
2. **全自动错误捕获** - 无需手动埋点,自动捕获所有 JavaScript 错误
3. **生产环境可用** - 已通过 TypeScript 检查和构建测试
4. **智能过滤** - 自动忽略无关错误(ResizeObserver、Script error 等)
---
## 📁 新增/修改的文件
### 核心文件
| 文件 | 操作 | 说明 |
|------|------|------|
| `src/lib/analytics.ts` | **新建** | Analytics 核心模块,包含所有追踪函数 |
| `src/components/analytics/GlobalErrorTracker.tsx` | **新建** | 全局错误追踪器组件 |
| `src/app/layout.tsx` | **修改** | 集成 GlobalErrorTracker |
| `src/app/test-error-tracking/page.tsx` | **新建** | 错误监控测试页面 |
### 辅助文件
| 文件 | 操作 | 说明 |
|------|------|------|
| `src/components/analytics/CookieConsent.tsx` | **修改** | 修复 CookiePreferences 类型定义 |
---
## 🔧 技术实现细节
### 1. 错误捕获机制
```
GlobalErrorTracker 组件(客户端)
useEffect 初始化时添加事件监听器:
├── window.addEventListener('error', handleGlobalError)
│ └── 捕获 JavaScript 运行时错误
│ └── trackError('javascript_error', message, false, {filename, lineno, colno, stack})
├── window.addEventListener('unhandledrejection', handleUnhandledRejection)
│ └── 捕获 Promise 未捕获异常
│ └── trackError('unhandled_promise_rejection', message, false, {reason_type, stack})
└── document.addEventListener('error', handleResourceError, true)
└── 捕获资源加载失败(图片、脚本、样式等)
└── trackError('resource_loading_error', 'Failed to load resource', false)
```
### 2. GA4 事件数据结构
每个错误都会作为 `exception` 事件发送到 GA4,包含以下参数:
```javascript
{
event_name: 'exception', // 固定事件名
description: '[error_type] msg', // 错误描述(包含类型前缀)
fatal: 'true' | 'false', // 是否致命错误
url: '当前页面URL', // 发生错误的页面
timestamp: 'ISO时间戳', // 发生时间
// ... 其他上下文信息(可选)
}
```
### 3. ErrorBoundary 集成
React 组件渲染错误会自动被 [ErrorBoundary](src/components/ui/error-boundary.tsx) 捕获并上报:
```typescript
componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {
console.error('Error caught by boundary:', error, errorInfo);
trackError('react_error', error.message, true); // 标记为致命错误
}
```
---
## 🧪 测试与验证
### 快速测试步骤
1. **启动开发服务器**
```bash
npm run dev
```
2. **访问测试页面**
```
http://localhost:3000/test-error-tracking
```
3. **点击测试按钮**
- 📛 测试 JavaScript 错误
- ⚠️ 测试 Promise 异常
- 💥 测试 React 致命错误
- 🌐 测试网络错误
4. **查看控制台日志**(开发模式)
```
[GA4] Error tracked: {
description: "[javascript_error] 测试错误...",
fatal: "false",
url: "http://localhost:3000/test-error-tracking",
...
}
```
5. **在 GA4 后台验证**
- 登录 [Google Analytics](https://analytics.google.com/)
- 报告 → 实时 → 事件计数
- 搜索 `exception`
- 应该能在 30 秒内看到错误事件
---
## 📈 在生产环境使用
### 1. 确保环境变量已配置
检查 `.env.local` 或 `.env.production` 文件:
```env
NEXT_PUBLIC_GA_MEASUREMENT_ID=G-LGTLCR15KM
```
### 2. 构建并部署
```bash
npm run build:clean
# 然后执行部署脚本
./deploy-dist.sh
```
### 3. 监控错误报告
#### 方法 A:实时监控(推荐用于上线初期)
- GA4 后台 → 报告 → 实时
- 查看实时错误流
#### 方法 B:定期审查(日常运维)
- GA4 后台 → 报告 → 参与度 → 事件
- 筛选 `exception` 事件
- 导出数据进行分析
#### 方法 C:设置自动告警(高级)
- 使用 Google Data Studio 创建仪表盘
- 设置异常检测规则
- 配置邮件通知
---
## 🎨 自定义配置
### 忽略特定错误
编辑 [GlobalErrorTracker.tsx](src/components/analytics/GlobalErrorTracker.tsx)
```typescript
const IGNORED_ERRORS = [
/_AutofillCallbackHandler/,
/ResizeObserver loop limit exceeded/,
// 添加你想要忽略的错误模式...
];
```
### 添加自定义错误上下文
```typescript
trackError('custom_error', 'Something went wrong', false, {
user_id: '12345',
feature_name: 'checkout',
session_id: 'abc-xyz',
});
```
### 修改致命错误阈值
默认情况下,React 渲染错误会被标记为 `fatal: true`。你可以根据业务需求调整:
```typescript
// ErrorBoundary 中
componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {
const isFatal = error.message.includes('critical');
trackError('react_error', error.message, isFatal);
}
```
---
## ⚠️ 注意事项与限制
### GA4 错误监控的限制
1. **数据延迟**GA4 数据通常有 24-48 小时的处理延迟(实时报告除外)
2. **采样率**:高流量网站可能会有数据采样
3. **数据保留**:GA4 免费版数据保留 2 个月(付费版 14 个月)
4. **事件限制**:每个 session 最多 500 个事件
5. **参数限制**:每个事件最多 25 个参数
### 与专业错误监控工具对比
| 特性 | GA4 错误监控 | Sentry (免费版) | Fundebug (免费版) |
|------|-------------|----------------|------------------|
| **成本** | ✅ 免费 | ✅ 免费(5K 次/月) | ✅ 免费(3K 次/月) |
| **国内访问** | ✅ 可访问(需 VPN) | ❌ 受限 | ✅ 可访问 |
| **错误聚合** | ⚠️ 基础 | ✅ 高级 | ✅ 高级 |
| **Source Map** | ❌ 不支持 | ✅ 支持 | ✅ 支持 |
| **性能影响** | ✅ 低 | ⚠️ 中等 | ⚠️ 中等 |
| **告警通知** | ⚠️ 有限 | ✅ 完善 | ✅ 完善 |
| **团队协作** | ⚠️ 基础 | ✅ 完善 | ✅ 完善 |
### 建议
- **适合场景**:个人项目、小型网站、预算有限的项目
- **升级时机**:当需要更专业的错误分析、Source Map 支持、团队协作功能时,考虑迁移到 Sentry 或 Fundebug
- **混合方案**:同时使用 GA4 + Sentry/FundebugGA4 用于业务分析,专业工具用于错误调试
---
## 🔄 后续优化建议
### 短期优化(1-2 周)
1. **设置 GA4 告警**
- 配置自定义异常检测
- 设置每日错误摘要邮件
2. **创建错误仪表盘**
- 使用 Google Data Studio
- 可视化错误趋势、类型分布
3. **添加用户标识**
- 在错误上下文中包含用户 ID(如果适用)
- 便于复现问题
### 中期优化(1-3 个月)
1. **错误分类体系**
- 定义错误严重级别(P0/P1/P2/P3
- 建立响应 SLA
2. **与 CI/CD 集成**
- 将错误率纳入质量门禁
- 自动化回归测试
3. **性能关联分析**
- 关联 Core Web Vitals 与错误率
- 发现性能瓶颈
### 长期优化(3-6 个月)
1. **A/B 测试影响评估**
- 分析新功能上线后的错误变化
- 量化代码质量改进效果
2. **预测性错误预防**
- 基于历史数据预测潜在问题
- 主动修复高风险代码路径
3. **考虑迁移到专业工具**
- 如果错误量增长或需求复杂化
- 评估 Sentry/Fundebug 的 ROI
---
## 📞 支持与故障排除
### 常见问题
**Q: 为什么我在 GA4 后台看不到错误?**
A: 请检查以下几点:
1. 确保 `NEXT_PUBLIC_GA_MEASUREMENT_ID` 环境变量已正确设置
2. 使用"实时"报告而非普通报告(有 24-48 小时延迟)
3. 检查浏览器控制台是否有 `[GA4] Error tracked:` 日志
4. 确认没有广告拦截器阻止 gtag.js 加载
**Q: 如何区分开发和生产环境的错误?**
A: 可以在错误上下文中添加环境标识:
```typescript
trackError('test_error', 'Test message', false, {
environment: process.env.NODE_ENV,
});
```
**Q: 错误数据量太大怎么办?**
A: GA4 免费版每个属性每月最多 1000 万次事件。如果超出:
1. 调整 IGNORED_ERRORS 过滤更多无关错误
2. 降低采样率(只上报部分错误)
3. 升级到 GA4 360 或迁移到专业错误监控工具
---
## 📊 成功指标
### 上线后应关注的核心指标
1. **错误率**< 1% 的 session 包含至少一个错误
2. **致命错误率**< 0.1% 的 session 包含致命错误
3. **平均修复时间 (MTTR)**< 24 小时(P0 错误 < 4 小时)
4. **错误趋势**:周环比下降或持平
### 基准线建立建议
上线第一周:
- 收集基准数据
- 识别主要错误类型
- 建立监控仪表盘
第二周起:
- 设定改善目标
- 定期审查错误报告
- 持续优化代码质量
---
## 🎉 总结
✅ **已完成**:GA4 错误监控完全集成
✅ **已验证**TypeScript 检查通过,构建成功
✅ **可测试**:提供专用测试页面 `/test-error-tracking`
**可扩展**:支持自定义错误过滤和上下文
**零成本**:利用现有 GA4 账户,无需额外费用
**下一步行动**
1. 访问测试页面验证功能
2. 部署到生产环境
3. 在 GA4 后台设置监控
4. 建立定期审查流程
---
**文档版本**: v1.0
**最后更新**: 2026-01-15
**维护者**: 张翔 (Zhang Xiang)