故障排查¶
本文用于提供 HarmonyOS SDK 初始化和上报异常时的基础排查入口。
初始化失败¶
如果 SDK 初始化失败,建议优先检查:
datakitUrl、datawayUrl、clientToken是否按部署方式正确配置ft_sdk.har、ft_native.har是否已正确放入libs目录,并在oh-package.json5中分别声明为@guancecloud/ft_sdk、@guancecloud/ft_native后执行ohpm install- 应用是否已按文档完成
oh-package.json5依赖声明 - SDK 初始化是否发生在应用启动阶段
没有数据上报¶
建议按以下顺序排查:
- 确认 前置条件 已完成,尤其是 DataKit 和 RUM 采集器配置
- 确认应用设备可以访问
datakitUrl或datawayUrl - 打开
setDebug(true),查看初始化与上报日志 - 确认 RUM 已执行
installRUMConfig,并至少开启了一个需要验证的采集项
HttpInterceptorChain 不生效¶
如果使用 @kit.NetworkKit 的 HttpInterceptorChain 自动采集未生效,建议优先检查:
- 当前设备或编译目标是否为 HarmonyOS API 22 及以上;低于 API 22 时不支持该能力
- 项目是否已安装
ft_sdk.har和ft_sdk_ext.har,并在oh-package.json5中声明为@guancecloud/ft_sdk和@guancecloud/ft_sdk_ext后完成ohpm install - 是否已开启
setEnableTraceUserResource(true);如需自动注入 Trace Headers,还需开启 Trace 配置中的setEnableAutoTrace(true) - 已知在
@kit.NetworkKit的并发请求场景下,即使为每个请求分别创建独立的HttpRequest和HttpInterceptorChain,仍可能触发异常:{"code":2300003,"message":"Invalid URL format or missing URL"} - 如果遇到上述错误,建议优先降级为串行验证;并发场景下可改用 RCP 或 Axios 兼容模式,或暂时避免在高并发链路中使用
HttpInterceptorChain
Resource 无法采集¶
如果 HTTP 请求已经创建并挂载自动采集拦截器,但 SDK 初始化和 RUM 配置在后执行,可能出现请求成功但 Resource 数据没有生成。
建议优先检查:
- 是否先创建了
HttpRequest、调用了createFTHttpInterceptorChain()或applyFTHttpTrack(),后面才执行FTSDK.installRUMConfig() - 是否已在 RUM 配置中开启
setEnableTraceUserResource(true)
原因说明:
HttpInterceptorChain创建时,会立即读取当前的 RUM 配置来决定是否启用 Resource 自动采集- 如果这一步发生在
FTSDK.installRUMConfig()之前,SDK 读取到的默认值为false - 后续即使再完成 SDK 初始化,已经创建好的自动采集拦截器实例也不会自动刷新为开启状态,因此不会生成
Resource
建议处理方式:
- 先完成
FTSDK.install()、FTSDK.installRUMConfig(),再创建HttpRequest并挂载HttpInterceptorChain - 如果请求对象或拦截器链已提前创建,需要在 SDK 初始化完成后重新创建并重新挂载
- 如果确实需要在 SDK 初始化前先创建自动采集对象,可在创建时显式传入开关,避免依赖默认配置值
可选写法示例:
applyFTAxiosTrack(client, {
enableTraceInterceptor: true,
enableResourceInterceptor: true
});
sdk.init();
注意:
- 显式传入
enableTraceInterceptor、enableResourceInterceptor只能保证自动采集机制本身处于启用状态 - 在 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()清理未上报数据后重新验证