トラブルシューティング¶
このドキュメントでは、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 の初期化がアプリケーションの起動段階で行われているか
SDK 初期化異常の確認¶
hilog で Tag が [FT-SDK] のプレフィックスを持つログが出力されているか確認します。SDK の初期化、設定のインストール、データ同期などの内部ログはこのプレフィックスで出力されるため、初期化失敗、設定が反映されない、またはネットワーク同期の異常などの問題の特定に使用できます。
Debug モードの有効化¶
以下の設定で SDK の Debug モードを有効にできます。setDebug(true) は SDK 内部ログのマスタースイッチです。有効にすると、コンソールの hilog に SDK のデバッグログが出力され、[FT-SDK] 文字列でフィルタリングして SDK 内部ログを特定できます。setSdkLogLevel(...) は出力しきい値を制御します。
| ログレベル | 出力内容 |
|---|---|
SDKLogLevel.V、SDKLogLevel.D |
現在の全 SDK 診断ログを出力:D、I、W、E |
SDKLogLevel.I |
I、W、E を出力 |
SDKLogLevel.W |
W、E を出力 |
SDKLogLevel.E |
E のみ出力 |
import { FTSDK, FTSDKConfig, SDKLogLevel } from '@guancecloud/ft_sdk/Index';
const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
.setDebug(true)
.setSdkLogLevel(SDKLogLevel.D);
FTSDK.install(sdkConfig, this.context);
リリースバージョンを公開する際は、この設定を無効にすることを推奨します。
SDK 内部ログのローカルファイルへの書き込み¶
オンラインや偶発的な問題を調査する際に、SDK の内部診断ログをアプリケーションのサンドボックス内のローカルファイルに書き込むことで、後続のエクスポートと分析が容易になります。setDebug(true) を同時に有効にする必要があります。setSdkLogLevel(...) で記録するログレベルを制御できます。
import { FTSDK, FTSDKConfig, SDKLogLevel } from '@guancecloud/ft_sdk/Index';
const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
.setDebug(true)
.setSdkLogLevel(SDKLogLevel.D)
.setEnableInnerLogFile(true, {
singleFileMaxSize: 5 * 1024 * 1024,
totalFileMaxSize: 50 * 1024 * 1024,
flushBatchSize: 20,
flushIntervalMs: 200
});
FTSDK.install(sdkConfig, this.context);
FTInnerLogFileConfig¶
setEnableInnerLogFile(true, config) に FTInnerLogFileConfig を渡すことで、内部ログファイルの書き込みポリシーを調整できます。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
singleFileMaxSize |
number |
いいえ | 単一ログファイルのサイズ、デフォルト 5MB、範囲 1MB ~ 10MB |
totalFileMaxSize |
number |
いいえ | ログファイルの合計サイズしきい値、デフォルト 50MB、範囲 10MB ~ 100MB。しきい値を超えると、最も古い履歴ローテーションファイルから削除を開始し、現在のファイルは保持されます |
flushBatchSize |
number |
いいえ | バッチ書き込み件数、デフォルト 20、範囲 1 ~ 100 |
flushIntervalMs |
number |
いいえ | フラッシュ間隔、デフォルト 200ms、範囲 50ms ~ 5000ms |
ログファイルはデフォルトで、アプリケーションサンドボックスの filesDir/ft_sdk_logs/ ディレクトリに書き込まれます。
- 現在のログファイル:
ft_inner_current.log - 履歴ローテーションファイル:
ft_inner_*.log
ログの合計サイズが設定されたしきい値を超えると、SDK は最も古い履歴ローテーションファイルから削除を開始し、現在のログファイルは保持されます。内部ログファイルは SDK 自身の診断ログのみを記録し、FTLogger によって書き込まれるビジネスログは含みません。
内部ログの完全性を保つために、
FTSDK.install(...)の前にこの設定を行い、同時にsetDebug(true)を有効にする必要があります。設定範囲外の数値は、SDK によって許容範囲内に切り詰められ、丸められます。
データ送信とキャッシュ¶
データが送信されない¶
以下の順序で調査することを推奨します。
- 前提条件 が完了していることを確認する。特に DataKit と RUM コレクターの設定
- アプリケーションデバイスが
datakitUrlまたはdatawayUrlにアクセスできることを確認する setProxy(...)、setProxyAuthenticator(...)、またはsetDns(...)を設定している場合、プロキシ、認証情報、DNS サーバー、または DoH アドレスが正しいことを確認する。これらの設定は SDK のデータアップロードリクエストにのみ影響します- Debug モードの有効化 を参照し、初期化と送信のログを確認する
- RUM で
installRUMConfigが実行され、検証が必要な収集項目が少なくとも 1 つ有効になっていることを確認する - SDK はデフォルトでアップロードデータに
deflate圧縮を適用します。サーバー側またはネットワーク経路との互換性が疑われる場合は、一時的にsetCompressIntakeRequests(false)を設定して比較検証できます
キャッシュと同期¶
- SDK の自動同期は 10 秒の集約ウィンドウを使用するため、収集後すぐにアップロードが開始されないのは正常な動作です
FTSDKConfig.setAutoSync(false)またはFTSDK.setAutoSync(false)で自動同期を無効にした場合は、手動で SDK 初期化 のFTSDK.flushSyncData()を呼び出す必要があります- SDK 初期化後は、
FTSDK.setAutoSync(true)で自動同期を再度有効にできます FTSDK.flushSyncData()は 10 秒の集約ウィンドウを待たず、可能な限り保留中の RUM および Log ワーカーキューをフラッシュした後、すぐにアップロードをスケジュールします- ローカルキャッシュに異常がある場合は、
FTSDK.clearAllData()を使用して未送信のデータをクリアした後、再検証できます
ネットワークリクエストの自動収集¶
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 ヘッダーを自動的に注入する必要がある場合は、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 })
関連ドキュメント¶
- インストールとエントリーページ:アプリケーションアクセス を参照
- 初期化パラメータ:SDK 初期化 を参照
- RUM ネットワーク収集:RUM 設定 を参照
- Trace 分散トレーシング:Trace 設定 を参照