跳转至

SDK 初始化

本文用于承载 HarmonyOS SDK 初始化与运行时能力相关内容。

基础配置

在 EntryAbility.ets 中初始化 SDK:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { FTSDK, FTSDKConfig, EnvType, SDKLogLevel, SyncPageSize} from '@guancecloud/ft_sdk/Index';

const DOMAIN = 0x0000;

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    this.initFTSDK();
  }

  private initFTSDK(): void {
    try {
      // 本地环境部署(Datakit)
      // const sdkConfig = FTSDKConfig.builder(datakitUrl);

      // 公网 DataWay
      const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
        .setDebug(true)
        .setSdkLogLevel(SDKLogLevel.D)
        .setServiceName('Your-App-Name')
        .setEnv(EnvType.PROD) // 或使用字符串:.setEnv('prod')
        .addGlobalContext('app_channel', new String('appgallery'))
        .setAutoSync(true)
        .setSyncPageSize(SyncPageSize.MEDIUM)
        .setDataSyncRetryCount(5)
        .setSyncSleepTime(0)
        .setCompressIntakeRequests(true);

      FTSDK.install(sdkConfig, this.context);
      hilog.info(DOMAIN, 'FTSDK', 'FT SDK initialized successfully');
    } catch (error) {
      const errorObj: object = error as object;
      hilog.error(DOMAIN, 'FTSDK', `Failed to initialize FT SDK: ${JSON.stringify(errorObj)}`);
    }
  }
}
方法名 类型 必须 含义
datakitUrl string 是 本地环境部署(DataKit)上报 URL 地址,例如:http://10.0.0.1:9529,端口默认 9529,安装 SDK 的设备需能访问该地址。注意:datakitUrl 和 datawayUrl 配置两者二选一
datawayUrl string 是 公网 DataWay 上报 URL 地址,从[用户访问监测]应用中获取,例如:https://open.dataway.url,安装 SDK 的设备需能访问该地址。注意:datakitUrl 和 datawayUrl 配置两者二选一
clientToken string 是 认证 token,需要与 datawayUrl 同时配置
setDebug boolean 否 是否开启 SDK 内部诊断日志,默认 false
setSdkLogLevel SDKLogLevel 否 设置 SDK 内部日志输出等级,详细说明请参考 故障排查
setEnableInnerLogFile enable: boolean, config?: FTInnerLogFileConfig 否 是否将 SDK 内部日志写入本地文件,默认 false,详细说明请参考 故障排查
setEnv string \| EnvType 否 环境,默认 prod。可传 EnvType 枚举或字符串
setServiceName string 否 所属业务或服务名称,默认 df_rum_harmonyos
addGlobalContext key: string, value: object 否 添加 SDK 全局属性,添加规则请查阅此处
setAutoSync boolean 否 是否在采集数据后自动同步到服务器,默认 true。设置为 false 后,可使用 FTSDK.flushSyncData() 自行管理数据同步
setSyncPageSize SyncPageSize 否 设置预定义的同步请求条目数:MINI 为 5 条、MEDIUM 为 10 条、LARGE 为 50 条,默认 SyncPageSize.MEDIUM
setCustomSyncPageSize number 否 自定义同步请求条目数,范围 [5, 500],小数向下取整,默认 10。与 setSyncPageSize 二选一配置
setDataSyncRetryCount number 否 设置单次数据同步的最大重试次数,范围 [0, 5],小数向下取整,默认 5
setSyncSleepTime number 否 设置连续同步请求之间的间歇时间,范围 [0, 5000],单位毫秒,默认 0
setCompressIntakeRequests boolean 否 是否对上传数据使用 zlib 封装的 deflate 压缩,默认 true;压缩不可用时会回退为明文上传
setProxy FTProxyConfig \| null 否 设置 SDK 数据上传请求使用的 HTTP 代理;传入 null 可清除代理配置
setProxyAuthenticator FTProxyAuthenticator \| null 否 设置上传代理的认证信息;传入 null 可清除独立认证配置
setDns FTDnsConfig \| null 否 设置 SDK 数据上传请求使用的 DNS 服务器或 DNS over HTTPS 地址;传入 null 可清除 DNS 配置
setDataModifier DataModifier \| null 否 对单个字段进行修改或脱敏,返回 null 时保留原值,详细说明请参考数据采集脱敏
setLineDataModifier LineDataModifier \| null 否 对单条数据的已存在字段进行批量修改或脱敏,详细说明请参考数据采集脱敏
setEnableDataFilter boolean 否 是否开启与 DataKit 兼容的本地及远程黑名单过滤能力,默认 true。支持过滤 Logging 和 RUM 数据,详细说明请参考黑名单过滤
setDataFilters FTDataFilters \| null 否 设置本地黑名单过滤规则;支持 logging、rum 两类规则,传入 null 可清空本地规则,详细说明请参考黑名单过滤
setEnableAccessDeviceID boolean 否 是否使用系统设备标识作为 device_uuid,默认 false。关闭时使用 SDK 持久化的隐私 UUID
setRemoteConfiguration boolean 否 是否开启数据采集的远程配置功能,默认 false。开启后,SDK 会在 RUM 配置安装完成且具备有效上报地址时获取配置
setRemoteConfigMiniUpdateInterval number 否 设置数据更新最短间隔,单位秒,默认 12 小时
setRemoteConfigurationCallBack FTRemoteConfigFetchResult \| null 否 远程配置结果回调,参考代码示例
setNeedTransformOldCache boolean 否 是否迁移旧缓存数据,默认 false。首次切换至 FileStore 且需要保留已有 SQLite 缓存时开启。ft-sdk 0.1.17 及以上版本支持。
enableFileDataStore Void 否 开启文件缓存,用于同步缓存和 RUM 聚合数据。默认仍使用 SQLite 缓存。ft-sdk 0.1.17 及以上版本支持。
setUseFileDataStore boolean 否 设置是否使用文件缓存。传入 true 时使用 FileStore,传入 false 时使用默认 SQLite 缓存。ft-sdk 0.1.17 及以上版本支持。
setFileDataStoreShadow boolean 否 开启文件缓存影子写入。开启后读取和上传仍使用 SQLite,同时将写入镜像到 FileStore,用于迁移前验证。ft-sdk 0.1.17 及以上版本支持。
enableLimitWithCacheSize cacheSize?: number 否 开启总缓存大小限制,默认 100MB,单位 Byte;传入值最小为 30MB。开启后 Log 和 RUM 的条目数限制失效。ft-sdk 0.1.17 及以上版本支持。
setCacheDiscard CacheDiscard 否 设置缓存达到大小上限后的丢弃策略,默认 CacheDiscard.DISCARD。DISCARD 丢弃新增数据,DISCARD_OLDEST 删除最早缓存数据。ft-sdk 0.1.17 及以上版本支持。
enableLimitWithDbSize cacheSize?: number 否 已废弃,保留旧版本兼容。建议使用 enableLimitWithCacheSize 替代。
setDbCacheDiscard DBCacheDiscard 否 已废弃,保留旧版本兼容。建议使用 setCacheDiscard 替代。

动态配置与运行时更新上报地址的使用方式,请参考动态配置与动态更新地址。

文件缓存

ft-sdk 0.1.17 及以上版本支持将同步缓存和 RUM 聚合数据写入文件缓存。为保证平滑升级,SDK 默认仍使用 SQLite 缓存;如需启用文件缓存,可在 FTSDKConfig 中显式开启。

const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
  .enableFileDataStore();

如需先验证文件缓存写入情况,可以开启影子写入。开启后 SDK 仍从 SQLite 读取和上传数据,同时将写入镜像到 FileStore;验证通过后再切换为 enableFileDataStore()。

const shadowConfig = FTSDKConfig.builder(datawayUrl, clientToken)
  .setFileDataStoreShadow(true);

缓存大小限制

ft-sdk 0.1.17 及以上版本建议使用 enableLimitWithCacheSize 配置 SDK 总缓存大小限制。开启后,单独的日志条数上限 FTLoggerConfig.setLogCacheLimitCount 和 RUM 条目数上限 FTRUMConfig.setRumCacheLimitCount 将失效。

import { CacheDiscard, FTSDKConfig } from '@guancecloud/ft_sdk/Index';

const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
  // 开启总缓存大小限制,示例为 100MB。
  .enableLimitWithCacheSize(100 * 1024 * 1024)
  // 缓存达到上限后删除最早缓存数据。
  .setCacheDiscard(CacheDiscard.DISCARD_OLDEST);

上传网络配置

setProxy(...)、setProxyAuthenticator(...) 和 setDns(...) 只作用于 SDK 向 DataKit 或 DataWay 上传数据的请求,不会修改应用业务请求的网络配置。

import {
  FTSDK,
  FTSDKConfig,
  FTProxyConfig,
  FTProxyAuthenticator,
  FTDnsConfig
} from '@guancecloud/ft_sdk/Index';

const proxyConfig: FTProxyConfig = {
  host: 'proxy.example.com',
  port: 8080,
  exclusionList: ['localhost', '127.0.0.1']
};

const proxyAuthenticator: FTProxyAuthenticator = {
  username: 'proxy-user',
  password: 'proxy-password'
};

const dnsConfig: FTDnsConfig = {
  servers: ['1.1.1.1', '8.8.8.8'],
  overHttpsUrl: 'https://dns.example.com/dns-query'
};

const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
  .setProxy(proxyConfig)
  .setProxyAuthenticator(proxyAuthenticator)
  .setDns(dnsConfig);

FTSDK.install(sdkConfig, this.context);

FTProxyConfig

字段 类型 必须 含义
host string 是 代理服务器地址
port number 是 代理服务器端口
exclusionList Array<string> 否 不使用代理的主机列表,遵循 NetworkKit 的代理排除规则
username string 否 代理用户名;也可以通过 setProxyAuthenticator(...) 单独配置
password string 否 代理密码;也可以通过 setProxyAuthenticator(...) 单独配置

FTProxyAuthenticator

字段 类型 必须 含义
username string 是 代理认证用户名
password string 是 代理认证密码

如果同时在 FTProxyConfig 和 FTProxyAuthenticator 中设置认证信息,FTProxyAuthenticator 的配置优先生效。

FTDnsConfig

字段 类型 必须 含义
servers Array<string> 否 自定义 DNS 服务器地址。空字符串会被忽略,最多使用前三个有效地址
overHttpsUrl string 否 DNS over HTTPS 服务地址

黑名单过滤

ft-sdk 0.1.15 支持与 DataKit 兼容的黑名单过滤,用于在数据写入本地缓存前过滤 Logging、RUM 数据。该能力默认开启,可以通过 setEnableDataFilter(false) 关闭。

黑名单规则分为本地规则和远程规则:

  • 本地规则通过 setDataFilters 配置,支持 logging、rum 两类规则。
  • 开启数据过滤且存在有效上报地址时,SDK 会从 DataKit 或 DataWay 拉取远程 logging、rum 规则。
  • 本地和远程规则同时过滤新数据;命中规则的数据不写入本地缓存。
  • 数据会先经过 LineDataModifier 修改,再按修改后的内容进行黑名单过滤。
  • 远程规则会在上传前清理命中的缓存数据;本地规则仅过滤新数据。
  • SDK 在每次上传任务启动时检查远程规则是否到期,到期后才拉取。
  • 服务端 pull_interval 为数值时单位是纳秒,例如 10000000000 表示 10 秒;字符串数值 "10" 表示 10 秒,也支持 "10s"、"2m"、"1h" 等带单位格式。缺失或无效时按 10 秒处理。
  • 服务端返回内容未变化时,SDK 不会重复解析或应用同一份规则。

规则表达式需要写在 {} 中,支持 in、not in、match、not match 运算符,多个条件可以使用 and / or 组合。字段来源包括数据标签和字段,也支持 source、measurement、class 等数据类型标识字段;match 使用正则表达式。

import {
  FTSDK,
  FTSDKConfig,
  FTDataFilters
} from '@guancecloud/ft_sdk/Index';

const dataFilters: FTDataFilters = new Map<string, Array<string>>();
dataFilters.set('logging', [
  "{ source in ['df_rum_harmonyos_log'] and message match ['.*password.*'] }"
]);
dataFilters.set('rum', [
  "{ source in [resource] and resource_status in ['404', '503'] }"
]);

const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
  .setEnableDataFilter(true)
  .setDataFilters(dataFilters);

FTSDK.install(sdkConfig, this.context);

FTDataFilters 可传入 Map<string, Array<string>> 或同结构的对象。分类名称不区分大小写;除 logging、rum 外的分类会被忽略。

// 关闭本地和远程黑名单过滤,但保留已配置的本地规则。
sdkConfig.setEnableDataFilter(false);

// 清空已配置的本地规则,不影响服务端远程规则。
sdkConfig.setDataFilters(null);

运行时切换到有效上报地址时,SDK 会清除旧地址的远程规则,并从新地址重新拉取;本地规则会继续保留。

用户绑定与解绑

使用方法

/**
 * 绑定用户信息(仅用户 ID)
 * @param id 用户 ID
 */
static bindRumUserDataById(id: string): void

/**
 * 绑定用户信息(完整用户数据)
 * @param userData 用户数据对象
 */
static bindRumUserData(userData: UserData): void

/**
 * 解绑用户信息
 */
static unbindRumUserData(): void

UserData

方法名 含义 必须 注意
setId 设置用户 ID 否
setName 设置用户名 否
setEmail 设置邮箱 否
setExts 设置用户扩展 否 添加规则请查阅 自定义标签与全局上下文

代码示例

import { FTSDK, UserData } from '@guancecloud/ft_sdk/Index';

// 方式一:仅绑定用户 ID(推荐用于快速绑定)
FTSDK.bindRumUserDataById('user_001');

const userData = new UserData();
userData.setId('user_001');
userData.setName('test.user');
userData.setEmail('test@mail.com');
userData.setExts({
  'user_type': 'vip'
});
FTSDK.bindRumUserData(userData);

FTSDK.unbindRumUserData();

运行时能力

设置自动同步数据

SDK 初始化后,可通过 FTSDK.setAutoSync(...) 动态开启或关闭缓存数据自动同步。关闭后,SDK 仍会将采集数据写入本地缓存,但不会在采集后自动触发上传;可配合 FTSDK.flushSyncData() 自行管理数据同步。

import { FTSDK } from '@guancecloud/ft_sdk/Index';

// 关闭自动同步
FTSDK.setAutoSync(false);

// 开启自动同步
FTSDK.setAutoSync(true);

FTSDKConfig.setAutoSync(...) 用于设置 SDK 初始化时的同步状态;FTSDK.setAutoSync(...) 用于 SDK 初始化后动态修改同步状态。

主动同步数据

当自动同步关闭时,可主动触发数据同步:

import { FTSDK } from '@guancecloud/ft_sdk/Index';

FTSDK.flushSyncData();

自动同步开启时,SDK 会使用 10 秒聚合窗口,将短时间内连续产生的数据合并后上传。flushSyncData() 不等待该聚合窗口:它会先尽量将当前待处理的 RUM 与 Log worker 队列刷入本地同步缓存,再立即调度上传任务;如果队列刷入失败,仍会继续尝试触发上传。

清理 SDK 缓存数据

import { FTSDK } from '@guancecloud/ft_sdk/Index';

await FTSDK.clearAllData();

clearAllData() 会删除所有未上报的缓存数据,包括:

  • 同步数据表(sync_data_flat)中的所有数据
  • RUM 视图数据表(rum_view)中的所有数据
  • RUM 动作数据表(rum_action)中的所有数据

文档评价

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