跳转至

故障排查

本文用于提供 HarmonyOS SDK 初始化和上报异常时的基础排查入口。

初始化失败

如果 SDK 初始化失败,建议优先检查:

  1. datakitUrldatawayUrlclientToken 是否按部署方式正确配置
  2. ft_sdk.harft_native.har 是否已正确放入 libs 目录,并在 oh-package.json5 中分别声明为 @guancecloud/ft_sdk@guancecloud/ft_native 后执行 ohpm install
  3. 应用是否已按文档完成 oh-package.json5 依赖声明
  4. SDK 初始化是否发生在应用启动阶段

没有数据上报

建议按以下顺序排查:

  1. 确认 前置条件 已完成,尤其是 DataKit 和 RUM 采集器配置
  2. 确认应用设备可以访问 datakitUrldatawayUrl
  3. 打开 setDebug(true),查看初始化与上报日志
  4. 确认 RUM 已执行 installRUMConfig,并至少开启了一个需要验证的采集项

HttpInterceptorChain 不生效

如果使用 @kit.NetworkKitHttpInterceptorChain 自动采集未生效,建议优先检查:

  1. 当前设备或编译目标是否为 HarmonyOS API 22 及以上;低于 API 22 时不支持该能力
  2. 项目是否已安装 ft_sdk.harft_sdk_ext.har,并在 oh-package.json5 中声明为 @guancecloud/ft_sdk@guancecloud/ft_sdk_ext 后完成 ohpm install
  3. 是否已开启 setEnableTraceUserResource(true);如需自动注入 Trace Headers,还需开启 Trace 配置中的 setEnableAutoTrace(true)
  4. 已知在 @kit.NetworkKit 的并发请求场景下,即使为每个请求分别创建独立的 HttpRequestHttpInterceptorChain,仍可能触发异常:{"code":2300003,"message":"Invalid URL format or missing URL"}
  5. 如果遇到上述错误,建议优先降级为串行验证;并发场景下可改用 RCP 或 Axios 兼容模式,或暂时避免在高并发链路中使用 HttpInterceptorChain

Resource 无法采集

如果 HTTP 请求已经创建并挂载自动采集拦截器,但 SDK 初始化和 RUM 配置在后执行,可能出现请求成功但 Resource 数据没有生成。

建议优先检查:

  1. 是否先创建了 HttpRequest、调用了 createFTHttpInterceptorChain()applyFTHttpTrack(),后面才执行 FTSDK.installRUMConfig()
  2. 是否已在 RUM 配置中开启 setEnableTraceUserResource(true)

原因说明:

  • HttpInterceptorChain 创建时,会立即读取当前的 RUM 配置来决定是否启用 Resource 自动采集
  • 如果这一步发生在 FTSDK.installRUMConfig() 之前,SDK 读取到的默认值为 false
  • 后续即使再完成 SDK 初始化,已经创建好的自动采集拦截器实例也不会自动刷新为开启状态,因此不会生成 Resource

建议处理方式:

  1. 先完成 FTSDK.install()FTSDK.installRUMConfig(),再创建 HttpRequest 并挂载 HttpInterceptorChain
  2. 如果请求对象或拦截器链已提前创建,需要在 SDK 初始化完成后重新创建并重新挂载
  3. 如果确实需要在 SDK 初始化前先创建自动采集对象,可在创建时显式传入开关,避免依赖默认配置值

可选写法示例:

applyFTAxiosTrack(client, {
  enableTraceInterceptor: true,
  enableResourceInterceptor: true
});

sdk.init();

注意:

  • 显式传入 enableTraceInterceptorenableResourceInterceptor 只能保证自动采集机制本身处于启用状态
  • 在 SDK 初始化完成之前已经发出的请求,仍可能因为 RUM 上下文尚未完成初始化而无法生成或补齐 Resource 数据
  • 因此更推荐的方式仍然是先完成 SDK 初始化,再创建并使用自动采集对象

类似处理方式同样适用于 RCP 与 HttpInterceptorChain

  • Axios:applyFTAxiosTrack(client, { enableTraceInterceptor: true, enableResourceInterceptor: true })
  • RCP:createFTRCPInterceptors(true, true)createFTRCPTrackConfig({ enableTraceInterceptor: true, enableResourceInterceptor: true })
  • HTTP:createFTHttpInterceptorChain({ enableTraceInterceptor: true, enableResourceInterceptor: true })applyFTHttpTrack(request, { enableTraceInterceptor: true, enableResourceInterceptor: true })

缓存与同步

  • 若关闭了自动同步,即 autoSync = false,需要手动调用 SDK 初始化 中的 FTSDK.flushSyncData()
  • 若本地缓存异常,可使用 FTSDK.clearAllData() 清理未上报数据后重新验证

相关文档

文档评价

文档内容是否对您有帮助? ×