前端异常监控解决方案研究

广告位招租
扫码页面底部二维码联系

前端监控包括行为监控、异常监控、性能监控等,本文主要讨论异常监控。对于【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.net前端而言,和后端处于同一个监控系统中,前【本文首发于唐霜的博客】【版权所有,侵权必究】端有自己的监控方案,后端也有自己等监控方原创内容,盗版必究。【本文受版权保护】案,但两者并不分离,因为一个用户在操作应本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】用过程中如果出现异常,有可能是前端引起,【作者:唐霜】【原创不易,请尊重版权】也有可能是后端引起,需要有一个机制,将前本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】后端串联起来,使监控本身统一于监控系统。【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。因此,即使只讨论前端异常监控,其实也不能著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。严格区分前后端界限,而要根据实际系统的设未经授权,禁止复制转载。【转载请注明来源】计,在最终的报表中体现出监控对开发和业务【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net的帮助。

【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。【访问 www.tangshuang.n【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。et 获取更多精彩内容】

一般而言,一个监控系统,大致可以分为四个【本文首发于唐霜的博客】【作者:唐霜】阶段:日志采集、日志存储、统计与分析、报【版权所有,侵权必究】【转载请注明来源】告和警告。

转载请注明出处:www.tangshua【作者:唐霜】【转载请注明来源】ng.net【本文受版权保护】未经授权,禁止复制转载。

【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。【未经授权禁止转载】

采集阶段:收集异常日志,先在本地做一定的【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。处理,采取一定的方案上报到服务器。

未经授权,禁止复制转载。【转载请注明来源】【访问 www.tangshuang.n【转载请注明来源】【版权所有,侵权必究】et 获取更多精彩内容】

存储阶段:后端接收前端上报的异常日志,经【关注微信公众号:wwwtangshuangnet】【未经授权禁止转载】过一定处理,按照一定的存储方案存储。

转载请注明出处:www.tangshua未经授权,禁止复制转载。原创内容,盗版必究。ng.net【作者:唐霜】原创内容,盗版必究。

分析阶段:分为机器自动分析和人工分析。机【原创内容,转载请注明出处】【版权所有,侵权必究】器自动分析,通过预设的条件和算法,对存储本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net的日志信息进行统计和筛选,发现问题,触发【作者:唐霜】著作权归作者所有,禁止商业用途转载。报警。人工分析,通过提供一个可视化的数据本文作者:唐霜,转载请注明出处。【访问 www.tangshuang.net 获取更多精彩内容】面板,让系统用户可以看到具体的日志数据,【本文受版权保护】【原创内容,转载请注明出处】根据信息,发现异常问题根源。

【版权所有】唐霜 www.tangshu【访问 www.tangshuang.net 获取更多精彩内容】【版权所有,侵权必究】ang.net【转载请注明来源】

报警阶段:分为告警和预警。告警按照一定的原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.net级别自动报警,通过设定的渠道,按照一定的转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】触发规则进行。预警则在异常发生前,提前预【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.net判,给出警告。

本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshua【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】ng.net【转载请注明来源】

1 前端异常

前端异常是指在用户使用Web应用时无法快【转载请注明来源】【版权所有】唐霜 www.tangshuang.net速得到符合预期结果的情况,不同的异常带来原创内容,盗版必究。【原创内容,转载请注明出处】的后果程度不同,轻则引起用户使用不悦,重未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。则导致产品无法使用,使用户丧失对产品的认著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。可。

【本文受版权保护】【原创内容,转载请注明出处】【原创内容,转载请注明出处】

1.1 前端异常分类

根据异常代码的后果的程度,对前端异常的表原创内容,盗版必究。本文作者:唐霜,转载请注明出处。现分为如下几类

转载请注明出处:www.tangshua原创内容,盗版必究。【未经授权禁止转载】ng.net【原创不易,请尊重版权】未经授权,禁止复制转载。

转载请注明出处:www.tangshua本文作者:唐霜,转载请注明出处。原创内容,盗版必究。ng.net著作权归作者所有,禁止商业用途转载。

a. 出错

原创内容,盗版必究。本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】【转载请注明来源】

界面呈现的内容与用户预期的内容不符,例如原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】点击进入非目标界面,数据不准确,出现的错【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。误提示不可理解,界面错位,提交后跳转到错【本文受版权保护】【本文受版权保护】误界面等情况。这类异常出现时,虽然产品本原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】身功能还能正常使用,但用户无法达成自己目【访问 www.tangshuang.net 获取更多精彩内容】【本文首发于唐霜的博客】标。

【版权所有】唐霜 www.tangshu【原创内容,转载请注明出处】【原创内容,转载请注明出处】ang.net【访问 www.tangshuang.n【本文受版权保护】【版权所有】唐霜 www.tangshuang.netet 获取更多精彩内容】未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。

b. 呆滞

未经授权,禁止复制转载。转载请注明出处:www.tangshua【版权所有,侵权必究】【关注微信公众号:wwwtangshuangnet】ng.net未经授权,禁止复制转载。【未经授权禁止转载】

界面出现操作后没有反应的现象,例如点击按【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。钮无法提交,提示成功后无法继续操作。这类转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。异常出现时,产品已经存在界面级局部不可用本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。现象。

本文作者:唐霜,转载请注明出处。【作者:唐霜】【本文受版权保护】【未经授权禁止转载】

c. 损坏

转载请注明出处:www.tangshua【版权所有,侵权必究】【原创不易,请尊重版权】ng.net【作者:唐霜】著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshu本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.netang.net

界面出现无法实现操作目的的现象,例如点击本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net无法进入目标界面,点击无法查看详情内容等【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。。这类异常出现时,应用部分功能无法被正常本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。使用。

【版权所有,侵权必究】【版权所有】唐霜 www.tangshu转载请注明出处:www.tangshuang.net【原创内容,转载请注明出处】ang.net原创内容,盗版必究。转载请注明出处:www.tangshua未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.netng.net

d. 假死

原创内容,盗版必究。未经授权,禁止复制转载。

界面出现卡顿,无法对任何功能进行使用的现【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。象。例如用户无法登陆导致无法使用应用内功【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.net能,由于某个遮罩层阻挡且不可关闭导致无法原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。进行任何后续操作。这类异常出现时,用户很转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。可能杀死应用。

【访问 www.tangshuang.n【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。et 获取更多精彩内容】未经授权,禁止复制转载。

e. 崩溃

【作者:唐霜】【未经授权禁止转载】

应用出现经常性自动退出或无法操作的现象。【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。例如间歇性crash,网页无法正常加载或【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。加载后无法进行任何操作。这类异常持续出现【作者:唐霜】【版权所有,侵权必究】,将直接导致用户流失,影响产品生命力。

【转载请注明来源】【本文首发于唐霜的博客】【本文首发于唐霜的博客】【本文受版权保护】

1.2 异常错误原因分类

前端产生异常的原因主要分5类:

本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。
原因 案例 频率
逻辑错误 1)    业务逻辑判断条件错误
2)    事件绑定顺序错误
3)    调用栈时序错误
4)    错误的操作js对象
经常
数据类型错误 1)    将null视作对象读取property
2)    将undefined视作数组进行遍历
3)    将字符串形式的数字直接用于加运算
4)    函数参数未传
经常
语法句法错误 较少
网络错误 1)    慢
2)    服务端未返回数据但仍200,前端按正常进行数据遍历
3)    提交数据时网络中断
4)    服务端500错误时前端未做任何错误处理
偶尔
系统错误 1)    内存不够用
2)    磁盘塞满
3)    壳不支持API
4)    不兼容
较少

2 异常采集

2.1 采集内容

当异常出现的时候,我们需要知道异常的具体【原创不易,请尊重版权】【关注微信公众号:wwwtangshuangnet】信息,根据异常的具体信息来决定采用什么样【转载请注明来源】【本文首发于唐霜的博客】的解决方案。在采集异常信息时,可以遵循4【原创不易,请尊重版权】【原创不易,请尊重版权】W原则:

未经授权,禁止复制转载。原创内容,盗版必究。原创内容,盗版必究。

WHO did WHAT and get WHICH exception in WHICH environment?

未经授权,禁止复制转载。【本文首发于唐霜的博客】

a. 用户信息

著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。

出现异常时该用户的信息,例如该用户在当前本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net时刻的状态、权限等,以及需要区分用户可多【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】终端登录时,异常对应的是哪一个终端。

【转载请注明来源】本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】【作者:唐霜】

b. 行为信息

【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。

用户进行什么操作时产生了异常:所在的界面【未经授权禁止转载】著作权归作者所有,禁止商业用途转载。路径;执行了什么操作;操作时使用了哪些数转载请注明出处:www.tangshuang.net【关注微信公众号:wwwtangshuangnet】据;当时的API吐了什么数据给客户端;如本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net果是提交操作,提交了什么数据;上一个路径本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。;上一个行为日志记录ID等。

未经授权,禁止复制转载。转载请注明出处:www.tangshua【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。ng.net【关注微信公众号:wwwtangshua转载请注明出处:www.tangshuang.net【版权所有,侵权必究】ngnet】【未经授权禁止转载】

c. 异常信息

【本文首发于唐霜的博客】转载请注明出处:www.tangshua【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。ng.net著作权归作者所有,禁止商业用途转载。

产生异常的代码信息:用户操作的DOM元素【访问 www.tangshuang.net 获取更多精彩内容】【版权所有,侵权必究】节点;异常级别;异常类型;异常描述;代码本文版权归作者所有,未经授权不得转载。【作者:唐霜】stack信息等。

【关注微信公众号:wwwtangshua原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.netngnet】转载请注明出处:www.tangshua【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.netng.net

d. 环境信息

【原创内容,转载请注明出处】【版权所有】唐霜 www.tangshu【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。ang.net未经授权,禁止复制转载。【版权所有】唐霜 www.tangshu【未经授权禁止转载】【转载请注明来源】ang.net

网络环境;设备型号和标识码;操作系统版本本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。;客户端版本;API接口版本等。

转载请注明出处:www.tangshua【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。ng.net原创内容,盗版必究。【原创不易,请尊重版权】
字段 类型 解释
requestId String 一个界面产生一个requestId
traceId String 一个阶段产生一个traceId,用于追踪和一个异常相关的所有日志记录
hash String 这条log的唯一标识码,相当于logId,但它是根据当前日志记录的具体内容而生成的
time Number 当前日志产生的时间(保存时刻)
userId String
userStatus Number 当时,用户状态信息(是否可用/禁用)
userRoles Array 当时,前用户的角色列表
userGroups Array 当时,用户当前所在组,组别权限可能影响结果
userLicenses Array 当时,许可证,可能过期
path String 所在路径,URL
action String 进行了什么操作
referer String 上一个路径,来源URL
prevAction String 上一个操作
data Object 当前界面的state、data
dataSources Array<Object> 上游api给了什么数据
dataSend Object 提交了什么数据
targetElement HTMLElement 用户操作的DOM元素
targetDOMPath Array<HTMLElement> 该DOM元素的节点路径
targetCSS Object 该元素的自定义样式表
targetAttrs Object 该元素当前的属性及值
errorType String 错误类型
errorLevel String 异常级别
errorStack String 错误stack信息
errorFilename String 出错文件
errorLineNo Number 出错行
errorColNo Number 出错列位置
errorMessage String 错误描述(开发者定义)
errorTimeStamp Number 时间戳
eventType String 事件类型
pageX Number 事件x轴坐标
pageY Number 事件y轴坐标
screenX Number 事件x轴坐标
screenY Number 事件y轴坐标
pageW Number 页面宽度
pageH Number 页面高度
screenW Number 屏幕宽度
screenH Number 屏幕高度
eventKey String 触发事件的键
network String 网络环境描述
userAgent String 客户端描述
device String 设备描述
system String 操作系统描述
appVersion String 应用版本
apiVersion String 接口版本

这是一份非常庞大的日志字段表,它几乎囊括【转载请注明来源】【版权所有,侵权必究】了一个异常发生时,能够对异常周遭环境进行【版权所有,侵权必究】【关注微信公众号:wwwtangshuangnet】详细描述的所有信息。不同情况下,这些字段转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net并不一定都会收集,由于我们会采用文档数据【版权所有,侵权必究】未经授权,禁止复制转载。库存储日志,因此,并不影响它的实际存储结【本文受版权保护】本文版权归作者所有,未经授权不得转载。果。

转载请注明出处:www.tangshua【转载请注明来源】转载请注明出处:www.tangshuang.netng.net未经授权,禁止复制转载。

2.2 异常捕获

前端捕获异常分为全局捕获和单点捕获。全局【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。捕获代码集中,易于管理;单点捕获作为补充著作权归作者所有,禁止商业用途转载。【关注微信公众号:wwwtangshuangnet】,对某些特殊情况进行捕获,但分散,不利于【原创内容,转载请注明出处】【原创内容,转载请注明出处】管理。

著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshu【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。ang.net【作者:唐霜】【关注微信公众号:wwwtangshua【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.netngnet】

a、全局捕获

【关注微信公众号:wwwtangshua【访问 www.tangshuang.net 获取更多精彩内容】【原创不易,请尊重版权】ngnet】【作者:唐霜】

通过全局的接口,将捕获代码集中写在一个地转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net方,可以利用的接口有:

【本文受版权保护】【本文受版权保护】原创内容,盗版必究。
  • window.addEventListe【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.netner(‘error’) / windo著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。w.addEventListener(“著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。unhandledrejection”)转载请注明出处:www.tangshuang.net【关注微信公众号:wwwtangshuangnet】 / document.addEvent【本文首发于唐霜的博客】未经授权,禁止复制转载。Listener(‘click’) 等
  • 【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。
  • 框架级别的全局监听,例如aixos中使用【未经授权禁止转载】【原创不易,请尊重版权】interceptor进行拦截,vue、【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。react都有自己的错误采集接口
  • 原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。【本文受版权保护】转载请注明出处:www.tangshua原创内容,盗版必究。【作者:唐霜】ng.net
  • 通过对全局函数进行封装包裹,实现在在调用本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。该函数时自动捕获异常
  • 【版权所有,侵权必究】【转载请注明来源】转载请注明出处:www.tangshua【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。ng.net
  • 对实例方法重写(Patch),在原有功能原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】基础上包裹一层,例如对console.e未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。rror进行重写,在使用方法不变的情况下【版权所有】唐霜 www.tangshuang.net转载请注明出处:www.tangshuang.net也可以异常捕获
  • 本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】转载请注明出处:www.tangshua原创内容,盗版必究。【版权所有,侵权必究】ng.net

b、单点捕获

【转载请注明来源】【本文受版权保护】未经授权,禁止复制转载。

在业务代码中对单个代码块进行包裹,或在逻【访问 www.tangshuang.net 获取更多精彩内容】【原创不易,请尊重版权】辑流程中打点,实现有针对性的异常捕获:

【版权所有,侵权必究】转载请注明出处:www.tangshua【作者:唐霜】【原创内容,转载请注明出处】ng.net
  • try…catch
  • 原创内容,盗版必究。【未经授权禁止转载】【访问 www.tangshuang.n【访问 www.tangshuang.net 获取更多精彩内容】【版权所有,侵权必究】et 获取更多精彩内容】
  • 专门写一个函数来收集异常信息,在异常发生转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。时,调用该函数
  • 【本文受版权保护】本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshu【访问 www.tangshuang.net 获取更多精彩内容】【本文受版权保护】ang.net
  • 专门写一个函数来包裹其他函数,得到一个新未经授权,禁止复制转载。【转载请注明来源】函数,该新函数运行结果和原函数一模一样,【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。只是在发生异常时可以捕获异常
  • 【访问 www.tangshuang.n转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.netet 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。

2.3 跨域脚本异常

由于浏览器安全策略限制,跨域脚本报错时,原创内容,盗版必究。本文作者:唐霜,转载请注明出处。无法直接获取错误的详细信息,只能得到一个【作者:唐霜】【未经授权禁止转载】Script Error。例如,我们会引本文作者:唐霜,转载请注明出处。【未经授权禁止转载】入第三方依赖,或者将自己的脚本放在CDN未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net时。

【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】转载请注明出处:www.tangshua【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】ng.net

解决Script Error的方法:

本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】原创内容,盗版必究。转载请注明出处:www.tangshua【转载请注明来源】转载请注明出处:www.tangshuang.netng.net

方案一:

本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】
  • 将js内联到HTML中
  • 【访问 www.tangshuang.n【原创内容,转载请注明出处】【作者:唐霜】et 获取更多精彩内容】转载请注明出处:www.tangshua【作者:唐霜】【版权所有】唐霜 www.tangshuang.netng.net【转载请注明来源】
  • 将js文件与HTML放在同域下
  • 【本文受版权保护】【本文首发于唐霜的博客】【本文受版权保护】

方案二:

本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。【访问 www.tangshuang.n本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】et 获取更多精彩内容】
  1. 为页面上script标签添加crosso【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。rigin属性
  2. 本文版权归作者所有,未经授权不得转载。【作者:唐霜】转载请注明出处:www.tangshua未经授权,禁止复制转载。转载请注明出处:www.tangshuang.netng.net【版权所有,侵权必究】
  3. 被引入脚本所在服务端响应头中,增加 Ac转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。cess-Control-Allow-O【转载请注明来源】【版权所有】唐霜 www.tangshuang.netrigin 来支持跨域资源共享
  4. 【转载请注明来源】【转载请注明来源】未经授权,禁止复制转载。原创内容,盗版必究。

2.4 异常录制

对于一个异常,仅仅拥有该异常的信息还不足【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。以完全抓住问题的本质,因为异常发生的位置【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。,并不一定是异常根源所在的位置。我们需要本文作者:唐霜,转载请注明出处。【访问 www.tangshuang.net 获取更多精彩内容】对异常现场进行还原,才能复原问题全貌,甚【原创不易,请尊重版权】【版权所有】唐霜 www.tangshuang.net至避免类似问题在其他界面中发生。这里需要本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。引进一个概念,就是“异常录制”。录制通过转载请注明出处:www.tangshuang.net【本文受版权保护】“时间”“空间”两个维度记录异常发生前到【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。发生的整个过程,对于找到异常根源更有帮助转载请注明出处:www.tangshuang.net【转载请注明来源】

【版权所有】唐霜 www.tangshu【访问 www.tangshuang.net 获取更多精彩内容】【原创不易,请尊重版权】ang.net转载请注明出处:www.tangshua本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】ng.net本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。

转载请注明出处:www.tangshua未经授权,禁止复制转载。【转载请注明来源】ng.net转载请注明出处:www.tangshua【作者:唐霜】【版权所有,侵权必究】ng.net本文版权归作者所有,未经授权不得转载。

上图表示,当异常发生时,异常的根源可能离【未经授权禁止转载】转载请注明出处:www.tangshuang.net我们很远,我们需要回到异常发生的现场,找原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。到异常根源。就像现实生活中破案一样,如果本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net有监控摄影机对案发过程的录影,对破案来说未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。更加容易。如果仅仅关注异常本身,要找到异著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。常的根源,需要凭借运气,但有了异常录制的【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。帮助,找到根源就更加容易。

【转载请注明来源】本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】

所谓的“异常录制”,实际上就是通过技术手【本文受版权保护】原创内容,盗版必究。段,收集用户的操作过程,对用户的每一个操原创内容,盗版必究。转载请注明出处:www.tangshuang.net作都进行记录,在发生异常时,把一定时间区【原创不易,请尊重版权】【版权所有】唐霜 www.tangshuang.net间内的记录重新运行,形成影像进行播放,让【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】调试者无需向用户询问,就能看到用户当时的转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net操作过程。

【版权所有】唐霜 www.tangshu原创内容,盗版必究。【转载请注明来源】ang.net转载请注明出处:www.tangshua未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。ng.net

转载请注明出处:www.tangshua【版权所有,侵权必究】【未经授权禁止转载】ng.net转载请注明出处:www.tangshua【原创不易,请尊重版权】【版权所有】唐霜 www.tangshuang.netng.net【版权所有,侵权必究】

上图是来自阿里的一套异常录制还原方案示意【版权所有】唐霜 www.tangshuang.net【作者:唐霜】图,用户在界面上的操作产生的events【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】和mutation被产品收集起来,上传到著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】服务器,经过队列处理按顺序存放到数据库中【关注微信公众号:wwwtangshuangnet】【本文首发于唐霜的博客】。当需要进行异常重现的时候,将这些记录从【原创内容,转载请注明出处】未经授权,禁止复制转载。数据库中取出,采用一定的技术方案,顺序播【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】放这些记录,即可实现异常还原。

【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。

2.5 异常级别

一般而言,我们会将收集信息的级别分为in本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.netfo,warn,error等,并在此基础著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。上进行扩展。

【版权所有,侵权必究】【版权所有,侵权必究】

当我们监控到异常发生时,可以将该异常划分本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】到“重要——紧急”模型中分为A、B、C、本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.netD四个等级。有些异常,虽然发生了,但是并【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。不影响用户的正常使用,用户其实并没有感知本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】到,虽然理论上应该修复,但是实际上相对于【本文首发于唐霜的博客】原创内容,盗版必究。其他异常而言,可以放在后面进行处理。

著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】

【作者:唐霜】【本文首发于唐霜的博客】【原创不易,请尊重版权】

下文会讨论告警策略,一般而言,越靠近右上原创内容,盗版必究。未经授权,禁止复制转载。角的异常会越快通知,保证相关人员能最快接【未经授权禁止转载】转载请注明出处:www.tangshuang.net收到信息,并进行处理。A级异常需要快速响【转载请注明来源】【本文受版权保护】应,甚至需要相关负责人知悉。

【本文首发于唐霜的博客】转载请注明出处:www.tangshua【转载请注明来源】著作权归作者所有,禁止商业用途转载。ng.net【转载请注明来源】

在收集异常阶段,可根据第一节划分的异常后【原创不易,请尊重版权】原创内容,盗版必究。果来判断异常的严重程度,在发生异常时选择【未经授权禁止转载】本文作者:唐霜,转载请注明出处。对应的上报方案进行上报。

【本文受版权保护】原创内容,盗版必究。【访问 www.tangshuang.n著作权归作者所有,禁止商业用途转载。【本文受版权保护】et 获取更多精彩内容】【版权所有,侵权必究】

3 整理与上报方案

前文已经提到,除了异常报错信息本身,我们【作者:唐霜】本文作者:唐霜,转载请注明出处。还需要记录用户操作日志,以实现场景复原。【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。这就涉及到上报的量和频率问题。如果任何日【访问 www.tangshuang.net 获取更多精彩内容】【未经授权禁止转载】志都立即上报,这无异于自造的DDOS攻击【作者:唐霜】转载请注明出处:www.tangshuang.net。因此,我们需要合理的上报方案。下文会介【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】绍4种上报方案,但实际我们不会仅限于其中【原创不易,请尊重版权】转载请注明出处:www.tangshuang.net一种,而是经常同时使用,对不同级别的日志未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。选择不同的上报方案。

【作者:唐霜】【作者:唐霜】【转载请注明来源】

3.1 前端存储日志

我们前面提到,我们并不单单采集异常本身日本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。志,而且还会采集与异常相关的用户行为日志未经授权,禁止复制转载。原创内容,盗版必究。。单纯一条异常日志并不能帮助我们快速定位【作者:唐霜】【未经授权禁止转载】问题根源,找到解决方案。但如果要收集用户【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。的行为日志,又要采取一定的技巧,而不能用【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】户每一个操作后,就立即将该行为日志传到服【本文受版权保护】转载请注明出处:www.tangshuang.net务器,对于具有大量用户同时在线的应用,如著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】果用户一操作就立即上传日志,无异于对日志本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】服务器进行DDOS攻击。因此,我们先将这著作权归作者所有,禁止商业用途转载。【本文受版权保护】些日志存储在用户客户端本地,达到一定条件【作者:唐霜】【版权所有】唐霜 www.tangshuang.net之后,再同时打包上传一组日志。

本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshu【本文受版权保护】【本文受版权保护】ang.net

那么,如何进行前端日志存储呢?我们不可能著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。直接将这些日志用一个变量保存起来,这样会【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。挤爆内存,而且一旦用户进行刷新操作,这些【版权所有,侵权必究】原创内容,盗版必究。日志就丢失了,因此,我们自然而然想到前端【本文首发于唐霜的博客】【本文首发于唐霜的博客】数据持久化方案。

【作者:唐霜】【原创内容,转载请注明出处】【原创内容,转载请注明出处】转载请注明出处:www.tangshua【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.netng.net

目前,可用的持久化方案可选项也比较多了,未经授权,禁止复制转载。原创内容,盗版必究。主要有:Cookie、localStor【本文首发于唐霜的博客】【本文受版权保护】age、sessionStorage、I【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。ndexedDB、webSQL 、Fil【关注微信公众号:wwwtangshuangnet】【转载请注明来源】eSystem 等等。那么该如何选择呢?本文作者:唐霜,转载请注明出处。【转载请注明来源】我们通过一个表来进行对比:

本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。【未经授权禁止转载】
存储方式 cookie localStorage sessionStorage IndexedDB webSQL FileSystem
类型 key-value key-value NoSQL SQL
数据格式 string string string object
容量 4k 5M 5M 500M 60M
进程 同步 同步 同步 异步 异步
检索 key key key, index field
性能 读快写慢 读慢写快

综合之后,IndexedDB是最好的选择未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】,它具有容量大、异步的优势,异步的特性保本文作者:唐霜,转载请注明出处。原创内容,盗版必究。证它不会对界面的渲染产生阻塞。而且Ind【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。exedDB是分库的,每个库又分stor【作者:唐霜】【关注微信公众号:wwwtangshuangnet】e,还能按照索引进行查询,具有完整的数据未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。库管理思维,比localStorage更著作权归作者所有,禁止商业用途转载。【关注微信公众号:wwwtangshuangnet】适合做结构化数据管理。但是它有一个缺点,【本文首发于唐霜的博客】【作者:唐霜】就是api非常复杂,不像localSto著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】rage那么简单直接。针对这一点,我们可【本文受版权保护】未经授权,禁止复制转载。以使用hello-indexeddb这个【作者:唐霜】本文版权归作者所有,未经授权不得转载。工具,它用Promise对复杂api进行转载请注明出处:www.tangshuang.net【原创不易,请尊重版权】来封装,简化操作,使IndexedDB的【本文受版权保护】未经授权,禁止复制转载。使用也能做到localStorage一样著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。便捷。另外,IndexedDB是被广泛支【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】持的HTML5标准,兼容大部分浏览器,因【版权所有】唐霜 www.tangshuang.net【本文受版权保护】此不用担心它的发展前景。

转载请注明出处:www.tangshua【本文受版权保护】著作权归作者所有,禁止商业用途转载。ng.net本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。

接下来,我们究竟应该怎么合理使用Inde著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】xedDB,保证我们前端存储的合理性呢?

原创内容,盗版必究。【作者:唐霜】【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。

未经授权,禁止复制转载。原创内容,盗版必究。

上图展示了前端存储日志的流程和数据库布局转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net。当一个事件、变动、异常被捕获之后,形成【本文首发于唐霜的博客】【转载请注明来源】一条初始日志,被立即放入暂存区(inde著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。xedDB的一个store),之后主程序【版权所有】唐霜 www.tangshuang.net【关注微信公众号:wwwtangshuangnet】就结束了收集过程,后续的事只在webwo转载请注明出处:www.tangshuang.net【作者:唐霜】rker中发生。在一个webworker【关注微信公众号:wwwtangshuangnet】【访问 www.tangshuang.net 获取更多精彩内容】中,一个循环任务不断从暂存区中取出日志,转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】对日志进行分类,将分类结果存储到索引区中本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。,并对日志记录的信息进行丰富,将最终将会未经授权,禁止复制转载。未经授权,禁止复制转载。上报到服务端的日志记录转存到归档区。而当本文版权归作者所有,未经授权不得转载。【作者:唐霜】一条日志在归档区中存在的时间超过一定天数【原创内容,转载请注明出处】【原创内容,转载请注明出处】之后,它就已经没有价值了,但是为了防止特【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net殊情况,它被转存到回收区,再经历一段时间【原创内容,转载请注明出处】【本文首发于唐霜的博客】后,就会被从回收区中清除。

原创内容,盗版必究。【作者:唐霜】【本文受版权保护】原创内容,盗版必究。

3.2 前端整理日志

上文讲到,在一个webworker中对日【本文首发于唐霜的博客】【原创内容,转载请注明出处】志进行整理后存到索引区和归档区,那么这个本文作者:唐霜,转载请注明出处。【转载请注明来源】整理过程是怎样的呢?

原创内容,盗版必究。【访问 www.tangshuang.n【未经授权禁止转载】著作权归作者所有,禁止商业用途转载。et 获取更多精彩内容】

由于我们下文要讲的上报,是按照索引进行的【本文受版权保护】转载请注明出处:www.tangshuang.net,因此,我们在前端的日志整理工作,主要就本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】是根据日志特征,整理出不同的索引。我们在本文作者:唐霜,转载请注明出处。【本文受版权保护】收集日志时,会给每一条日志打上一个typ转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】e,以此进行分类,并创建索引,同时通过o【版权所有,侵权必究】【作者:唐霜】bject-hashcode计算每个lo【未经授权禁止转载】【本文受版权保护】g对象的hash值,作为这个log的唯一【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。标志。

【访问 www.tangshuang.n【版权所有,侵权必究】【原创内容,转载请注明出处】et 获取更多精彩内容】【未经授权禁止转载】
  • 将所有日志记录按时序存放在归档区,并将新本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net入库的日志加入索引
  • 【访问 www.tangshuang.n【原创内容,转载请注明出处】原创内容,盗版必究。et 获取更多精彩内容】未经授权,禁止复制转载。【原创不易,请尊重版权】【版权所有】唐霜 www.tangshu【版权所有】唐霜 www.tangshuang.net【作者:唐霜】ang.net
  • BatchIndexes:批量上报索引(转载请注明出处:www.tangshuang.net【关注微信公众号:wwwtangshuangnet】包含性能等其他日志),可一次批量上报10【转载请注明来源】著作权归作者所有,禁止商业用途转载。0条
  • 【原创内容,转载请注明出处】【转载请注明来源】【转载请注明来源】【版权所有,侵权必究】
  • MomentIndexes:即时上报索引本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net,一次全部上报
  • 【访问 www.tangshuang.n转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】et 获取更多精彩内容】转载请注明出处:www.tangshua【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.netng.net【转载请注明来源】
  • FeedbackIndexes:用户反馈转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net索引,一次上报一条
  • 【版权所有,侵权必究】【原创内容,转载请注明出处】原创内容,盗版必究。原创内容,盗版必究。
  • BlockIndexes:区块上报索引,【访问 www.tangshuang.net 获取更多精彩内容】【关注微信公众号:wwwtangshuangnet】按异常/错误(traceId,reque【本文受版权保护】【原创不易,请尊重版权】stId)分块,一次上报一块
  • 【版权所有】唐霜 www.tangshu本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.netang.net【访问 www.tangshuang.n本文作者:唐霜,转载请注明出处。【作者:唐霜】et 获取更多精彩内容】原创内容,盗版必究。【原创内容,转载请注明出处】
  • 上报完成后,被上报过的日志对应的索引删除
  • 著作权归作者所有,禁止商业用途转载。【版权所有,侵权必究】
  • 3天以上日志进入回收区
  • 原创内容,盗版必究。【版权所有,侵权必究】【关注微信公众号:wwwtangshua著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。ngnet】
  • 7天以上的日志从回收区清除
  • 【作者:唐霜】原创内容,盗版必究。未经授权,禁止复制转载。

rquestId:同时追踪前后端日志。由本文作者:唐霜,转载请注明出处。【作者:唐霜】于后端也会记录自己的日志,因此,在前端请【版权所有】唐霜 www.tangshuang.net转载请注明出处:www.tangshuang.net求api的时候,默认带上requestI【作者:唐霜】【版权所有,侵权必究】d,后端记录的日志就可以和前端日志对应起【转载请注明来源】【原创内容,转载请注明出处】来。

【关注微信公众号:wwwtangshua【版权所有,侵权必究】本文版权归作者所有,未经授权不得转载。ngnet】【访问 www.tangshuang.n【转载请注明来源】转载请注明出处:www.tangshuang.netet 获取更多精彩内容】原创内容,盗版必究。
【版权所有】唐霜 www.tangshu未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.netang.net【版权所有】唐霜 www.tangshu【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。ang.net

traceId:追踪一个异常发生前后的相转载请注明出处:www.tangshuang.net【原创不易,请尊重版权】关日志。当应用启动时,创建一个trace【版权所有】唐霜 www.tangshuang.net【作者:唐霜】Id,直到一个异常发生时,刷新trace本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】Id。把一个traceId相关的requ【未经授权禁止转载】【作者:唐霜】estId收集起来,把这些request未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。Id相关的日志组合起来,就是最终这个异常【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.net相关的所有日志,用来对异常进行复盘。

【作者:唐霜】【原创内容,转载请注明出处】

【未经授权禁止转载】【访问 www.tangshuang.n【转载请注明来源】【本文首发于唐霜的博客】et 获取更多精彩内容】转载请注明出处:www.tangshua【本文首发于唐霜的博客】【本文受版权保护】ng.net

上图举例展示了如何利用traceId和r【原创内容,转载请注明出处】【未经授权禁止转载】equestId找出和一个异常相关的所有转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net日志。在上图中,hash4是一条异常日志【关注微信公众号:wwwtangshuangnet】【作者:唐霜】,我们找到hash4对应的traceId原创内容,盗版必究。【作者:唐霜】为traceId2,在日志列表中,有两条本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。记录具有该traceId,但是hash3转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】这条记录并不是一个动作的开始,因为has未经授权,禁止复制转载。【作者:唐霜】h3对应的requestId为reqId【本文受版权保护】本文作者:唐霜,转载请注明出处。2,而reqId2开始于hash2,因此【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。,我们实际上要把hash2也加入到该异常【访问 www.tangshuang.net 获取更多精彩内容】【关注微信公众号:wwwtangshuangnet】发生的整个复盘备选记录中。总结起来就是,原创内容,盗版必究。【版权所有,侵权必究】我们要找出同一个traceId对应的所有著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。requestId对应的日志记录,虽然有【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】点绕,但稍理解就可以明白其中的道理。

【未经授权禁止转载】【未经授权禁止转载】

我们把这些和一个异常相关的所有日志集合起【版权所有】唐霜 www.tangshuang.net转载请注明出处:www.tangshuang.net来,称为一个block,再利用日志的ha【原创内容,转载请注明出处】【版权所有,侵权必究】sh集合,得出这个block的hash,【未经授权禁止转载】【本文首发于唐霜的博客】并在索引区中建立索引,等待上报。

本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。【访问 www.tangshuang.n【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】et 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。
转载请注明出处:www.tangshua【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。ng.net本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。

3.3 上报日志

上报日志也在webworker中进行,为【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。了和整理区分,可以分两个worker。上未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net报的流程大致为:在每一个循环中,从索引区本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。取出对应条数的索引,通过索引中的hash本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。,到归档区取出完整的日志记录,再上传到服本文版权归作者所有,未经授权不得转载。【本文受版权保护】务器。

著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。【访问 www.tangshuang.n【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。et 获取更多精彩内容】转载请注明出处:www.tangshua【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】ng.net

按照上报的频率(重要紧急度)可将上报分为本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net四种:

本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。

a. 即时上报

收集到日志后,立即触发上报函数。仅用于A本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。类异常。而且由于受到网络不确定因素影响,【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。A类日志上报需要有一个确认机制,只有确认未经授权,禁止复制转载。【原创不易,请尊重版权】服务端已经成功接收到该上报信息之后,才算转载请注明出处:www.tangshuang.net【原创不易,请尊重版权】完成。否则需要有一个循环机制,确保上报成【关注微信公众号:wwwtangshuangnet】原创内容,盗版必究。功。

转载请注明出处:www.tangshua转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。ng.net著作权归作者所有,禁止商业用途转载。【作者:唐霜】

b. 批量上报

将收集到的日志存储在本地,当收集到一定数【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。量之后再打包一次性上报,或者按照一定的频【转载请注明来源】【版权所有】唐霜 www.tangshuang.net率(时间间隔)打包上传。这相当于把多次合本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。并为一次上报,以降低对服务器的压力。

【作者:唐霜】转载请注明出处:www.tangshua【关注微信公众号:wwwtangshuangnet】【原创内容,转载请注明出处】ng.net

c. 区块上报

将一次异常的场景打包为一个区块后进行上报本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】。它和批量上报不同,批量上报保证了日志的【未经授权禁止转载】著作权归作者所有,禁止商业用途转载。完整性,全面性,但会有无用信息。而区块上未经授权,禁止复制转载。未经授权,禁止复制转载。报则是针对异常本身的,确保单个异常相关的本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】日志被全部上报。

【关注微信公众号:wwwtangshua【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】ngnet】【访问 www.tangshuang.n【本文受版权保护】未经授权,禁止复制转载。et 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshu转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。ang.net

d. 用户主动提交

在界面上提供一个按钮,用户主动反馈bug原创内容,盗版必究。原创内容,盗版必究。。这有利于加强与用户的互动。

本文作者:唐霜,转载请注明出处。原创内容,盗版必究。未经授权,禁止复制转载。【关注微信公众号:wwwtangshua著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】ngnet】

或者当异常发生时,虽然对用户没有任何影响著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】,但是应用监控到了,弹出一个提示框,让用未经授权,禁止复制转载。【原创不易,请尊重版权】户选择是否愿意上传日志。这种方案适合涉及本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net用户隐私数据时。

本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.n本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。et 获取更多精彩内容】【原创不易,请尊重版权】
  即时上报 批量上报 区块上报 用户反馈
时效 立即 定时 稍延时 延时
条数 一次全部上报 一次100条 单次上报相关条目 一次1条
容量
紧急 紧急重要 不紧急 不紧急但重要 不紧急

即时上报虽然叫即时,但是其实也是通过类似【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】队列的循环任务去完成的,它主要是尽快把一【关注微信公众号:wwwtangshuangnet】【原创内容,转载请注明出处】些重要的异常提交给监控系统,好让运维人员未经授权,禁止复制转载。【原创不易,请尊重版权】发现问题,因此,它对应的紧急程度比较高。

本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshu本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.netang.net

批量上报和区块上报的区别:批量上报是一次【转载请注明来源】原创内容,盗版必究。上报一定条数,比如每2分钟上报1000条未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】,直到上报完成。而区块上报是在异常发生之本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】后,马上收集和异常相关的所有日志,查询出【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。哪些日志已经由批量上报上报过了,剔除掉,未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。把其他相关日志上传,和异常相关的这些日志【版权所有,侵权必究】【未经授权禁止转载】相对而言更重要一些,它们可以帮助尽快复原【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。异常现场,找出发生异常的根源。

【版权所有】唐霜 www.tangshu【版权所有,侵权必究】【本文受版权保护】ang.net【关注微信公众号:wwwtangshua【转载请注明来源】【访问 www.tangshuang.net 获取更多精彩内容】ngnet】未经授权,禁止复制转载。

用户提交的反馈信息,则可以慢悠悠上报上去【转载请注明来源】本文版权归作者所有,未经授权不得转载。

本文版权归作者所有,未经授权不得转载。【转载请注明来源】

为了确保上报是成功的,在上报时需要有一个【版权所有,侵权必究】本文版权归作者所有,未经授权不得转载。确认机制,由于在服务端接收到上报日志之后原创内容,盗版必究。未经授权,禁止复制转载。,并不会立即存入数据库,而是放到一个队列转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。中,因此,前后端在确保日志确实已经记录进本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】数据库这一点上需要再做一些处理。

【版权所有】唐霜 www.tangshu【原创不易,请尊重版权】【原创内容,转载请注明出处】ang.net转载请注明出处:www.tangshua本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.netng.net

著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshua著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.net 获取更多精彩内容】ng.net本文作者:唐霜,转载请注明出处。

上图展示了上报的一个大致流程,在上报时,未经授权,禁止复制转载。【本文首发于唐霜的博客】先通过hash查询,让客户端知道准备要上【版权所有】唐霜 www.tangshuang.net【本文受版权保护】报的日志集合中,是否存在已经被服务端保存著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。好的日志,如果已经存在,就将这些日志去除本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】,避免重复上报,浪费流量。

转载请注明出处:www.tangshua未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。ng.net转载请注明出处:www.tangshua【原创不易,请尊重版权】未经授权,禁止复制转载。ng.net本文作者:唐霜,转载请注明出处。

3.4 压缩上报数据

一次性上传批量数据时,必然遇到数据量大,【原创内容,转载请注明出处】转载请注明出处:www.tangshuang.net浪费流量,或者传输慢等情况,网络不好的状未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。态下,可能导致上报失败。因此,在上报之前转载请注明出处:www.tangshuang.net原创内容,盗版必究。进行数据压缩也是一种方案。

【版权所有】唐霜 www.tangshu本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。ang.net【版权所有】唐霜 www.tangshu【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】ang.net本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。

对于合并上报这种情况,一次的数据量可能要【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。十几k,对于日 pv 大的站点来说,产生【转载请注明来源】【本文首发于唐霜的博客】的流量还是很可观的。所以有必要对数据进行【转载请注明来源】著作权归作者所有,禁止商业用途转载。压缩上报。lz-string是一个非常优本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net秀的字符串压缩类库,兼容性好,代码量少,转载请注明出处:www.tangshuang.net【本文首发于唐霜的博客】压缩比高,压缩时间短,压缩率达到惊人的6【访问 www.tangshuang.net 获取更多精彩内容】【本文首发于唐霜的博客】0%。但它基于LZ78压缩,如果后端不支【原创内容,转载请注明出处】原创内容,盗版必究。持解压,可选择gzip压缩,一般而言后端本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。会默认预装gzip,因此,选择gzip压本文版权归作者所有,未经授权不得转载。【转载请注明来源】缩数据也可以,工具包pako中自带了gz【原创不易,请尊重版权】【关注微信公众号:wwwtangshuangnet】ip压缩,可以尝试使用。

【作者:唐霜】本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】

4 日志接收与存储

4.1 接入层与消息队列

一般通过提供独立的日志服务器接收客户端日转载请注明出处:www.tangshuang.net【版权所有,侵权必究】志,接收过程中,要对客户端日志内容的合法【本文首发于唐霜的博客】【原创不易,请尊重版权】性、安全性等进行甄别,防止被人攻击。而且【本文首发于唐霜的博客】【转载请注明来源】由于日志提交一般都比较频繁,多客户端同时【访问 www.tangshuang.net 获取更多精彩内容】【访问 www.tangshuang.net 获取更多精彩内容】并发的情况也常见。通过消息队列将日志信息原创内容,盗版必究。转载请注明出处:www.tangshuang.net逐一处理后写入到数据库进行保存也是比较常【转载请注明来源】【本文受版权保护】用的方案。

【访问 www.tangshuang.n【本文受版权保护】【未经授权禁止转载】et 获取更多精彩内容】原创内容,盗版必究。

【本文首发于唐霜的博客】【本文受版权保护】

上图为腾讯BetterJS的架构图,其中原创内容,盗版必究。【未经授权禁止转载】“接入层”和“推送中心”就是这里提到的接【版权所有,侵权必究】【原创内容,转载请注明出处】入层和消息队列。BetterJS将整个前【原创不易,请尊重版权】【未经授权禁止转载】端监控的各个模块进行拆分,推送中心承担了原创内容,盗版必究。本文作者:唐霜,转载请注明出处。将日志推送到存储中心进行存储和推送给其他本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。系统(例如告警系统)的角色,但我们可以把本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】接收日志阶段的队列独立出来看,在接入层和【原创内容,转载请注明出处】本文版权归作者所有,未经授权不得转载。存储层之间做一个过渡。

未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。未经授权,禁止复制转载。

4.2 日志存储系统

存储日志是一个脏活累活,但是不得不做。对【原创内容,转载请注明出处】原创内容,盗版必究。于小应用,单库单表加优化就可以应付。一个【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。成规模的应用,如果要提供更标准高效的日志未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net监控服务,常常需要在日志存储架构上下一些转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。功夫。目前业界已经有比较完备的日志存储方【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。案,主要有:Hbase系,Dremel系未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。,Lucene系等。总体而言,日志存储系转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。统主要面对的问题是数据量大,数据结构不规【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】律,写入并发高,查询需求大等。一般一套日本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】志存储系统,要解决上面这些问题,就要解决原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。写入的缓冲,存储介质按日志时间选择,为方【版权所有】唐霜 www.tangshuang.net【作者:唐霜】便快速读取而设计合理的索引系统等等。

【关注微信公众号:wwwtangshua本文版权归作者所有,未经授权不得转载。【转载请注明来源】ngnet】【原创不易,请尊重版权】

由于日志存储系统方案比较成熟,这里就不再【原创内容,转载请注明出处】【原创不易,请尊重版权】做更多讨论。

【作者:唐霜】【作者:唐霜】转载请注明出处:www.tangshua【作者:唐霜】本文作者:唐霜,转载请注明出处。ng.net

4.3 搜索

日志的最终目的是要使用,由于一般日志的体【版权所有,侵权必究】本文版权归作者所有,未经授权不得转载。量都非常大,因此,要在庞大的数据中找到需原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.net要的日志记录,需要依赖比较好的搜索引擎。本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.netSplunk是一套成熟的日志存储系统,但【未经授权禁止转载】【原创不易,请尊重版权】它是付费使用的。按照Splunk的框架,【版权所有,侵权必究】原创内容,盗版必究。Elk是Splunk的开源实现,Elk是本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。ElasticSearch、Logsta著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.netsh、Kibana的结合,ES基于Luc原创内容,盗版必究。【原创不易,请尊重版权】ene的存储、索引的搜索引擎;logst【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】ash是提供输入输出及转化处理插件的日志【转载请注明来源】【版权所有,侵权必究】标准化管道;Kibana提供可视化和查询原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】统计的用户界面。

【本文受版权保护】本文作者:唐霜,转载请注明出处。

5 日志统计与分析

一个完善的日志统计分析工具需要提供各方面【关注微信公众号:wwwtangshuangnet】【未经授权禁止转载】方便的面板,以可视化的方式给日志管理员和未经授权,禁止复制转载。未经授权,禁止复制转载。开发者反馈信息。

本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】【关注微信公众号:wwwtangshua本文版权归作者所有,未经授权不得转载。【本文受版权保护】ngnet】著作权归作者所有,禁止商业用途转载。

5.1 用户纬度

同一个用户的不同请求实际上会形成不同的s【本文首发于唐霜的博客】【本文受版权保护】tory线,因此,针对用户的一系列操作设未经授权,禁止复制转载。【作者:唐霜】计唯一的request id是有必要的。【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】同一个用户在不同终端进行操作时,也能进行【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。区分。用户在进行某个操作时的状态、权限等原创内容,盗版必究。未经授权,禁止复制转载。信息,也需要在日志系统中予以反应。

【原创内容,转载请注明出处】原创内容,盗版必究。

5.2 时间维度

一个异常是怎么发生的,需要将异常操作的前未经授权,禁止复制转载。【作者:唐霜】后story线串联起来观察。它不单单涉及本文作者:唐霜,转载请注明出处。【作者:唐霜】一个用户的一次操作,甚至不限于某一个页面【原创不易,请尊重版权】【版权所有,侵权必究】,而是一连串事件的最终结果。

本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshu著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。ang.net【原创不易,请尊重版权】

5.3 性能维度

应用运行过程中的性能情况,例如,界面加载本文作者:唐霜,转载请注明出处。原创内容,盗版必究。时间,api请求时长统计,单元计算的消耗原创内容,盗版必究。【转载请注明来源】,用户呆滞时间。

【作者:唐霜】【未经授权禁止转载】

5.4 运行环境维度

应用及服务所运行的环境情况,例如应用所在著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。的网络环境,操作系统,设备硬件信息等,服著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。务器cpu、内存状况,网络、宽带使用情况原创内容,盗版必究。【原创内容,转载请注明出处】等。

原创内容,盗版必究。未经授权,禁止复制转载。

5.4 细粒度代码追踪

异常的代码stack信息,定位到发生异常【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net的代码位置和异常堆栈。

【作者:唐霜】【版权所有】唐霜 www.tangshu【本文受版权保护】著作权归作者所有,禁止商业用途转载。ang.net

5.6 场景回溯

通过将异常相关的用户日志连接起来,以动态转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。的效果输出发生异常的过程。

【本文受版权保护】【本文受版权保护】【作者:唐霜】

6 监控与通知

对异常进行统计和分析只是基础,而在发现异本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net常时可以推送和告警,甚至做到自动处理,才【作者:唐霜】【版权所有】唐霜 www.tangshuang.net是一个异常监控系统应该具备的能力。

【版权所有,侵权必究】【原创不易,请尊重版权】【关注微信公众号:wwwtangshua【转载请注明来源】未经授权,禁止复制转载。ngnet】原创内容,盗版必究。

6.1 自定义触发条件的告警

a. 监控实现

著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】【版权所有,侵权必究】

当日志信息进入接入层时,就可以触发监控逻【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。辑。当日志信息中存在较为高级别的异常时,转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net也可以立即出发告警。告警消息队列和日志入【原创不易,请尊重版权】【原创内容,转载请注明出处】库队列可以分开来管理,实现并行。

【访问 www.tangshuang.n本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】et 获取更多精彩内容】【作者:唐霜】原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。

对入库日志信息进行统计,对异常信息进行告【版权所有】唐霜 www.tangshuang.net【作者:唐霜】警。对监控异常进行响应。所谓监控异常,是未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】指:有规律的异常一般而言都比较让人放心,著作权归作者所有,禁止商业用途转载。【转载请注明来源】比较麻烦的是突然之间的异常。例如在某一时本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】段突然频繁接收到D级异常,虽然D级异常是【本文首发于唐霜的博客】【本文首发于唐霜的博客】不紧急一般重要,但是当监控本身发生异常时转载请注明出处:www.tangshuang.net【关注微信公众号:wwwtangshuangnet】,就要提高警惕。

【未经授权禁止转载】【版权所有,侵权必究】未经授权,禁止复制转载。【作者:唐霜】

b. 自定义触发条件

【作者:唐霜】【访问 www.tangshuang.n【未经授权禁止转载】【原创内容,转载请注明出处】et 获取更多精彩内容】

除了系统开发时配置的默认告警条件,还应该【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。提供给日志管理员可配置的自定义触发条件。

【关注微信公众号:wwwtangshua【版权所有,侵权必究】【作者:唐霜】ngnet】【本文受版权保护】
  • 日志内含有什么内容时
  • 原创内容,盗版必究。【关注微信公众号:wwwtangshua【版权所有,侵权必究】【未经授权禁止转载】ngnet】
  • 日志统计达到什么度、量时
  • 本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】【版权所有,侵权必究】
  • 向符合什么条件的用户告警
  • 转载请注明出处:www.tangshua原创内容,盗版必究。【未经授权禁止转载】ng.net【作者:唐霜】【原创不易,请尊重版权】【关注微信公众号:wwwtangshua未经授权,禁止复制转载。【关注微信公众号:wwwtangshuangnet】ngnet】

6.2 推送渠道

可选择的途径有很多,例如邮件、短信、微信【转载请注明来源】【转载请注明来源】、电话。

著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。

6.3 推送频率

针对不同级别的告警,推送的频率也可以进行【作者:唐霜】【关注微信公众号:wwwtangshuangnet】设定。低风险告警可以以报告的形式一天推送【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。一次,高风险告警10分钟循环推送,直到处【原创不易,请尊重版权】【转载请注明来源】理人手动关闭告警开关。

转载请注明出处:www.tangshua【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。ng.net【版权所有】唐霜 www.tangshu本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.netang.net【未经授权禁止转载】【本文受版权保护】

6.4 自动报表

对于日志统计信息的推送,可以做到自动生成本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net日报、周报、月报、年报并邮件发送给相关群著作权归作者所有,禁止商业用途转载。【关注微信公众号:wwwtangshuangnet】组。

【本文受版权保护】本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。【原创不易,请尊重版权】

6.5 自动产生bug工单

当异常发生时,系统可以调用工单系统API【本文受版权保护】【版权所有,侵权必究】实现自动生成bug单,工单关闭后反馈给监【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。控系统,形成对异常处理的追踪信息进行记录原创内容,盗版必究。未经授权,禁止复制转载。,在报告中予以展示。

转载请注明出处:www.tangshua【原创内容,转载请注明出处】【本文受版权保护】ng.net【原创不易,请尊重版权】【本文受版权保护】【关注微信公众号:wwwtangshua未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。ngnet】

7 修复异常

7.1 sourcemap

前端代码大部分情况都是经过压缩后发布的,【原创不易,请尊重版权】【原创不易,请尊重版权】上报的stack信息需要还原为源码信息,【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net才能快速定位源码进行修改。

【访问 www.tangshuang.n本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.netet 获取更多精彩内容】转载请注明出处:www.tangshua转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】ng.net【访问 www.tangshuang.n本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshuangnet】et 获取更多精彩内容】

发布时,只部署js脚本到服务器上,将so著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】urcemap文件上传到监控系统,在监控【版权所有】唐霜 www.tangshuang.net【关注微信公众号:wwwtangshuangnet】系统中展示stack信息时,利用sour本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.netcemap文件对stack信息进行解码,转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。得到源码中的具体信息。

原创内容,盗版必究。【本文首发于唐霜的博客】

但是这里有一个问题,就是sourcema著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.netp必须和正式环境的版本对应,还必须和gi原创内容,盗版必究。【本文首发于唐霜的博客】t中的某个commit节点对应,这样才能【本文受版权保护】【原创不易,请尊重版权】保证在查异常的时候可以正确利用stack【未经授权禁止转载】【本文受版权保护】信息,找到出问题所在版本的代码。这些可以【版权所有,侵权必究】【本文受版权保护】通过建立CI任务,在集成化部署中增加一个【本文首发于唐霜的博客】【原创内容,转载请注明出处】部署流程,以实现这一环节。

【本文受版权保护】本文作者:唐霜,转载请注明出处。【本文受版权保护】

7.2 从告警到预警

预警的本质是,预设可能出现异常的条件,当转载请注明出处:www.tangshuang.net原创内容,盗版必究。触发该条件时异常并没有真实发生,因此,可【本文受版权保护】【转载请注明来源】以赶在异常发生之前对用户行为进行检查,及【作者:唐霜】著作权归作者所有,禁止商业用途转载。时修复,避免异常或异常扩大。

【版权所有,侵权必究】转载请注明出处:www.tangshua【原创不易,请尊重版权】【原创不易,请尊重版权】ng.net

怎么做呢?其实就是一个统计聚类的过程。将本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】历史中发生异常的情况进行统计,从时间、地本文版权归作者所有,未经授权不得转载。【转载请注明来源】域、用户等不同维度加以统计,找出规律,并【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。将这些规律通过算法自动加入到预警条件中,【原创不易,请尊重版权】原创内容,盗版必究。当下次触发时,及时预警。

【作者:唐霜】【关注微信公众号:wwwtangshua【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.netngnet】未经授权,禁止复制转载。转载请注明出处:www.tangshua【版权所有,侵权必究】转载请注明出处:www.tangshuang.netng.net

7.3 智能修复

自动修复错误。例如,前端要求接口返回数值【作者:唐霜】本文作者:唐霜,转载请注明出处。,但接口返回了数值型的字符串,那么可以有本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】一种机制,监控系统发送正确数据类型模型给原创内容,盗版必究。未经授权,禁止复制转载。后端,后端在返回数据时,根据该模型控制每【未经授权禁止转载】【访问 www.tangshuang.net 获取更多精彩内容】个字段的类型。

【原创内容,转载请注明出处】【未经授权禁止转载】

8 异常测试

8.1 主动异常测试

撰写异常用例,在自动化测试系统中,加入异本文作者:唐霜,转载请注明出处。【作者:唐霜】常测试用户。在测试或运行过程中,每发现一本文作者:唐霜,转载请注明出处。原创内容,盗版必究。个异常,就将它加入到原有的异常用例列表中本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshuangnet】

【本文受版权保护】转载请注明出处:www.tangshua【未经授权禁止转载】【作者:唐霜】ng.net

8.2 随机异常测试

模拟真实环境,在模拟器中模拟真实用户的随【作者:唐霜】【版权所有】唐霜 www.tangshuang.net机操作,利用自动化脚本产生随机操作动作代原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。码,并执行。

本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】

定义异常,例如弹出某个弹出框,包含特定内转载请注明出处:www.tangshuang.net原创内容,盗版必究。容时,就是异常。将这些测试结果记录下来,转载请注明出处:www.tangshuang.net原创内容,盗版必究。再聚类统计分析,对防御异常也很有帮助。

【版权所有】唐霜 www.tangshu本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.netang.net未经授权,禁止复制转载。【未经授权禁止转载】【本文受版权保护】

9 部署

9.1 多客户端

一个用户在不同终端上登录,或者一个用户在【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。登录前和登录后的状态。通过特定算法生成r【原创内容,转载请注明出处】【原创内容,转载请注明出处】equestID,通过该requestI【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。d可以确定某个用户在独立客户端上的一系列著作权归作者所有,禁止商业用途转载。【版权所有,侵权必究】操作,根据日志时序,可以梳理出用户产生异【原创不易,请尊重版权】【作者:唐霜】常的具体路径。

【访问 www.tangshuang.n【本文首发于唐霜的博客】【原创不易,请尊重版权】et 获取更多精彩内容】【本文受版权保护】转载请注明出处:www.tangshua【版权所有】唐霜 www.tangshuang.net【关注微信公众号:wwwtangshuangnet】ng.net

9.2 集成便捷性

前端写成包,全局引用即可完成大部分日志记著作权归作者所有,禁止商业用途转载。【本文受版权保护】录、存储和上报。在特殊逻辑里面,可以调用【关注微信公众号:wwwtangshuangnet】【本文受版权保护】特定方法记录日志。

【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】

后端与应用本身的业务代码解耦,可以做成独本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】立的服务,通过接口和第三方应用交互。利用【转载请注明来源】本文版权归作者所有,未经授权不得转载。集成部署,可以将系统随时进行扩容、移植等【本文首发于唐霜的博客】【访问 www.tangshuang.net 获取更多精彩内容】操作。

【关注微信公众号:wwwtangshua本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。ngnet】本文作者:唐霜,转载请注明出处。

9.3 管理系统的可扩展

整套系统可扩展,不仅服务单应用,可支持多【原创内容,转载请注明出处】【访问 www.tangshuang.net 获取更多精彩内容】个应用同时运行。同一个团队下的所有应用都【本文首发于唐霜的博客】【作者:唐霜】可以利用同一个平台进行管理。

【原创不易,请尊重版权】【版权所有】唐霜 www.tangshu本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。ang.net

9.4 日志系统权限

不同的人在访问日志系统时权限不同,一个访【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】问者只能查看自己相关的应用,有些统计数据【版权所有,侵权必究】未经授权,禁止复制转载。如果比较敏感,可以单独设置权限,敏感数据本文版权归作者所有,未经授权不得转载。【作者:唐霜】可脱敏。

【访问 www.tangshuang.n【转载请注明来源】【版权所有】唐霜 www.tangshuang.netet 获取更多精彩内容】未经授权,禁止复制转载。

10 其他

10.1 性能监控

异常监控主要针对代码级别的报错,但也应该本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】关注性能异常。性能监控主要包括:

本文版权归作者所有,未经授权不得转载。【作者:唐霜】
  • 运行时性能:文件级、模块级、函数级、算法著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.net
  • 本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】
  • 网络请求速率
  • 著作权归作者所有,禁止商业用途转载。【转载请注明来源】【原创不易,请尊重版权】
  • 系统性能
  • 转载请注明出处:www.tangshua【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。ng.net本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。

10.2 API Monitor

后端API对前端的影响也非常大,虽然前端【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。代码也控制逻辑,但是后端返回的数据是基础【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。,因此对API的监控可以分为:

【作者:唐霜】【转载请注明来源】本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshu转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。ang.net
  • 稳定性监控
  • 【作者:唐霜】【原创不易,请尊重版权】【本文受版权保护】【版权所有,侵权必究】
  • 数据格式和类型
  • 本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshua本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】ngnet】
  • 报错监控
  • 【作者:唐霜】原创内容,盗版必究。未经授权,禁止复制转载。
  • 数据准确性监控
  • 转载请注明出处:www.tangshua转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。ng.net【原创内容,转载请注明出处】【版权所有】唐霜 www.tangshu【作者:唐霜】【转载请注明来源】ang.net转载请注明出处:www.tangshua【版权所有】唐霜 www.tangshuang.net【未经授权禁止转载】ng.net

10.3 数据脱敏

敏感数据不被日志系统采集。由于日志系统的【原创内容,转载请注明出处】未经授权,禁止复制转载。保存是比较开放的,虽然里面的数据很重要,【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。但是在存储上大部分日志系统都不是保密级,【转载请注明来源】【转载请注明来源】因此,如果应用涉及了敏感数据,最好做到:

著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】【本文受版权保护】
  • 独立部署,不和其他应用共享监控系统
  • 【本文首发于唐霜的博客】【关注微信公众号:wwwtangshua本文版权归作者所有,未经授权不得转载。【转载请注明来源】ngnet】未经授权,禁止复制转载。【原创不易,请尊重版权】
  • 不采集具体数据,只采集用户操作数据,在重【原创内容,转载请注明出处】【原创不易,请尊重版权】现时,通过日志信息可以取出数据api结果【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.net来展示
  • 【原创内容,转载请注明出处】转载请注明出处:www.tangshua【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.netng.net本文版权归作者所有,未经授权不得转载。
  • 日志加密,做到软硬件层面的加密防护
  • 【关注微信公众号:wwwtangshua未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。ngnet】转载请注明出处:www.tangshua本文作者:唐霜,转载请注明出处。【本文受版权保护】ng.net
  • 必要时,可采集具体数据的ID用于调试,场【版权所有,侵权必究】本文版权归作者所有,未经授权不得转载。景重现时,用mock数据替代,mock数【作者:唐霜】转载请注明出处:www.tangshuang.net据可由后端采用假的数据源生成
  • 本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。
  • 对敏感数据进行混淆
  • 【本文受版权保护】【访问 www.tangshuang.n转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.netet 获取更多精彩内容】

结语

本文主要是对前端异常监控的整体框架进行了本文作者:唐霜,转载请注明出处。【本文受版权保护】研究,没有涉及到具体的技术实现,涉及前端【本文受版权保护】【访问 www.tangshuang.net 获取更多精彩内容】部分和后台部分以及与整个问题相关的一些知【访问 www.tangshuang.net 获取更多精彩内容】【转载请注明来源】识点,主要关注前端部分,它和后端的监控有【本文受版权保护】【原创不易,请尊重版权】重叠部分也有分支部分,需要在一个项目中不【本文受版权保护】未经授权,禁止复制转载。断实践,总结出项目本身的监控需求和策略。

转载请注明出处:www.tangshua【作者:唐霜】本文作者:唐霜,转载请注明出处。ng.net原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】

 

【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。

这篇文章是我发在CDC博客上的公开文,为转载请注明出处:www.tangshuang.net【未经授权禁止转载】了作为记录,也保存在自己的博客一份。
【访问 www.tangshuang.n未经授权,禁止复制转载。【作者:唐霜】et 获取更多精彩内容】 查看原文:https://cdc.te【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。ncent.com/2018/09/13【作者:唐霜】【本文受版权保护】/frontend-exception-【原创内容,转载请注明出处】本文版权归作者所有,未经授权不得转载。monitor-research/

【本文首发于唐霜的博客】未经授权,禁止复制转载。【版权所有】唐霜 www.tangshu【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。ang.net

2018-10-02 6964

为价值买单,打赏一杯咖啡

本文价值69.64RMB