浅谈前端异常采集定位监控

科技   2024-09-09 07:00   广东  

unsetunset一、监控能做什么?unsetunset

  • 发现问题,第一时间发现提前预警风险
  • 定位问题,系统复杂,介入排查人员多上下游复杂,提高定位效率
  • 解决问题,直观确认问题解决,避免引发二次问题
img

unsetunset二、如何从⽤户感知上监控?unsetunset

  1. 流畅:

APP/PC启动速度、操作反馈、页面跳转都是反应流畅度体验的地方;

手机性能可从硬件监控和软件性能两个维度来划分

动态容器监控、分阶段测速、页面加载时长是常见用来判断软件性能的方法

端到端请求耗时可从网络质量、接入耗时、业务耗时三个维度来划分

  • 网络质量:理应从地区、运营商、网络类型、连接类型等去考虑;
  • 接入耗时:可根据长链接监控来判断性能
  • 业务耗时:从本地业务耗时跟外部依赖耗时多方面来判断,其中本地业务耗时需要考虑到硬件性能(可使用系统监控)、软件性能(可使用性能监控)来判断,而外部依赖耗时则需要考虑到网络耗时(可使用网络监控)、服务性能(可使用RPC/Pass监控)
  1. 精准:

精准是指获取到的信息准确度,是用户想要的信息;

可从DNS劫持率、CDN可用性、请求成功率三个维度来划分

判断请求成功率时需要观测网络成功率和业务成功率

  • 本地业务成功率:需根据业务指标和错误异常来判断
  • 外部调用成功率:需根据端到端访问成功率、端到端访问异常数来判断
  1. 稳定:

稳定性指用户体验稳定,随时随地都可以用;

可从崩溃日志、异常日志、端到端请求、PV监控、自定义指标来观察稳定性数据

可利用业务指标监控和错误异常监控来判断端到端请求数据

unsetunset三、前端异常类型unsetunset

  1. 请求异常:

如:静态资源异常、API 异常

img
  1. JS运行异常:

如:JS异常、自定义异常

  1. 环境异常:

如:小程序框架、容器框架异常

  1. 业务异常:

如:业务指标异常

unsetunset四、前端异常采集与定位unsetunset

1、请求异常采集⽅法-静态资源异常:

借助于error事件,这个事件既可以静态资源加载出错,也可以监听js执行过程中的错误

javascript 代码解读复制代码window.addEventListener('error', (err) => {

  // 说明是资源加载报错

  if (err.target && (err.target.src || err.target.href)) {

    const log = {

      type'resourceError',

      fileName:  err.target.src || err.target.href, // 哪个资源加载出错

      tagName: err.target.tagName

    }

    console.log(log) // 进行上报

  } else {

    // js 执行报错

  }

}, true)

2、Ajax 请求原理与采集方法:

创建一个XMLHttpRequest对象,通过XMLHttpRequest向服务器发送请求,请求发送后继续响应用户的界面交互,只有等到请求真正从服务器返回的时候才调用callback()函数,对响应数据进行处理。

XMLHttpRequest是ajax的核心机制,它是IE5中首先引入的,是一种支持异步请求的技术。

img
  • 自动化测试工具chromedriver进行采集
  • 通过抓包找到网页发送Ajax发送请求并返回的数据

3、 JS 异常采集⽅法:

  • 可使用sentry进行监控,sentry在异常错误捕获会通过onError和onunhandledrejection

(点我了解unhandledrejection)两个方法进行监听;

  • try/catch,Js中处理异常的一种模式,try用于可能会发生错误的代码,catch对错误的处理;
  • Promise异常捕获,使用unhandledrejection事件;
javascript 代码解读复制代码window.addEventListener("unhandledrejection", e => {

//throw,用来抛出一个用户自定义的异常,执行将被停止。

  throw e.reason

});
  • 使用Vue.config.errorHandler、react-error-catch捕获异常等;

还有很多其他方法,大家可以多补充交流~

4、 小程序 异常采集方法:

  • 微信小程序生命周期里提供了onError函数,可以通过在onError里收集异常信息;
javascript 代码解读复制代码App({ // 监听错误 

  onErrorfunction (err// 上报错误 

    wx.request({

     url"https://url"// 自行定义报告服务器 

     method"POST"

     errMsg: err 

    }) 

  } 

})
  • 使用小程序的实时日志,在小程序管理后台-运维中心-实时日志即可查看异常日志;

unsetunset五、什么是APM?unsetunset

APM 的全称是 Application Performance Management(应用性能管理),对关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本。

apm 有什么用?

中台、微服务、云原生架构的流行,应用系统变得越来越难管理,终端用户的一次请求往往需要涉及到多个服务,因此服务性能监控和问题排查就变得异常的复杂。不同的服务可能由不同国家,不同团队,和不同编程语言来实现,服务可能部署在成千上万台服务器,跨越不同机房,不同数据中心。

因此,就需要一个可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这就是APM系统。

  1. 从用户的角度来说:可以保证为用户提供高质量的服务。
  2. 从企业的角度来说:可以为企业降低IT的总成本。

监控 与可观测性的区别?

监控和可观测性是相互依赖的不同概念

  1. 监控告诉我们系统的哪些部分是⼯作的,可观测性告诉我们那⾥为什么不⼯作了
  2. 可观测性是监控的超集
  3. 监控侧重宏观,可观测包括微观能⼒
img

可观测三大支柱:

1、Metrics(指标):

指标是在⼀段时间内测量的数值,包括特定属性,例如时间戳、名称、KPI 和值。

与⽇志不同,指标在默认情况下是结构化的,这使得查询和优化存储变得更加容易,能够将它们保留更⻓时间。

2、Logging(日志):

⽇志是在特定时间发⽣的事件的⽂本记录,包括说明事件发⽣时间。

⽇志有三种格式:纯⽂本、结构化和⼆进制。纯⽂本是最常⻅的,但结构化⽇志⸺包括额外的数据和元数据并且更容易查询⸺正变得越来越流⾏。

当系统出现问题时,⽇志通常也是⾸先查看的地⽅。

3、Tracing(跟踪):

跟踪表示请求通过分布式系统的端到端旅程,每个跟踪都包含⼀个或多个跨度。

通过查看跟踪,可以通过分布式系统跟踪其进程并确定瓶颈或故障的原因。

img

unsetunset六、主流框架介绍:unsetunset

  1. Sentry(sentry.io/welcome/):

这是每个前端开发人员都很熟悉的监控工具了,Sentry 是一个开源的实时错误追踪系统,可以帮助开发者实时监控并修复异常问题。

Sentry 分为服务端和客户端 SDK。

  • 服务端可以直接使用官方提供的在线服务,也可以本地自行搭建;
  • 客户端提供了多种主流语言和框架的支持,例如:React、Angular、Node。同时它可提供了和其他流行服务集成的方案,例如 GitHub、GitLab、bitbuck等。
  1. Webfunny(www.webfunny.cn/):

支持项目:H5、微信小程序、uni-app

含有监控错误的功能,可以支持千万级别日PV量,可以远程调试、性能分析,也可以docker私有化部署(免费),业务代码加密过,较轻量。

  1. Prometheus(prometheus.io):

Prometheus 是一套开源的系统监控报警框架,可以算是容器化必备监控软件。

目前很多大厂都在用prometheus 主要语言是GO;Prometheus 的生态系统包括多个组件,因此部署非常方便,而这些组件大部分都是可选的。

img
  1. Elastic(www.elastic.co/cn/)

Elastic功能涵盖监控、日志和数据可视化。

它由 ElasticSearch, Logstash, Kibana 三部分组成。其中,Elasticsearch 负责搜索和分析,Logstash 是日志聚积器,而 Kibana则提供华丽的可视化仪表盘。

国内大数据互联网公司都采用ELK做日志采集。

img
  1. Skywalking(skywalking.apache.org)

Skywalking是由国内开源爱好者开源并提交到Apache孵化器的产品,支持非侵入式埋点。

是一款基于分布式跟踪的应用程序性能监控系统,主要语言是Java。

Skywalking已经是一个比较完整的APM解决方案了,如果公司体量不是很大,建议使用。

img

6、open-falcon(open-falcon.org)

小米开源的企业级监控工具,用 Go 语言开发而成,包括小米、滴滴、美团等在内的互联网公司都在使用它,是一款灵活、可扩展并且高性能的监控方案。

主要语言是GO跟Python,用于做服务器端监控是一个不错的选择。

作者:radawn 

链接:https://juejin.cn/post/7197075558940622907


加我微信,拉你进前端进阶、面试交流群,互相监督学习进步等!

❤️ 看完三件事

如果你觉得这篇内容对你挺有启发,我想邀请你帮我三个小忙:

  1. 点个「在看」,让更多的人也能看到这篇内容(喜欢不点在看,都是耍流氓 -_-)

  2. 关注我的博客 https://github.com/qappleh/Interview,让我们成为长期关系

  3. 关注公众号「深圳湾码农」,持续为你推送精选好文,回复「加群」加入面试互助交流群

点一下,代码无 Bug

深圳湾码农
分享大前端最新技术、BAT大厂面试题、程序员轶事、职场成长等,你想要的这里都有.
 最新文章