多端小程序监控方案

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 【第24期】线上保障专题
2. 【第4讲】小程序监控方案 分享嘉宾:刘敏-前端资深工程师
3. 目录 1. 业务背景 & 痛点 2. 业内小程序监控现状 3. 奥创小程序监控平台 4. 小程序监控SDK实现 5. 应用接入实践 6. 未来规划 分享人:余意
4. 业务背景 微信 百度 支付宝 QQ 字节 京东 360 2019年 首个微信小程序上线 各大产商纷纷发布了自己的 小程序平台
5. 一次线上问题定位分析
6. 一次线上问题定位分析 1 测试尝试复现 2 3 4 排查服务日志 微信小程序监控后台 手动打点上报 try { ... var json=‘{“content":"品牌::宝马\n规车 点击多个帖子 } catch (error) { 型::宝马 1系\n行驶里程::8万公里\n”}’; 无法复现 使用不同手机 reportMonitor({ url, 无异常日志 json体含有特殊字符 联系用户 data, error }) 存在JSON.parse异常 }
7. 复盘 由于平台、系统、机型、版本的兼容等问题,小程序出现线上问题排查困难! • 线上白屏加载不出来数据是怎么回事? • 线上代码质量如何,是否有bug? • 线上出现问题,如何快速发现并解决? • 对于多端小程序,如何更有效监控?
8. 业内小程序监控现状 小程序平台 js异常 http接口监控 用户行为记录 告警 微信 有 有统计,无详情 无 小程序助手 百度 有 (只有状态码) 无 无 头条 无 无 无 无 支付宝 有 有 无 360 有 有 无 邮件 京东 未知 未知 未知 未知 短信,邮件 分享人:余意 各平台监控能力不一致,考虑借助第三方监控平台的能力
9. 业内小程序监控现状 平台 脚本 网络 资源 下载 告警 平台 兼容 性能 访问 用户 行为 控制台 费用 Fundebug ✔ ✔ ✔ ✔ 微信 支付宝 无 ✔ 无 159/M FrontJS ✔ ✔ ✔ ✔ 微信 ✔ 无 ✔ 899/M 多平台支持不满足业务场景 + 费用问题 -> 自 研
10. 奥创小程序监控平台_首页
11. 奥创小程序监控平台_列表 次数 错误类型 载体版本号 SDK版本 环境 时间
12. 奥创小程序监控平台_详情
13. 奥创小程序监控平台_系统架构 应用接入 数据清洗与存储 Kafka 各端SDK 采集异常 并上报 日志 平台 接收 数据服务 首页 ES Node Kafka 展示交互 MongoDB 定时任务 离线任务 日志分析 监控告警 列表 详情
14. SDK采集思路 小程序主要开发语言:JavaScript 小程序与普通网页开发的区别: - 小程序中渲染线程和脚本线程独立 - 两大运行环境:IOS 和 Android 的微信客户端
15. SDK采集思路 SDK
16. SDK采集思路 程序注册 页面注册 API调用
17. API劫持方案
18. API劫持方案
19. API劫持方案
20. SDK业务架构
21. SDK上报模型 公共信息: 1. 系统信息(宿主版本、小程序基础库版本 、设备型号、设备品牌) 2. 用户信息 3. 网络状态 4. 场景值 异常信息: 1. JS异常:错误类型、堆栈信息 2. 接口日志:接口地址、状态码、异常响应信息 3. 资源异常 4. 性能日志: [App纬度] 小程序初始化耗时、启动耗时 [Page纬度] 页面加载、显示、渲染耗时 5. 行为轨迹: 页面轨迹、函数调用轨迹、接口调用
22. 公共信息采集_常规思路 1. 用户信息获取: 3. 网络状态获取: wx.getUserInfo() wx.getNetworkType() 2. 系统信息获取: 4. 场景信息获取: wx.getSystemInfoSync() App.onLaunch()
23. 公共信息采集_多端兼容思路 const mp = MP.instance(); // 单例模式 用户信息获取: ctx.getUserInfo() 系统信息获取: ctx.getSystemInfoSync() 网络状态获取: ctx.getNetworkType() 场景信息获取: App.onLaunch() -> mp.userInfo; -> mp.systemInfo; -> mp.networkInfo; -> mp.sceneInfo;
24. 公共信息采集_多端兼容思路 当前页面路径信息获取: 其他端小程序: getCurrentPages() App.onLaunch: res 360小程序:
25. 公共信息采集_上报内容
26. 异常采集方案_多场景兼容 • 脚本异常 • 接口异常 • 资源异常 • … 分享人:余意
27. 脚本异常_常规思路 错误类型 类型错误 示例 a.b.toLowerCase 引用错误 语法错误 越界错误 URI 不正确 UnhandledRejection a() function = 5 [].length = -5; decodeURI("%"); … ReferenceError: a is not defined SyntaxError: Unexpected token RangeError: Invalid array length URIError: URI malformed UnhandledRejection 经常 偶尔 较少 较少 经常 TypeError: Cannot 错误信息 read property 'toLowerCase' of undefined 发生频次 捕获方式 经常 App.onError App.onUnhandledRejection (各平台支持度不一致)
28. 脚本异常_常规思路 • App.onError 小程序发生脚本错误、 • App.onPageNotFound 页面路由不存在 API调用报错时触发 • App.onUnhandleRejection 微信: v2.10.0+ 支持onUnhandledRejection QQ: 部分支持onUnhandledRejection 百度:不支持 头条:不支持 支付宝:v1.24.1+ 支持onUnhandledRejection 仅安卓 360:不支持 JD: 不支持 • App.onMemoryWarning 内存不足告警事件
29. 脚本异常_多端兼容思路 console.error() 小程序发生脚本错误、 API调用报错时触发、 Promise异常 自定义上报
30. 脚本异常_多端兼容思路 其他小程序:try..catch 包装 console.error(‘包装信息’ + new Error()) 百度小程序:输出的时候将堆栈信息都转成了 string …
31. 脚本异常_上报内容 • ErrType TypeError ReferenceError UnhandledRejection RangeError URIError SyntaxError
32. 接口异常_常规思路 重写 wx.request success:statusCode >= 400 fail:请求错误
33. 接口异常_多端兼容思路 微信小程序: wx.request() 百度小程序: swan.request() 头条小程序: tt.request() 支付宝小程序:my.request() QQ小程序: qq.request() 360小程序: qh.request() ctx.request() 分享人:余意
34. 接口异常_上报内容
35. 资源异常_多端兼容思路 重写 ctx.download File fail:资源下载错误
36. 资源异常_上报内容
37. 小程序加载过程 下载小程序包 启动小程序 解析app.json 注册App() 解析页面.json 渲染层.wxml 页面生命周期 逻辑层.js 加载页面 App生命周期
38. 性能采集_常规思路 微信 小程序 其他 小程序 wx.getPerformance() • appLaunch: 小程序启动耗时 • firstRender: 页面首次渲染耗时 • evaluateScript: 注入脚本耗时 无
39. 性能采集_多端兼容思路 生命周期钩子 级别 说明 主流小程序 360小程 框架 序框架 onLaunch App级 监听小程序初始化 支持 onLoad onShow App级 监听小程序启动或切前台 支持 支持 onLoad Page级 监听页面加载 支持 支持 onShow Page级 监听页面显示 支持 支持 onReady Page级 监听页面初次渲染完成 支持 支持
40. 性能采集方案_数据指标 应用级别性能 首屏时间 init SDK初始化 onLaunch App级 监听小程序初始化 onShow App级 监听小程序启动或切前台 onLoad Page级 监听页面加载 onShow Page级 监听页面显示 onReady Page级 监听页面初次渲染完成 onHide Page级 监听页面隐藏 页面级别性能 页面加载耗时 页面显示耗时 分享人:余意 页面渲染耗时 页面加载耗时
41. 性能采集_Taro兼容 taro2.x 通过将React组件转化成小程序页面和组件 taro3.x 对外暴露小程序页面规范对象 分享人:余意
42. 性能采集_上报内容
43. 行为轨迹采集方案 • App函数堆栈 • Page函数堆栈 • HTTP请求堆栈 分享人:余意
44. 多端兼容核心实现
45. 小程序监控SDK_特性 多端、多框架适配 平台 微信 小程序 脚本异常 ✔ ✔ ✔ ✔ ✔ ✔ ✔ 接口异常 ✔ ✔ ✔ ✔ ✔ ✔ ✔ 资源异常 ✔ ✔ ✔ ✔ ✔ ✔ ✔ 性能日志 ✔ ✔ ✔ ✔ ✔ ✔ ✔ 行为轨迹 ✔ ✔ ✔ ✔ ✔ ✔ ✔ 360 百度智能 字节跳动 支付宝小 QQ 小程序 小程序 程序 小程序 小程序 Taro 框架
46. 小程序监控SDK_特性 支持cmj、es模块化 轻量,49KB
47. 应用实践_快速接入 1. 安装依赖 npm i @mp-monitor --save 2. 在小程序管理后台配置对应的request合法域名 3. 在app.js中引用并初始化 a. 通过npm形式使用 b. 通过单文件形式使用
48. 应用实践_高阶用法 1. 自定义上报日志 2. 上报接口可配置
49. 应用实践_告警通知 短信 公众 号 邮件
50. 应用实践_异常监控
51. 应用实践_性能监控 考虑是否需要采用分包机制
52. 应用实践_数据统计 获取所有页面的PV 将PV等于0的页面代码移除 移除的路径做重定向处理
53. 未来规划 小程序异常采集SDK • 开源 • 对接北斗
54.

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-15 02:47
浙ICP备14020137号-1 $Map of visitor$