跳转至

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')
        .setAutoSync(true)
        .setSyncPageSize(SyncPageSize.MEDIUM)
        .setDataSyncRetryCount(5)
        .setSyncSleepTime(0)
        .setCompressIntakeRequests(true);
        // 如需开启 DB 缓存大小限制,可调用 .enableLimitWithDbSize();不传 dbSize 时默认 100MB

      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 的设备需能访问该地址。注意:datakitUrldatawayUrl 配置两者二选一
datawayUrl string 公网 DataWay 上报 URL 地址,从[用户访问监测]应用中获取,例如:https://open.dataway.url,安装 SDK 的设备需能访问该地址。注意:datakitUrldatawayUrl 配置两者二选一
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
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 设置本地黑名单过滤规则;支持 loggingrum 两类规则,传入 null 可清空本地规则,详细说明请参考黑名单过滤
setEnableAccessDeviceID boolean 是否使用系统设备标识作为 device_uuid,默认 false。关闭时使用 SDK 持久化的隐私 UUID
setRemoteConfiguration boolean 是否开启数据采集的远程配置功能,默认 false。开启后,SDK 会在 RUM 配置安装完成且具备有效上报地址时获取配置
setRemoteConfigMiniUpdateInterval number 设置数据更新最短间隔,单位秒,默认 12 小时
setRemoteConfigurationCallBack FTRemoteConfigFetchResult \| null 远程配置结果回调,参考代码示例
enableLimitWithDbSize number 开启DB缓存大小限制,默认 100MB,单位 Byte。传入 dbSize 时取值范围 [30MB,)。开启之后 FTLoggerConfig.setLogCacheLimitCount 及 FTRUMConfig.setRumCacheLimitCount 将失效。
setDbCacheDiscard DBCacheDiscard 设置DB缓存达到大小上限后的丢弃策略,默认为 DBCacheDiscard.DISCARDDISCARD 为丢弃追加数据,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 代理认证密码

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

FTDnsConfig

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

黑名单过滤

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

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

  • 本地规则通过 setDataFilters 配置,支持 loggingrum 两类规则。
  • 开启数据过滤且存在有效上报地址时,SDK 会通过 /v1/datakit/pull?filters=true 从 DataKit 或 DataWay 拉取远程 loggingrum 规则。
  • 本地规则与远程规则会同时生效,任一规则命中后,该条数据都会被丢弃,不会写入本地缓存或上传。
  • 黑名单过滤在 LineDataModifier 之后、本地缓存写入之前执行。如果同时配置了 setLineDataModifier 和黑名单过滤,过滤规则会基于修改后的数据进行判断。

规则表达式需要写在 {} 中,支持 innot inmatchnot match 运算符,多个条件可以使用 and / or 组合。字段来源包括数据标签和字段,也支持 sourcemeasurementclass 等数据类型标识字段;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>> 或同结构的对象。分类名称不区分大小写;除 loggingrum 外的分类会被忽略。

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

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

远程规则的拉取间隔以服务端返回的 pull_interval 为准;服务端未返回有效值时,SDK 使用 10 秒作为兜底间隔。pull_interval 支持秒数或带单位的字符串,例如 1030s2m1h。运行时切换到有效上报地址时,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)中的所有数据

文档评价

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