小程序如何做埋点、错误监控和性能监控?
简化版
小程序监控通常包括行为埋点、错误日志、接口监控和性能指标。设计时要统一事件命名、自动补充页面和用户上下文、控制采样和上报频率,并注意隐私合规;监控目标是能定位问题,而不是无节制收集数据。
详细版
常见监控内容:
- PV、UV、点击、曝光、转化漏斗。
- JS 错误、Promise 未处理错误、接口失败。
- 页面启动、首屏、接口耗时、资源加载。
- 设备、网络、基础库版本等环境信息。
设计要点:
- 埋点事件命名规范化。
- 上报时带页面路径、场景值、版本号和 traceId。
- 错误日志要去重和采样。
- 关键链路要串联前端、网关和后端日志。
- 不上报手机号、地址、精确位置等敏感信息。
完整版教学
一、监控要回答三个问题
小程序监控不是为了“有数据看”,而是为了回答:用户做了什么、哪里出错了、为什么变慢了。行为埋点回答转化问题,错误监控回答稳定性问题,性能监控回答体验问题。
如果只记录点击,不记录错误,就不知道用户为什么流失;如果只记录错误,不记录页面和版本,就很难复现。监控系统的价值来自上下文完整,而不是事件数量多。
行为:谁在什么页面做了什么
错误:什么环境下发生了什么异常
性能:哪个阶段耗时多少
二、事件命名要统一
埋点最怕同一件事有多个名字。比如支付按钮点击,有人叫 pay_click,有人叫 click_pay,还有人叫 payment_button_tap,后期分析会非常痛苦。应该统一命名规则和字段字典。
一个可用规则是 模块_对象_动作,例如 order_pay_click、course_card_expose。字段也要稳定,例如 page, scene, version, userIdHash, traceId。不要今天叫 uid,明天叫 user_id。
| 字段 | 含义 | 示例 |
|---|---|---|
| event | 事件名 | order_pay_click |
| page | 页面路径 | pages/order/detail |
| version | 小程序版本 | 1.8.2 |
| scene | 入口场景 | share |
| traceId | 链路 ID | t_abc123 |
三、错误监控要带环境和去重
一个错误堆栈如果没有基础库版本、机型、网络、页面路径和用户操作,很难定位。小程序端应捕获全局错误、未处理 Promise、接口错误,并附带环境上下文。
数字例子:同一个 bug 在 10000 次访问中出现 200 次,错误率是 2%;如果只看 200 条日志会觉得很多,但如果这些错误 95% 都来自某个基础库版本或某个页面,就能快速定位。去重和聚合比原始日志堆积更有用。
App({
onError(err) {
reportError({ type: 'js_error', message: String(err) })
},
onUnhandledRejection(res) {
reportError({ type: 'promise_rejection', reason: res.reason })
}
})
四、性能监控要拆阶段
只记录“页面慢”没有用。要拆成启动耗时、页面加载、接口耗时、渲染耗时、资源加载、用户可交互时间。这样才能知道是网络慢、接口慢、数据太大,还是 setData 和节点渲染慢。
例如页面总耗时 2400ms,其中接口 1800ms、渲染 300ms、其他 300ms,优化重点应在接口和缓存;如果接口 200ms、渲染 1600ms,则要看列表节点、图片和 setData。数字拆解能避免盲目优化。
页面耗时 = 路由进入 → 数据请求 → setData → 首屏可见
2400ms = 200ms + 1800ms + 300ms + 100ms
五、上报要控制频率和体积
监控本身也会消耗网络和电量。高频曝光、滚动事件、性能点如果每次都实时上报,会影响业务体验。常见做法是批量缓存、定时上报、页面隐藏时上报、错误类即时上报,并对大流量事件采样。
比如曝光事件每个用户一次页面产生 100 条,10000 个用户就是 100 万条。如果全部实时上报,成本和噪声都很高;可以对非关键曝光做 10% 采样,关键转化事件则全量上报。
六、隐私合规是监控红线
埋点不要采集不必要的敏感信息。手机号、身份证、精确位置、详细地址、聊天内容等都不应直接进入日志。用户标识也可以做哈希或匿名 ID,避免日志系统变成隐私数据仓库。
同时要注意权限和留存周期。不是所有人都应该看原始日志,监控数据也不应该永久保存。面试中提到隐私最小化,会让答案更贴近真实上线要求。
监控心法:少而准的事件,加上足够上下文,比海量无规范日志更能定位问题。
七、常见误区与追问
- 误区:埋点越多越好。 无规范的海量事件会增加成本和分析噪声,关键是事件定义准确。
- 误区:错误日志只要 message 就够。 还需要页面、版本、机型、网络、用户路径和 traceId 等上下文。
- 误区:监控数据可以随便上报用户信息。 敏感信息应最小化、脱敏或不采集。
- 追问:如何分析转化漏斗? 按曝光、点击、登录、提交、支付等关键事件逐层计算转化率。
- 追问:如何定位接口慢? 前端记录请求耗时和 traceId,后端用同一 traceId 查链路日志。
- 追问:高频曝光怎么上报? 批量、去重、采样,并在页面隐藏或定时机会上报。
八、加强记忆
小程序监控用“行为、错误、性能、隐私”来记。行为看漏斗,错误看稳定性,性能拆阶段,隐私守边界。事件命名统一、上下文完整、上报频率可控,监控才能从“存日志”变成“能定位问题”。