コンテンツにスキップ

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 アドレス。[RUM] アプリから取得します。例:https://open.dataway.url、SDK をインストールしたデバイスからアクセス可能である必要があります。注意:datakitUrldatawayUrl の設定はどちらか一方を選択してください
clientToken string はい 認証トークン。datawayUrl と同時に設定する必要があります
setDebug boolean いいえ SDK 内部診断ログを有効にするかどうか。デフォルトは false
setSdkLogLevel SDKLogLevel いいえ SDK 内部ログの出力レベルを設定します。詳細はトラブルシューティングを参照
setEnableInnerLogFile enable: boolean, config?: FTInnerLogFileConfig いいえ SDK 内部ログをローカルファイルに書き込むかどうか。デフォルトは false。詳細はトラブルシューティングを参照
setEnv string \| EnvType いいえ 環境。デフォルトは prodEnvType 列挙型または文字列を渡せます
setServiceName string いいえ 所属するビジネスまたはサービス名。デフォルトは df_rum_harmonyos
setAutoSync boolean いいえ データ収集後に自動的にサーバーへ同期するかどうか。デフォルトは truefalse に設定した場合、FTSDK.flushSyncData() を使用してデータ同期を管理できます
setSyncPageSize SyncPageSize いいえ 同期リクエストのプリセットエントリ数を設定します:MINI は5件、MEDIUM は10件、LARGE は50件。デフォルトは SyncPageSize.MEDIUM
setCustomSyncPageSize number いいえ カスタム同期リクエストエントリ数。範囲は [5, 500]、小数は切り捨て、デフォルトは 10setSyncPageSize とはどちらか一方を設定
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 の2種類のルールをサポートします。null を渡すとローカルルールをクリアします。詳細はブラックリストフィルタリングを参照
setEnableAccessDeviceID boolean いいえ システムデバイス識別子を device_uuid として使用するかどうか。デフォルトは false。無効時は SDK が永続化するプライベート UUID を使用します
setRemoteConfiguration boolean いいえ データ収集のリモート設定機能を有効にするかどうか。デフォルトは false。有効にすると、RUM 設定のインストール完了後、有効なレポートアドレスがある場合に設定を取得します
setRemoteConfigMiniUpdateInterval number いいえ データ更新の最小間隔を設定します。単位は秒、デフォルトは 12 時間
setRemoteConfigurationCallBack FTRemoteConfigFetchResult \| null いいえ リモート設定結果のコールバック。コード例を参照
enableLimitWithDbSize number いいえ DB キャッシュサイズ制限を有効化。デフォルト 100MB、単位はバイト。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 サーバーアドレス。空文字列は無視され、最大で最初の3つの有効なアドレスが使用されます
overHttpsUrl string いいえ DNS over HTTPS サービスアドレス

ブラックリストフィルタリング

ft-sdk 0.1.15 以降では、DataKit 互換のブラックリストフィルタリングをサポートしており、データをローカルキャッシュに書き込む前に Logging、RUM データをフィルタリングできます。この機能はデフォルトで有効になっており、setEnableDataFilter(false) で無効にできます。

ブラックリストルールは、ローカルルールとリモートルールの2種類があります:

  • ローカルルールは setDataFilters で設定し、loggingrum の2種類のルールをサポートします。
  • データフィルタリングが有効で、有効なレポートアドレスが存在する場合、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';

// 方法1:ユーザー 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 ワーカーキューをローカル同期キャッシュにフラッシュし、その後すぐにアップロードタスクをスケジュールします。キューへのフラッシュが失敗した場合でも、アップロードのトリガーを試行し続けます。

SDK キャッシュデータのクリア

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

await FTSDK.clearAllData();

clearAllData() は、未送信のすべてのキャッシュデータを削除します。これには以下が含まれます:

  • 同期データテーブル(sync_data_flat)のすべてのデータ
  • RUM ビューデータテーブル(rum_view)のすべてのデータ
  • RUM アクションデータテーブル(rum_action)のすべてのデータ

フィードバック

このページは役に立ちましたか?