is_crash 标记的 error 事件进入同一条管道。
默认上下文
SDK 初始化后,会为每条事件附加通用上下文。clientToken 只用于上报鉴权,不会写入 RUM 事件。会话规则
SDK 按会话进行采样和生命周期管理。View 事件
View 表示用户正在查看的页面或业务视图。你可以通过自动路由追踪或手动 API 生成 view。Action 事件
Action 表示用户操作。即时操作通过addAction() 记录,带耗时的操作通过 startAction() 和 stopAction() 记录。
Action 事件包含
action.id、action.type、action.target.name 和 action.loading_time。通过 FlashcatRum.trackTap() 自动记录的操作类型为 tap。
Resource 事件
Resource 表示网络请求。SDK 会在以下场景生成 resource:- 使用
rcpsession 并添加FlashcatTrace.interceptor() - 使用
FlashcatHttp.request()包装@kit.NetworkKit请求 - 使用
@flashcatcloud/axios的trackAxios()接入 axios 实例 - 用
FlashcatTrace.startTracedResource()接入其他网络栈
setTrackNetworkRequests(true)。此外还可以通过
GlobalRumMonitor.get().startResource() 和 stopResource() 手动记录,该方式不受此开关影响。
自动网络采集的资源类型映射:
如果请求失败,SDK 会生成
source: "network" 的 error 事件,并在 error.resource 中附带请求方法、状态码和 URL。
Error 事件
Error 表示手动上报错误、未捕获 ArkTS 异常、未处理的 Promise rejection、网络错误、崩溃或卡死。
RUM 会自动监听
errorManager.on('error') 和 errorManager.on('unhandledRejection')。未处理的 Promise rejection 会作为普通非崩溃 error 上报,不会触发退出或恢复策略。
Error 事件包含:
崩溃和卡死
Crash 模块通过实时和事后两条路径采集故障:- 主线程上未捕获的 ArkTS 异常会进入实时 JS 崩溃策略路径。
REPORT_THEN_EXIT和REPORT_AND_RECOVER会在进程退出或重启前同步持久化 SDK 待处理崩溃记录 - 下次启动时,Crash 模块会把 SDK 自身的待处理记录回放到 RUM,标记为已消费后删除持久化文件
- HarmonyOS
hiAppEvent会在后续启动时回放APP_CRASH和APP_FREEZE,用于采集 ArkTS、Native C/C++ 崩溃和卡死
onUnhandledException、onException 和后续的 hiAppEvent.APP_CRASH。SDK 会对两个实时回调进行指纹去重,并通过持久化的已消费记录去重系统回放,保证一次策略管理的崩溃在 RUM 管道中只生成一个 crash error 事件。
未处理的 Promise rejection 会单独采集为 error.source_type: promise 的普通非崩溃 RUM error。它不会使进程退出,也不会进入崩溃策略路径。
崩溃归因
崩溃和卡死会归因到故障真正发生的那个会话和视图,而不是回放它的那次启动。两类故障的归因依据不同:- SDK 能在进程内观察到的故障(主线程上未捕获的 ArkTS 异常)在退出前会把当时的 RUM 会话和视图一并写入待处理记录,下次启动按该记录回放
- SDK 无法在进程内观察到的故障(Native 信号崩溃、卡死)会直接杀死进程,来不及记录任何东西。从
0.3.2起,SDK 会把每次写出的 view 事件快照到本地,下次启动时读取(读取后立即删除)并据此还原崩溃所属的会话和视图。0.3.1及更早版本会把这类故障记入重启后的实时会话,并使用回放时刻的时间,导致崩溃出现在用户并未崩溃的那个会话里,真正崩溃的会话反而显示无崩溃
is_crash error,以及一份更新后的 view 文档(document_version 递增、is_active 置为 false、crash 和 error 计数各 +1)。两条都持久化成功后才会删除待处理记录;只有一条写入成功时会保留记录,在下次启动重试,避免会话读起来是无崩溃的。
以下情况会回退为记入当前会话并使用当前时间,真实故障时间保留在 crash.crashed_at_ms 属性中:
- view 快照对应的视图已开始超过 4 小时。这是会话的最大生命周期,此时后端上的会话已经关闭,不应再改写它的文档
- 故障发生距今已超过 23 小时。服务端会静默丢弃超过 24 小时的事件,回填时间戳会让崩溃被判定为已投递却实际丢失
- 崩溃发生在第一个会话建立之前,或本地没有可用的 view 快照
- ArkTS / JS 错误栈会按 V8 风格帧解析
- Native C/C++ 栈会按
#NN pc <address> <lib.so>形式解析 - 如果上传了
sourceMaps.map、nameCache.json和未 strip 的.so,服务端会还原源文件、函数名、行列号和 Native 符号
上报行为
SDK 以 NDJSON 形式批量上报事件。当前不采集的内容
当前 HarmonyOS SDK 不自动采集以下数据:- Session Replay
- Web Vitals 或浏览器页面性能指标
- HarmonyOS 页面渲染性能指标
- 自动 frustration 事件