监控、埋点与线上可观测性
很多团队在文档和开发阶段都很认真,但一上线就会暴露另一个问题:
线上出错了,却不知道发生在哪个页面、哪个版本、哪个用户场景。
所以可观测性不是“高级能力”,而是项目从 demo 走向稳定交付的必修项。
新项目最值得先做的 3 件事
1. 错误上报
至少要知道:
- 哪个页面报错
- 当前版本号是什么
- 用户基础环境是什么
- 错误堆栈是什么
2. 请求上报
至少要知道:
- 哪个接口失败了
- 错误码是什么
- 耗时多少
- 是否重试过
3. 关键业务埋点
至少要知道:
- 用户有没有点击核心入口
- 核心流程在哪一步流失
- 页面关键转化是否发生
一个推荐的最小结构
txt
src/
├─ app/
│ └─ monitor.ts
└─ services/
├─ track.ts
└─ report.ts例如埋点入口可以先统一成这样:
ts
// services/track.ts
export function track(event: string, payload: Record<string, unknown> = {}) {
console.log('[track]', event, payload)
}页面里只表达业务动作:
ts
track('order_submit_click', {
from: 'order-confirm',
goodsCount: 3,
})页面不应该直接拼装所有上报字段
推荐把这些公共字段在统一层补齐:
- 版本号
- 页面路径
- 用户 ID
- 平台信息
- 时间戳
这样页面不需要每次都重复写:
ts
const commonContext = {
version,
page,
userId,
scene,
}一个错误上报的简单示例
ts
export function reportError(
error: unknown,
extra: Record<string, unknown> = {},
) {
const route = getCurrentPages().at(-1)?.route || ''
console.error('[reportError]', {
route,
error,
...extra,
})
}在请求封装里也可以接入:
ts
try {
const data = await request({ url: '/api/order' })
return data
}
catch (error) {
reportError(error, { module: 'order' })
throw error
}埋点最容易做错的地方
1. 事件名没有规则
建议至少统一成:
txt
页面_动作_结果例如:
login_submit_successcoupon_receive_clickorder_pay_fail
2. 页面里到处散落上报
埋点越散,后期越难统一维护。
3. 只埋点击,不埋关键结果
例如你只埋了“点击支付按钮”,却没埋“支付成功 / 失败”,那分析价值会很有限。
一套很实用的最小上线清单
txt
[ ] 页面级错误能上报
[ ] 请求失败能上报
[ ] 关键业务链路有埋点
[ ] 事件名有统一规范
[ ] 公共上下文字段统一补齐接下来建议继续看: