跳转到主要内容
HarmonyOS SDK 将 RUM 数据组装为 NDJSON 批次并上报到 Flashduty。当前版本采集 view、action、resource 和 error 四类 RUM 事件;崩溃和卡死会作为带 is_crash 标记的 error 事件进入同一条管道。

默认上下文

SDK 初始化后,会为每条事件附加通用上下文。
字段来源说明
source固定值固定为 harmony
serviceConfigurationBuilder.setService() 或应用 bundle id服务名称,用于按服务筛选
versionHarmonyOS bundle 信息应用版本号
application.idRumConfigurationBuilder(applicationId)RUM 应用 ID
session.idSDK 生成用户会话 ID
os.name / os.version@kit.BasicServicesKit.deviceInfo操作系统名称和版本
device.brand / device.model / device.typedeviceInfo设备品牌、型号和类型
connectivity.statusSDK 网络上下文当前版本默认为 unknown
usr.id / usr.name / usr.emailsetUserInfo()已识别用户信息;服务端不接收其他用户字段
context.*全局属性或单事件属性自定义业务上下文
clientToken 只用于上报鉴权,不会写入 RUM 事件。

会话规则

SDK 按会话进行采样和生命周期管理。
规则当前行为
会话采样创建会话时按 sessionSampleRate 做一次随机采样;未命中的会话不会写出事件
空闲超时15 分钟无真实事件后过期;keep-alive 不会刷新空闲时间
最大时长单个会话最长 4 小时
视图保活活跃 view 每 30 秒刷新一次 time_spent
启动条件keepAlive 不会创建新会话,只有真实 view、action、error 或 resource 事件会创建会话

View 事件

View 表示用户正在查看的页面或业务视图。你可以通过自动路由追踪或手动 API 生成 view。
import { GlobalRumMonitor } from '@flashcatcloud/rum';

const monitor = GlobalRumMonitor.get();

monitor.startView('product-detail', 'ProductDetail', {
  'view.url': 'pages/ProductDetail'
});

monitor.stopView('product-detail');
View 事件包含:
字段说明
view.idSDK 生成的唯一视图 ID
view.name视图名称
view.url优先使用属性中的 view.url,否则使用 view key
view.time_spent从 view 开始到当前更新的耗时,单位为纳秒
view.is_active当前视图是否仍处于活动状态
view.action.count当前 view 下 action 数量
view.error.count当前 view 下 error 数量
view.resource.count当前 view 下 resource 数量
view.crash.count当前 view 下 is_crash error 数量,用于计算 crash-free rate
_dd.document_version同一 view 的更新版本号

Action 事件

Action 表示用户操作。即时操作通过 addAction() 记录,带耗时的操作通过 startAction()stopAction() 记录。
import {
  GlobalRumMonitor,
  RumActionType
} from '@flashcatcloud/rum';

const monitor = GlobalRumMonitor.get();

monitor.addAction(RumActionType.TAP, 'pay_button');

monitor.startAction(RumActionType.SCROLL, 'feed_scroll');
monitor.stopAction(RumActionType.SCROLL, 'feed_scroll');
支持的 action 类型:
枚举
RumActionType.TAPtap
RumActionType.SCROLLscroll
RumActionType.SWIPEswipe
RumActionType.CLICKclick
RumActionType.BACKback
RumActionType.CUSTOMcustom
Action 事件包含 action.idaction.typeaction.target.nameaction.loading_time。通过 FlashcatRum.trackTap() 自动记录的操作类型为 tap

Resource 事件

Resource 表示网络请求。SDK 会在以下场景生成 resource:
  • 使用 rcp session 并添加 FlashcatTrace.interceptor()
  • 使用 FlashcatHttp.request() 包装 @kit.NetworkKit 请求
  • 通过 GlobalRumMonitor.get().startResource()stopResource() 手动记录
import {
  GlobalRumMonitor,
  RumResourceKind,
  RumResourceMethod
} from '@flashcatcloud/rum';

const monitor = GlobalRumMonitor.get();

monitor.startResource('order-request', RumResourceMethod.GET, 'https://api.example.com/orders');
monitor.stopResource('order-request', 200, 2048, RumResourceKind.NATIVE);
Resource 事件包含:
字段说明
resource.idSDK 生成的资源 ID
resource.type资源类型;自动网络采集会按响应 Content-Type 归类,无法识别时使用 native
resource.url请求 URL
resource.method请求方法
resource.status_codeHTTP 状态码
resource.size响应体大小,单位为字节
resource.duration请求耗时,单位为纳秒
_dd.trace_id / _dd.span_id当请求注入了 traceparent 时写入,用于关联后端 Trace
自动网络采集的资源类型映射:
响应 Content-Typeresource.type
image/*image
video/* / audio/*media
font/*font
text/csscss
text/javascriptjs
其他或缺失native
如果请求失败,SDK 会生成 source: "network" 的 error 事件,并在 error.resource 中附带请求方法、状态码和 URL。

Error 事件

Error 表示手动上报错误、未捕获 ArkTS 异常、网络错误、崩溃或卡死。
import {
  GlobalRumMonitor,
  RumErrorSource
} from '@flashcatcloud/rum';

GlobalRumMonitor.get().addError(
  'checkout failed',
  RumErrorSource.CUSTOM,
  'at checkout'
);
支持的 error source:
枚举说明
NETWORKnetwork网络请求失败
SOURCEsourceArkTS / JS 运行时错误或崩溃
CONSOLEconsole控制台来源错误
WEBVIEWwebviewWebView 来源错误
AGENTagentAgent 来源错误
CUSTOMcustom业务手动上报
Error 事件包含:
字段说明
error.message错误消息
error.source错误来源
error.stack错误栈,存在时上报
error.handlinghandledunhandled
error.is_crash崩溃和卡死事件为 true
error.categoryCrash 模块写入 ExceptionApp Hang
error.source_typeCrash 模块写入 harmony
error.binary_imagesNative 崩溃关联的动态库符号信息
build_id用于匹配 Native 符号的 build-id

崩溃和卡死

Crash 模块监听 HarmonyOS hiAppEventAPP_CRASHAPP_FREEZE。系统会持久化崩溃并在下一次启动时回放,因此你需要在启动早期启用 Crash 模块。 崩溃事件会通过 RUM error 管道上报:
  • ArkTS / JS 错误栈会按 V8 风格帧解析
  • Native C/C++ 栈会按 #NN pc <address> <lib.so> 形式解析
  • 如果上传了 sourceMaps.mapnameCache.json 和未 strip 的 .so,服务端会还原源文件、函数名、行列号和 Native 符号

上报行为

SDK 以 NDJSON 形式批量上报事件。
行为当前实现
上报地址{site}/api/v2/rum,默认 site 为 https://browser.flashcat.cloud
请求方法POST
Content-Typetext/plain;charset=UTF-8
鉴权请求头 DD-API-KEY: <clientToken>
User-Agentflashcat-sdk-harmony/0.1.3
查询参数ddsource=harmonyddtags 包含 sdk_version:0.1.3,并在存在时追加 envserviceversion
默认上传间隔5 秒
网络超时连接超时和读取超时均为 30 秒
重试网络错误、4014034084295xx 会保留批次并指数退避重试
丢弃其他 4xx 视为永久错误并丢弃当前批次
强制刷新error 和 crash 事件会触发更快刷新
后台刷新应用进入后台时会刷新当前 view 并触发上传

当前不采集的内容

当前 HarmonyOS SDK 不自动采集以下数据:
  • Session Replay
  • Web Vitals 或浏览器页面性能指标
  • HarmonyOS 页面渲染性能指标
  • 自动 frustration 事件
  • 网络连接类型变化;connectivity.status 目前保持为 unknown