Skip to content
返回运维与 SRE

真实用户监控

从真实用户浏览器收集性能和错误,看到用户实际体验。

为什么

合成监控从干净浏览器检查已知路径;RUM 检查每个真实用户在每种真实设备、网络、地理位置上,这是用户体验的地面真相。一个从数据中心 200ms 通过的合成对巴西 3G 上等 8 秒解析你 JS bundle 的移动用户毫无说明。RUM 捕获长尾 — 最慢的 1% 用户从不提 bug 但直接离开。它也是把技术性能与业务结果绑定的唯一信号:当你能展示 p75 LCP 与结账放弃相关,你就拿到修前端性能的预算,而单靠合成永远拿不到。

何时使用

对任何面向用户的 web 或移动应用在生产中。从 Core Web Vitals(LCP、FID/INP、CLS)+ JS 错误开始;为关键流程加自定义计时。

如何做

1. 选 SDK 和后端
   - 浏览器:web-vitals npm 包 + Beacon API → 你的收集器 / Datadog/Sentry/New Relic Browser
   - 移动:原生 SDK(Firebase Perf、Datadog RUM)— 别尝试 polyfill web vitals

2. 捕获 Core Web Vitals + JS 错误
   - LCP(最大内容绘制):主内容何时渲染 — 目标 <2.5s p75
   - INP(交互到下一帧):输入响应性 — 目标 <200ms p75
   - CLS(累积布局偏移):视觉稳定性 — 目标 <0.1 p75
   - window.onerror + unhandledrejection 捕获 JS 错误带栈 + release 标签

3. 每个事件打用户上下文(隐私安全)
   - 国家、设备、浏览器、连接类型、页面路由、应用版本
   - 不要 user_id 或 PII — RUM 是采样和聚合,非逐用户监控

4. 建以 p75 和 p95 为键的 RUM 仪表盘,非平均值
   - "按路由 p75 LCP" — 哪些页对最慢 25% 用户慢
   - "按 release JS 错误率" — 最新部署退化了吗?
   - "按国家/设备 LCP" — 某分段在受苦吗?

5. 在 RUM 上设 SLO 并对燃烧率告警
   - "28 天窗口 99% 时间 p75 LCP < 2.5s" → 燃烧 >2x 时告警
   - 绑业务:关联 LCP 退化与结账转化

示例

// 捕获 Core Web Vitals + JS 错误,发往收集器
import { onLCP, onINP, onCLS } from 'web-vitals';

function send(metric) {
  navigator.sendBeacon('/rum/collect', JSON.stringify({
    name: metric.name, value: metric.value, id: metric.id,
    route: location.pathname, ts: Date.now(),
    country: '<%= request.country %>', // 边缘注入
    release: __APP_VERSION__,
  }));
}
onLCP(send); onINP(send); onCLS(send);
window.addEventListener('error', e =>
  send({ name: 'js_error', value: 1, id: e.message + '@' + e.lineno }));
// 仪表盘查询(Datadog RUM):
//   p75(lcp) by route where service=web  →  找慢页
//   count(js_error) by release           →  部署退化了吗?

常见问题

  • ⚠报平均 LCP 而非 p75/p95 — 平均值看着好而 25% 用户体验极差;Google 按 p75 排名,非均值。
  • ⚠每次页面浏览都发 RUM 不采样 — 日 100 万访问你日摄入 100 万事件并爆预算;性能采样 10-20%,错误 100%。
  • ⚠RUM 打 user_id 或 email — 制造 PII 保留和 GDPR 问题;RUM 应匿名且聚合。
  • ⚠忽略移动和慢网络用户 — 只显示桌面光纤用户的仪表盘漏掉体验最差的分段。

最佳实践

  • ✓报 Core Web Vitals 的 p75 和 p95,非平均值 — 这是 Google 排名依据和最慢用户实际感受。
  • ✓采样 RUM(性能 10-20%,JS 错误 100%)以控成本和摄入量而不丢稀有错误信号。
  • ✓关联 RUM 退化与业务指标(转化、跳出)— 这是向产品团队论证性能工作的方式。
  • ✓按设备、国家、连接类型分段 RUM,以看退化是全局还是某用户分段特有。