家喻户晓,前端监控包含了异样监控、行为监控、性能监控等等,且每种业务对于须要监控的内容既有共通的异样、性能监控等,又有自定义的用户行为、用户画像等内容须要收集。
罕用的监控平台已有许多,sentry、fundebug、frontjs 等,他们从异样监控、数据分析到告警告诉等一系列性能都很成熟。
那么为什么不选用他们还要本人搞一套进去呢?
其实在局部状况下上述平台根本能够满足需要,无非是应用体验或是性能上的细微差别。
然而在另一部分场景,咱们可能须要非凡场景的监控,比方某个模块、某个页面的曝光率,或是某个页面出现异常须要失去用户的实在反馈,这些非凡的场景产生的数据没有一个对立的形式去收集、解决、剖析。
所以不同于以往的监控工具,咱们心愿打造一个开源的根底工具,基于扩大 / 插件的模式扩大,以反对各式各样的监控需要。
为了达到目标,咱们心愿通过相似微内核架构的设计,借以扩大机制实现,从初始化、创立事件、上报三大流程动手,三个阶段皆可自定义批改,以此反对各种监控需要。
外围
首先咱们心愿设计一个外围的数据收集程序 @ohbug/core,它须要具备参数的验证、扩大的加载、数据的封装、上报数据这么几个性能。
这个外围程序不单单能够收集异样数据、收集性能信息,还能够收集用户行为、用户身份甚至你所想要的任何信息。
上面是外围工作的整个生命周期。
扩大
Ohbug 的要害是扩大机制,所以扩大必须能够很简略的与少数数据收集工具联合。例如 perfume.js,它是一个轻量的 Web 性能监控工具,咱们对它进行了简略的封装,短短十几行代码便可实现一个扩大(@ohbug/extension-perfume)。
浏览器扩大
咱们为浏览器环境整合了一套浏览器扩大 @ohbug/browser,它集成了异样监控(JavaScript 代码谬误 & 资源谬误、没有被 reject
解决的 Promise
谬误、AJAX/Fetch
谬误、Websocket
谬误)、行为监控(路由切换、点击事件、console 等信息)、用户画像设置、自定义数据收集等性能,不便疾速接入业务。
框架扩大
框架层面的扩大均以 @ohbug/browser 为根底,除了浏览器扩大的性能外新增了一些与框架相干的信息,相当于对 @ohbug/browser 的进一步扩大。
React
@ohbug/react 应用 componentDidCatch
生命周期封装了一个谬误边界组件,用以捕捉在子组件树中任何中央的 JavaScript 异样,并且能够展现备用 UI 而非让组件树解体。
你能够通过为组件传入 FallbackComponent
prop 来定义备用 UI。
import React from 'react'
import Ohbug from '@ohbug/browser'
import OhbugReact from '@ohbug/react'
const client = Ohbug.init({apiKey: 'YOUR_API_KEY'})
const OhbugErrorBoundary = client.use(OhbugReact, React)
function App() {
return (
<div className="App">
<OhbugErrorBoundary>
<HelloWorld />
</OhbugErrorBoundary>
</div>
)
}
Vue
@ohbug/vue 应用 Vue.config.errorHandler
函数处理错误,除了错误信息外还可获取到 Vue 实例相干的数据。
import Vue from 'vue'
import Ohbug from '@ohbug/browser'
import OhbugVue from '@ohbug/vue'
const client = Ohbug.init({apiKey: 'YOUR_API_KEY'})
client.use(OhbugVue, Vue)
更多扩大
- @ohbug/extension-perfume: 封装 perfume.js,用于收集性能信息。
- @ohbug/extension-rrweb: 封装 rrweb,用于“录屏”。
- @ohbug/extension-uuid: 扩大
Event.user
减少UUID
标识。
举个栗子,当我须要对某个我的项目做简略的异样监控,只须要接入 @ohbug/browser。
当然如果你的我的项目是基于 Vue 实现的,并且想收集更多 Vue 实例相干的异样数据,那么只须要多写一行代码
client.use(OhbugVue, Vue)
。等等我还想收集用户的性能信息,那就再多写一行
client.use(OhbugExtensionPerfume)
等等我还想给用户加上惟一标识好辨别,那就在多写一行
client.use(OhbugExtensionUUID)
等等 ……
创立扩大
如果你有本人独特的需要,能够依据须要自行创立扩大。创立一个扩大非常简单:
yarn add @ohbug/core
import {createExtension} from '@ohbug/core'
export const extension = createExtension({
name: 'ExtensionName',
init: () => {// 这里初始化数据收集的程序}
})
批改事件
除了被动收集信息,扩大也可用于对已收集的事件进行批改。例如这个扩大 @ohbug/extension-uuid,它可为每一条事件新增一个 UUID
的字段,用于用户身份的辨认,它的代码大略如下:
import {createExtension} from '@ohbug/core'
import {getUUID} from './uuid'
export const extension = createExtension({
name: 'OhbugExtensionUUID',
created: (event) => {const uuid = getUUID()
event.setUser({uuid,})
return event
},
})
开源
还有许多有用的货色能够作为扩大,咱们也在为丰盛扩大欠缺外围模块而致力。
一个人的力量无限,咱们拥抱开源一方面也是为了集中力量办事,心愿有更多开发者退出进来,欠缺 Ohbug,丰盛扩大市场。
结语
上述内容所提及的内容均以开源 Ohbug,更多文档可见 Ohbug Docs。后续会分享对于前端监控的内容。
关注 Ohbug 公众号