前言
本文主要介绍的就是我的开源项目,前端监控 sdk:heimdallr-sdk。篇幅有限,因此本篇文章仅仅是对 sdk 主要模块的简单介绍,后续考虑出个系列,欢迎关注;同时,项目也已开源,欢迎 star ⭐
背景
无论是初创的小公司,还是互联网大厂。只要是能赚钱的业务,那它的前端项目必定是需要监控的。
什么?你们的项目直接果奔?不需要任何监控? 那没事了。
要保持微笑
但是,有木有一种可能,你们一路果奔的前端项目,在不久的将来,出现了本不该出现的 bug,关键这个 bug 还不是你们内部自己发现的,而是客户发现的;然后,你们的线上 bug 数就喜加一了。在你吭哧吭哧地排查问题的时候,你还得反复问客户 “您是怎么操作的?我可以远程看一下吗?(微笑)”,有的客户愿意告诉你,有的客户只会礼貌问候你或者问候一线
开心
不出意外的话,你今天、明天、大后天,甚至下周、下下周,都会陷入深深的自我怀疑中
令人头秃
“为什么,明明没问题啊,怎么回事”
这个时候你就需要一款强大的前端监控了
前端监控已经不是个新鲜玩意儿了,市面上也已经有成熟的监控系统了,强大如 Sentry,但是,它们有一个共同点,那就是
贵
当然贵是相对小项目而言,对于大项目更关注的是安全性以及更多的定制化
同时作为使用方,一旦监控系统出了问题,就会显得比较被动
因此,不如自己动手撸一个前端监控
成品
直接上菜 heimdallr-sdk
一款轻量级、插件化的前端监控 sdk
-
能够不侵入业务代码并及时上报系统状态(报错、使用情况等)。
-
为了防止功能过剩,避免引入过多的包,使得整个项目过于臃肿;除了基座是必须引入的,其余 sdk 的功能都将以插件的方式按需引入。
-
sdk 已经能够覆盖大部分场景,不说全栈吧,至少能覆盖常见的前端场景了,如:浏览器、小程序。
-
采用了插件化架构,所以容易扩展,允许引入自定义开发的插件,扩展 sdk 的能力
-
sdk 的引入不需要复杂的配置,初始化时提供一下应用名称、监控服务接口地址即可,其余配置按需调整,配置项少。
-
提供了 监控管理后台 与 监控服务,可以使用 cli 工具完成快速部署,支持二开
-
完全开源,不收费
架构
为了实现功能的按需引入与可扩展性,整体采用插件化架构
插件化
如上图,不同端继承自 Core,每个端各自有多种功能的插件,根据需要引入即可
为了能统一工作流,降低项目基建成本,提高团队协作性;项目采用目前主流的 monorepo
方式进行代码管理,即把多个 packages 放在同一仓库中,插件也将作为独立的子包放在 packages 下,统一编译、调试、发布
monorepo
整体架构如下图所示
framework
大致分为:应用接入层
、数据存储层
、数据服务层
、监控平台层
应用接入层即 sdk 的核心部分,负责收集应用信息并上报
数据存储使用的是 Mysql,为了方便操作数据库,额外引入了个 ORM 库
数据服务层、监控平台层后文细说
数据流
这里我实现了两种模式的服务
单服务
该模式下日志的上报、写入,与监控后台日志的读取在同一 node 服务中,如下图
node 服务既负责接收日志,也负责读写数据库