初识前端监控

127 阅读2分钟

初识前端监控

那是一个平平无奇的工作日,和往常一样,我正在代码的海洋里遨游着。突然,产品来到我的面前,笑吟吟的睁着怪眼看我,一字一句的从嘴里突出四个字——“有新需求”。拿到文档的那一刻,我竟提不起半点翻开的欲望,可又想起产品脸上怪异的笑容,我从顶上直冷到脚跟,还是看看吧。凡事总须研究,才会明白。产品说的要求,我也还依稀记得,可是不甚清楚。我翻开需求文档一查,这文档没有尾页,歪歪斜斜的每叶上都写着“数据采集”几个字。我横竖睡不着,仔细看了半夜,才从字缝里看出字来,满本都写着两个字是“监控”!

1. 前端监控类型

1.1 数据监控

监控产品相关的数据指标

  • PV(Page View) 页面浏览量或点击量
  • UV(Unique Visitor) 访客量
  • rpv 路由切换量
  • 用户的点击操作

1.2 性能监控

项目质量、性能相关的性能监控

  • DNS解析时间
  • TCP建立时间
  • 首屏加载时间
  • DOM渲染完成时间
  • 页面加载完成时间
  • 。。。

使用 window.performanceAPI查询资源加载时间

1.3 报警监控

前端代码在执行过程种发生的异常

  • js报错

    window.onerror = function(msg, url, row, col, error) {
        console.log(msg, url, row, col, error);
    }
    
  • 请求报错

    addEventListener('unhandledrejection', e => {
        console.log(e)
    })
    
  • 资源加载报错

    addEventListener('error', e => {
        const target = e.target
        if (target != window) {
            console.log(target)
        }
    }, true)
    

2. 埋点方式

2.1 手动埋点

通过手动嵌入代码的方式进行埋点,在需要监控的位置嵌入代码,发送监控信息

优点:可以在任意位置嵌入监控代码进行监控

缺点: 需要大量的工作量,每个埋点位置都需要嵌入监控代码

Vue可以通过自定义指令的方式实现半自动

2.2 可视化埋点

通过可视化系统埋点

优点:方法简便,工作量下

缺点:不能手动定制,局限性大

2.3 无痕埋点

统一对事件进行监控

优点:工作量小,不会出现监控遗漏

缺点:数据量大

引入SDK,该SDK包含全局事件的监听,数据的处理,数据的上传,同时还要向外暴露手动埋点的方法

3. 数据发送方式

3.1 image方式

将监控信息作为image的scr属性上传至服务端

3.2 Beacon方式

Navigator.sendBeacon(url,data)

优点:不会占用资源,在浏览器空闲时间发送,不会对业务代码造成阻塞。

缺点:有兼容性问题

\