引言
作为前端开发者,你是否遇到过以下问题?
用户反馈页面白屏,但无法复现问题?
线上性能突然变差,但不知道具体原因?
某些浏览器或设备上报错,但缺乏详细日志?
如果没有完善的前端监控系统,这些问题就像“黑盒”,难以排查和优化。本文将带你从零搭建一套前端监控系统,实现错误收集、性能上报、用户行为追踪,助你快速定位线上问题!
一、为什么需要前端监控?
1.1 监控的核心目标
错误监控:捕获JS异常、资源加载失败、接口错误等。
性能监控:统计页面加载时间、FP/FCP等关键指标。
用户行为分析:记录用户操作路径,辅助复现问题。
数据可视化:通过Dashboard分析趋势,指导优化。
1.2 常见监控方案对比
Sentry | ||
Fundebug | ||
自建监控 |
本文重点讲解自建监控系统,适合对数据安全性要求高的团队。
二、错误收集:如何捕获前端异常?
2.1 JS错误捕获
使用 window.onerror
和 window.addEventListener('error')
全局捕获错误:
window.onerror = function(message, source, lineno, colno, error) {
console.log('捕获到错误:', { message, source, lineno, colno, error });
// 上报到服务端
reportError({ type: 'js-error', data: { message, stack: error.stack } });
};
// 捕获未处理的Promise异常
window.addEventListener('unhandledrejection', (e) => {
reportError({ type: 'promise-error', data: e.reason });
});
2.2 资源加载失败监控
通过 PerformanceObserver
监听资源加载情况:
const observer = new PerformanceObserver((list) => { list.getEntries().forEach((entry) => { if (entry.duration === 0) { // 加载失败的资源 reportError({ type: 'resource-error', data: { name: entry.name, type: entry.initiatorType } }); } });});observer.observe({ entryTypes: ['resource'] });
2.3 接口错误监控
劫持 fetch
和 XMLHttpRequest
,监听HTTP请求:
// 拦截fetchconst originalFetch = window.fetch;window.fetch = async (...args) => { const start = Date.now(); const res = await originalFetch(...args); if (!res.ok) { reportError({ type: 'api-error', data: { url: args[0], status: res.status } }); } return res;};
三、性能上报:如何衡量页面加载速度?
3.1 关键性能指标(Web Vitals)
FP(First Paint):首次渲染时间
FCP(First Contentful Paint):首次内容渲染时间
LCP(Largest Contentful Paint):最大内容渲染时间
CLS(Cumulative Layout Shift):布局偏移分数
TTI(Time to Interactive):可交互时间
3.2 使用 web-vitals
库采集数据
import { getLCP, getFID, getCLS } from 'web-vitals';
getLCP((metric) => reportPerformance(metric));
getFID((metric) => reportPerformance(metric));
getCLS((metric) => reportPerformance(metric));
3.3 自定义性能数据
通过 Performance API
获取更详细的加载信息:
const timing = performance.timing;const loadTime = timing.loadEventEnd - timing.navigationStart;console.log(`页面加载耗时:${loadTime}ms`);
四、数据上报与存储
4.1 上报方式
即时上报:错误发生时立即发送(适合关键错误)。
批量上报:缓存在
localStorage
,定时或页面关闭前发送(减少请求)。
4.2 服务端存储
Node.js + MongoDB:存储错误日志和性能数据。
ELK(Elasticsearch + Logstash + Kibana):实现日志分析和可视化。
4.3 数据可视化
五、优化与扩展
5.1 采样率控制
避免数据量过大,可按 1%~10% 采样上报。
5.2 用户行为追踪
结合 RRWeb
录制用户操作,复现错误场景。
5.3 报警机制
企业微信/钉钉机器人告警
错误率超过阈值时自动通知
六、总结
这篇文章介绍了前端监控的核心技术:
✅ 错误捕获:JS异常、资源加载、接口错误
✅ 性能上报:Web Vitals + Performance API
✅ 数据存储:Node.js + MongoDB / ELK
✅ 可视化分析:Grafana / 自研Dashboard
自建监控系统 不仅能提升问题排查效率,还能为性能优化提供数据支撑。如果你的项目还没有监控,赶紧动手搭建吧!

优网科技秉承"专业团队、品质服务" 的经营理念,诚信务实的服务了近万家客户,成为众多世界500强、集团和上市公司的长期合作伙伴!
优网科技成立于2001年,擅长网站建设、网站与各类业务系统深度整合,致力于提供完善的企业互联网解决方案。优网科技提供PC端网站建设(品牌展示型、官方门户型、营销商务型、电子商务型、信息门户型、微信小程序定制开发、移动端应用(手机站、APP开发)、微信定制开发(微信官网、微信商城、企业微信)等一系列互联网应用服务。