前端异常监控与异常上报

异常监控

监控是软件质量最后的防线,帮助我们发现真实场景中才会出现的问题,是提高软件质量的有效手段,在后端世界中异常监控已经是不可或缺的模块。

异常监控的核心问题

  • 异常捕获:如何高效、准确和全面的捕获异常?
  • 数据上报:如何选择上报时机?如何在性能和信息全面性之间做出取舍?
  • 数据分析:我们能够根据上报信息得出更深层的有价值结论吗?
  • 告警:什么时候告警?什么方式告警?

异常监控主要流程

异常捕获 -> 数据上报 -> 数据分析 -> 告警

异常捕获 - 同步

//浏览器
window.onerror                                   // 全局异常捕获
window.addEventListener('error')                 // js错误、资源加载错误
window.addEventListener( ' unhandledrejection')  // 没有catch的Promise错误

//node
process.on( 'uncaughtException')                 // 全局异常捕获
process.on(unhandledRejection' )                 // 没有catch的Promise错误

异常捕获 - 异步

异步异常通常采用重写原生,第三方库相关方法实现:

  • setTimeout setlnterval
  • fetch
  • XMLHttpRequest
  • ...
const originalSetTimeout = window.setTimeout;
window.setTimeout = (fn, time) => {
    const wrap = () => {
        try {
            fn()
        } catch (e) {
            // do something
        }
    }
    return originalSetTimeout(wrap, time);
})

异常捕获 - 利用框架、库本身的能力

重写框架相关方法:

  • Vue.config.errorHandler
  • React ErrorBoundary
  • ...

异常上报常见问题

  • 跨域问题:图像 ping、JSONP、CORS
  • 信息量大问题:Batch Sending
  • 附带上下文信息 (用户信息,错误前后的控制台log.)

推荐工具Sentry

  • 知名的开源监控平台
  • 不仅可用于前端,也可用于后端应用
  • 开箱即用的错误收集、错误上报、数据分析、监控告警功能
  • 异常捕获:非常全面和自动化,大部分错误不需我们手动 try..catch..
  • 数据上报:丰富的异常上下文
  • 数据分析:多维度的异常分析方式、直观的报表展示
  • 告警:多样告警方式、自由的告警规则

优化点

数据爆炸 

前端监控的一个显著特点:容易短时间产生海量数据

解决方案:

  • 采集端考虑:采样后上报(sampleRate)
  • 收集端考虑:生产者消费者模式- 利用消息队列控制消息消费速度
  • ...

效果增强

  • 更多的告警方式
  • 收集用户反馈,获得用户的主观意见和建议
  • 更丰富的上下文信息:用户操作录像等 (rrweb)
  • ...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值