RUM 設定¶
このドキュメントでは、HarmonyOS RUM の初期化設定と手動収集機能について説明します。
RUM 初期化設定¶
import { FTSDK, FTRUMConfig } from '@guancecloud/ft_sdk/Index';
const rumConfig = new FTRUMConfig()
.setRumAppId('your-app-id')
.setSamplingRate(1.0)
.setSessionErrorSampleRate(1.0)
.setEnableTraceUserAction(true)
.setEnableTraceUserView(true)
.setEnableTraceUserResource(true)
.setEnableTrackAppUIBlock(true)
.setEnableTrackAppANR(true)
.setEnableTrackAppCrash(true)
.setEnableTraceWebView(true);
FTSDK.installRUMConfig(rumConfig);
| メソッド | 型 | 必須 | 説明 |
|---|---|---|---|
setRumAppId |
string |
はい | RUM アプリケーション ID。[リアルユーザーモニタリング(RUM)] アプリケーションから取得します。 |
setSamplingRate |
number |
いいえ | RUM サンプリングレート。範囲 [0.0, 1.0]、デフォルト 1.0 |
setSessionErrorSampleRate |
number |
いいえ | エラーサンプリングレート。範囲 [0.0, 1.0]、デフォルト 0.0 |
setEnableTraceUserAction |
boolean |
いいえ | 自動アクション追跡を有効にするかどうか。デフォルト false |
setEnableTraceUserView |
boolean |
いいえ | ページ追跡を有効にするかどうか。デフォルト false |
setEnableTraceUserResource |
boolean |
いいえ | リソース追跡を有効にするかどうか。デフォルト false |
setEnableTrackAppUIBlock |
boolean, number |
いいえ | UI ブロック検出を有効にするかどうか。デフォルト false。第2引数 blockDurationMs は検出時間範囲を制御します [100,)、単位はミリ秒、デフォルト 1000ms |
setEnableTrackAppANR |
boolean |
いいえ | ANR モニタリングを有効にするかどうか。デフォルト false |
setEnableTrackAppCrash |
boolean |
いいえ | アプリクラッシュモニタリングを有効にするかどうか。デフォルト false。Native Crash が必要な場合は、@guancecloud/ft_native に依存する必要があります。 |
setEnableTraceWebView |
boolean |
いいえ | WebView データ収集を有効にするかどうか。デフォルト false。完全に連携するには、WebView データモニタリング を参照してください。 |
setAllowWebViewHost |
Array<string> \| null |
いいえ | WebView JavaScript Bridge で使用を許可する Host のホワイトリストを設定します。null または空配列を渡すと Host は制限されません。制限する場合は、WebView データモニタリング を参照してください。 |
setRumCacheLimitCount |
number |
いいえ | RUM データキャッシュ数の上限。デフォルト 100000、最小値 10000 |
setRumCacheDiscardStrategy |
RUMCacheDiscard |
いいえ | RUM データが上限に達した後の破棄ルールを設定します。デフォルトは RUMCacheDiscard.DISCARD。DISCARD は追加データを破棄、DISCARD_OLDEST は古いデータを破棄します。 |
RUM 手動収集¶
FTRUMConfig で setEnableTraceUserAction、setEnableTraceUserView、setEnableTraceUserResource、setEnableTrackAppUIBlock、setEnableTrackAppCrash、setEnableTrackAppANR を設定することで、Action、View、Resource、LongTask、Error の自動収集を実現します。カスタム収集が必要な場合は、FTRUMGlobalManager を使用して手動でレポートできます。
View¶
使用方法¶
/**
* View のライフサイクルを開始します。
*
* @param viewName View 名。
* @param property オプションの拡張プロパティ。
*/
startView(viewName: string, property?: Record<string, object>): Promise<void>
/**
* 現在の View のライフサイクルを終了します。
*
* @param property オプションの拡張プロパティ。
*/
stopView(property?: Record<string, object>): Promise<void>
/**
* 現在の View のロード時間を更新します。
*
* @param loadTime ロード時間。単位はナノ秒。
*/
updateLoadTime(loadTime: number): void
コード例¶
import { FTRUMGlobalManager } from '@guancecloud/ft_sdk/Index';
@Entry
@Component
struct ProductPage {
async aboutToAppear() {
// シナリオ 1:
await FTRUMGlobalManager.getInstance().startView('ProductPage');
// シナリオ 2:拡張プロパティ付き
const viewProperty: Record<string, object> = { page_category: new String('product'), page_id: new String('12345') };
await FTRUMGlobalManager.getInstance().startView('ProductPage', viewProperty);
}
async aboutToDisappear() {
// シナリオ 1:
await FTRUMGlobalManager.getInstance().stopView();
// シナリオ 2:
const stopViewProperty: Record<string, object> = { view_duration: new Number(1000) };
await FTRUMGlobalManager.getInstance().stopView(stopViewProperty);
}
build() {
Column() {
Text('Product Page');
}
}
}
Action¶
使用方法¶
/**
* 完了した Action を追加します。このデータは Error、Resource、LongTask に関連付けられません。
*
* @param actionName Action 名。
* @param actionType Action タイプ。例:`click`。
* @param durationOrProperty オプション。数値を渡すと持続時間(ナノ秒)を表します。Record を渡すと拡張プロパティを表します。
* @param property オプション。第3引数が持続時間の場合のみ、拡張プロパティを渡します。
*/
addAction(
actionName: string,
actionType: string,
durationOrProperty?: number | Record<string, object>,
property?: Record<string, object>
): void
/**
* Action を開始します。SDK が終了タイミングを管理し、近くで発生した Resource、LongTask、Error データを関連付けます。
*
* @param actionName Action 名。
* @param actionType Action タイプ。例:`click`。
* @param property オプションの拡張プロパティ。
*/
startAction(
actionName: string,
actionType: string,
property?: Record<string, object>
): void
addAction(...) は直接完了する Action 向けで、Error、Resource、LongTask などのデータを関連付けられません。duration の単位はナノ秒です。第3引数には直接拡張プロパティを渡せます。持続時間と拡張プロパティを両方渡す場合は、それぞれ第3、第4引数として渡します。
startAction(...) は SDK が終了タイミングと関連データを管理します。現時点では stopAction(...) や待機状態などの手動制御インターフェースは提供されていません。
コード例¶
import { FTRUMGlobalManager } from '@guancecloud/ft_sdk/Index';
// シナリオ 1:
FTRUMGlobalManager.getInstance().addAction('buy_button_click', 'click');
// シナリオ 2: 拡張プロパティ付き
const actionProperty: Record<string, object> = {
product_id: new String('product_id'),
product_name: new String('product_name')
};
FTRUMGlobalManager.getInstance().addAction('buy_button_click', 'click', actionProperty);
// シナリオ 1:
FTRUMGlobalManager.getInstance().startAction('buy_button_click', 'click');
// シナリオ 2: 拡張プロパティ付き
const startActionProperty: Record<string, object> = {
product_id: new String('product_id'),
product_name: new String('product_name')
};
FTRUMGlobalManager.getInstance().startAction('buy_button_click', 'click', startActionProperty);
Error¶
使用方法¶
/**
* Error をレポートします。
*
* @param log エラーログまたはスタック情報。
* @param message メッセージ。
* @param errorType エラータイプ。`ErrorType` 列挙型または文字列を渡せます。
* @param state エラー発生時のアプリケーション実行状態。
* @param property オプションの拡張プロパティ。
*/
addError(
log: string,
message: string,
errorType: string | ErrorType,
state: AppState,
property?: Record<string, object> | null
): void
/**
* 指定された発生時刻の Error をレポートします。
*
* @param log エラーログまたはスタック情報。
* @param message メッセージ。
* @param dateline エラー発生時刻。単位はナノ秒。
* @param errorType エラータイプ。`ErrorType` 列挙型または文字列を渡せます。
* @param state エラー発生時のアプリケーション実行状態。
* @param property オプションの拡張プロパティ。
*/
addError(
log: string,
message: string,
dateline: number,
errorType: string | ErrorType,
state: AppState,
property?: Record<string, object> | null
): void
カスタム Error には ErrorType.CUSTOM を使用してください。dateline はオプションの発生時刻で、単位はナノ秒です。
コード例¶
import { FTRUMGlobalManager, ErrorType, AppState } from '@guancecloud/ft_sdk/Index';
import { systemDateTime } from '@kit.BasicServicesKit';
// シナリオ 1:
FTRUMGlobalManager.getInstance().addError('error log', 'error message', ErrorType.CUSTOM, AppState.RUN);
// シナリオ 2:遅延レポート時に、エラーが実際に発生した時刻を渡します(単位:ナノ秒)。
const errorTimeNs = systemDateTime.getTime(true);
FTRUMGlobalManager.getInstance().addError('error log', 'error message', errorTimeNs, ErrorType.CUSTOM, AppState.RUN);
// シナリオ 3:拡張プロパティ付き。
const errorProperty: Record<string, object> = {
module: new String('checkout'),
action: new String('submit_order')
};
FTRUMGlobalManager.getInstance().addError('error log', 'error message', ErrorType.CUSTOM, AppState.RUN, errorProperty);
LongTask¶
使用方法¶
/**
* LongTask をレポートします。
*
* @param log ブロック発生時のログまたはスタック情報。
* @param duration ブロックの持続時間。単位はナノ秒。
* @param property オプションの拡張プロパティ。
*/
addLongTask(log: string, duration: number, property?: Record<string, string | number | boolean>): void
duration の単位はナノ秒です。
コード例¶
import { FTRUMGlobalManager } from '@guancecloud/ft_sdk/Index';
const durationMs = 350;
const durationNs = durationMs * 1000000;
const stack = new Error('checkout render long task').stack ?? 'Stack trace not available';
// シナリオ 1:
FTRUMGlobalManager.getInstance().addLongTask(stack, durationNs);
// シナリオ 2:拡張プロパティ付き。
const longTaskProperty: Record<string, string | number | boolean> = {
module: 'checkout',
operation: 'render_order_list',
threshold_ms: 200
};
FTRUMGlobalManager.getInstance().addLongTask(stack, durationNs, longTaskProperty);
Resource¶
使用方法¶
/**
* Resource のライフサイクルを開始します。
*
* @param resourceId リソースの一意の識別子。`stopResource`、`addResource` と同じ値を使用する必要があります。
* @param property オプションの拡張プロパティ。
*/
startResource(resourceId: string, property?: Record<string, object>): void
/**
* Resource のライフサイクルを終了します。
*
* @param resourceId リソースの一意の識別子。`startResource` と同じ値を使用する必要があります。
* @param property オプションの拡張プロパティ。
*/
stopResource(resourceId: string, property?: Record<string, object>): void
/**
* Resource のリクエスト、レスポンス、ネットワークパフォーマンスデータを補完します。
*
* @param resourceId リソースの一意の識別子。`startResource`、`stopResource` と同じ値を使用する必要があります。
* @param resourceParams リソースの詳細。URL、リクエストメソッド、レスポンスステータス、レスポンス長、拡張プロパティなど。
* @param netStatusBean ネットワークパフォーマンスデータ。DNS、TCP、TTFB、レスポンス時間など。
*/
addResource(resourceId: string, resourceParams: ResourceParams, netStatusBean: NetStatusBean): void
startResource(...)、stopResource(...) に渡された拡張プロパティは、ResourceParams のプロパティと、呼び出し順にマージされます。リソースのステータスコードとレスポンス長は ResourceParams で設定し、stopResource(...) の引数としては渡さなくなりました。
コード例¶
import {
FTRUMGlobalManager,
ResourceParams,
NetStatusBean
} from '@guancecloud/ft_sdk/Index';
const resourceId = 'https://api.example.com/data';
// シナリオ 1:
// リクエスト開始
FTRUMGlobalManager.getInstance().startResource(resourceId);
// リクエスト終了後、リクエスト、レスポンス、ネットワークパフォーマンスデータを補完。
const resourceParams = new ResourceParams();
resourceParams.setUrl(resourceId);
resourceParams.setResourceStatus(200);
resourceParams.setResponseContentLength(1024);
resourceParams.resourceType = 'xhr';
const netStatusBean = new NetStatusBean();
netStatusBean.setResourceHostIP('192.168.1.1');
netStatusBean.setDNSTime(10000000);
netStatusBean.setTcpTime(20000000);
netStatusBean.setTTFB(50000000);
netStatusBean.setResponseTime(100000000);
FTRUMGlobalManager.getInstance().stopResource(resourceId);
FTRUMGlobalManager.getInstance().addResource(resourceId, resourceParams, netStatusBean);
// シナリオ 2:拡張プロパティ付き。以下は独立したリクエストです。使用時はシナリオ 1 の startResource と stopResource の呼び出しを置き換えてください。
const startResourceProperty: Record<string, object> = {
request_source: new String('checkout')
};
FTRUMGlobalManager.getInstance().startResource(resourceId, startResourceProperty);
const stopResourceProperty: Record<string, object> = {
response_cache: new Boolean(false)
};
FTRUMGlobalManager.getInstance().stopResource(resourceId, stopResourceProperty);
NetStatusBean プロパティ説明¶
NetStatusBean は、手動 Resource 収集のネットワークパフォーマンスデータを補完するために使用します。すべての時間パラメータの単位はナノ秒です。*StartTime は Resource 開始時刻からのオフセットを表します。設定されていない時間値はデフォルトで -1 となり、対応するメトリクスは書き込まれません。
| メソッド | 説明 |
|---|---|
setDNSTime |
DNS 解決時間 |
setDNSStartTime |
DNS 解決開始オフセット |
setTcpTime |
TCP 接続確立時間 |
setConnectStartTime |
TCP 接続確立開始オフセット |
setSSLTime |
SSL/TLS ハンドシェイク時間 |
setSslStartTime |
SSL/TLS ハンドシェイク開始オフセット |
setTTFB |
最初のバイトが到着するまでの待機時間(TTFB) |
setResponseTime |
レスポンス転送時間 |
setFirstByteTime |
最初のバイトフェーズの時間 |
setFirstByteStartTime |
最初のバイトフェーズ開始オフセット |
setDownloadTime |
レスポンスダウンロード時間 |
setDownloadTimeStart |
レスポンスダウンロード開始オフセット |
setHoleRequestTime |
リクエスト全体の時間(API 名はSDK定義に従い Hole スペルを保持) |
setResourceHostIP |
リソースサーバーの IP アドレス |
Resource 自動追跡¶
setEnableTraceUserResource(true) を有効にすると、SDK は RCP、Axios 互換モード、または @kit.NetworkKit HTTP インターセプターを介して送信されたリクエストを自動的に追跡します。
@guancecloud/ft_sdk_ext を導入する際は、src/main/... のような深いパスを避け、@guancecloud/ft_sdk_ext/Index から公開 API をインポートすることを推奨します。
RCP 自動追跡の導入¶
RUM 設定で setEnableTraceUserResource を有効にすると、SDK は RCP を介して送信された HTTP リクエストに対して Resource データを自動収集します。
現在のバージョンから、SDK はグローバルな RCP Session を自動的に作成または保持しなくなりました。代わりに、以下の機能を提供し、業務側で自由に組み立てられるようにします。
RCPTraceInterceptor:Trace Headers を自動注入RCPResourceInterceptor:Resourceデータとパフォーマンス指標を自動収集createFTRCPInterceptors():デフォルトの RCP インターセプターリストを返します。カスタムSessionConfigurationとマージするのに便利です。createFTRCPTrackConfig():デフォルトのインターセプターとTracingConfigurationを含むSessionConfigurationをすばやく生成します。
推奨導入方法:デフォルトの SessionConfiguration ファクトリ関数を使用
import { rcp } from '@kit.RemoteCommunicationKit';
import { createFTRCPTrackConfig } from '@guancecloud/ft_sdk/Index';
const session = rcp.createSession(
createFTRCPTrackConfig({
baseAddress: 'https://api.example.com'
})
);
// GET リクエスト
const request = new rcp.Request('/data', 'GET');
const response = await session.fetch(request);
// POST リクエスト
const headers: rcp.RequestHeaders = { 'Content-Type': 'application/json' };
const postRequest = new rcp.Request('/data', 'POST', headers, { name: 'test' });
const postResponse = await session.fetch(postRequest);
プロジェクトが SDK のルートエントリからインポートしている場合、以下も使用できます。
手動でのインターセプター組み立て
Session 設定を完全に制御する必要がある場合は、SDK が提供するインターセプターを直接使用することもできます。
import { rcp } from '@kit.RemoteCommunicationKit';
import { RCPTraceInterceptor, RCPResourceInterceptor } from '@guancecloud/ft_sdk/Index';
const session = rcp.createSession({
baseAddress: 'https://api.example.com',
interceptors: [
new RCPTraceInterceptor(),
new RCPResourceInterceptor()
],
requestConfiguration: {
tracing: {
collectTimeInfo: true
}
}
});
TracingConfiguration の説明:
collectTimeInfo: true:有効にすることを推奨。SDK はresponse.timeInfoに依存して DNS、TCP、SSL、TTFB、ダウンロード時間などのパフォーマンス指標を計算します。incomingHeader/outgoingHeader:オプション。デフォルトで有効。incomingData/outgoingData:デフォルトでは無効で、追加のオーバーヘッドを削減します。
HTTP インターセプターの導入¶
業務で @kit.NetworkKit の http.createHttp() を使用してリクエストを送信する場合、@guancecloud/ft_sdk_ext が提供する HTTP インターセプターを使用して、自動 Trace Header 注入と Resource 収集を完了できます。この導入方法は 0.1.14-alpha03 以降でサポートされ、HarmonyOS API 22 以上が必要です。
事前にプロジェクトに以下がインストールされていることを確認してください。
ft_sdk.harをインストールし、oh-package.json5で@guancecloud/ft_sdkとして宣言ft_sdk_ext.harをインストールし、oh-package.json5で@guancecloud/ft_sdk_extとして宣言- ローカル HAR 経由で
ft_sdk_ext.harをインストールする場合は、プロジェクトルートのoh-package.json5にoverrides["@guancecloud/ft_sdk"] = "file:./libs/ft_sdk.har"を追加し、内部依存関係をローカル HAR に書き換える必要があります。
SDK は以下の機能を提供します。
HttpInitialRequestInterceptor:リクエスト開始時に Trace Header を注入し、Resourceを開始します。HttpFinalResponseInterceptor:レスポンス終了時にResourceデータを補完し、収集を終了します。createFTHttpInterceptorChain():再利用可能なhttp.HttpInterceptorChainを作成します。applyFTHttpTrack():デフォルトのインターセプターチェーンを単一のhttp.HttpRequestに直接マウントします。
2 つの導入方法を提供します。
方法1:SDK が提供するデフォルトファクトリを使用
import { http } from '@kit.NetworkKit';
import { createFTHttpInterceptorChain } from '@guancecloud/ft_sdk_ext/Index';
const request = http.createHttp();
const interceptorChain = createFTHttpInterceptorChain();
interceptorChain.apply(request);
try {
const response = await request.request('https://httpbin.org/get', {
method: http.RequestMethod.GET,
header: {
'Accept': 'application/json'
}
});
} finally {
request.destroy();
}
さらに業務独自のインターセプターを追加したい場合は、以下のように記述することもできます。
import { http } from '@kit.NetworkKit';
import { createFTHttpInterceptorChain } from '@guancecloud/ft_sdk_ext/Index';
const request = http.createHttp();
const interceptorChain = createFTHttpInterceptorChain({
interceptors: [
new CustomAfterInterceptor()// カスタムを追加
]
});
interceptorChain.apply(request);
この場合の実行順序は次のようになります。
[
new HttpInitialRequestInterceptor(),
new HttpFinalResponseInterceptor(),
new CustomAfterInterceptor()
]
方法2:手動で HttpInterceptorChain を組み立てる
業務に既にカスタムインターセプターがある場合、またはインターセプターの順序を自由に決定する必要がある場合は、手動で http.HttpInterceptorChain を作成することを推奨します。
import { http } from '@kit.NetworkKit';
import {
HttpInitialRequestInterceptor,
HttpFinalResponseInterceptor
} from '@guancecloud/ft_sdk_ext/Index';
const request = http.createHttp();
const interceptorChain = new http.HttpInterceptorChain();
interceptorChain.addChain([
new CustomBeforeInterceptor(),
new HttpInitialRequestInterceptor(),
new HttpFinalResponseInterceptor()
]);
interceptorChain.apply(request);
注意事項:
- HTTP インターセプターは、
@kit.NetworkKitが API 22+ で提供するインターセプター機能に依存します。API 22 未満の場合は、RCP または Axios 互換モードを使用してください。 http.createHttp()を直接使用する HTTP インターセプターモードでは、HttpRequestContextが現在のところ安定して実際のリクエストメソッドを取得できないため、ResourceのmethodがUNKNOWNとして記録される可能性があります。- 業務で
@ohos/axiosのinterceptorChainモードを使用する場合は、applyFTAxiosChainMethodBridge()を別途マウントして、axios の実際の method、url、headers をブリッジすることを推奨します。 @kit.NetworkKitのインターセプターコールバックは、現時点では RCPtimeInfoレベルの詳細な時間を公開しないため、現在はresourceLoadのみが補完されます。
Axios の導入¶
業務で @ohos/axios を使用する場合は、以下の方法で自動追跡を導入できます。
@guancecloud/ft_sdk:Axios のrequest/response interceptorsに基づく互換モード@guancecloud/ft_sdk_ext:0.1.14-alpha03以降、interceptorChainに基づく拡張モードを提供
@ohos/axios 2.2.4 以上¶
この導入方法は、Axios の request/response interceptors に基づいています。
import axios from '@ohos/axios';
import { applyFTAxiosTrack } from '@guancecloud/ft_sdk/Index';
const client = axios.create({
timeout: 10000
});
applyFTAxiosTrack(client);
この導入方法は、業務独自のインターセプターと共存して使用できます。
import axios from '@ohos/axios';
import { applyFTAxiosTrack } from '@guancecloud/ft_sdk/Index';
const client = axios.create({
timeout: 10000
});
applyFTAxiosTrack(client);
client.interceptors.request.use((config) => {
config.headers = {
...(config.headers || {}),
Authorization: 'Bearer <token>',
'X-Signature': 'signed-value'
};
return config;
});
client.interceptors.response.use((response) => {
return response;
});
実行順序の説明:
@ohos/axios互換モードでは、requestインターセプターの動作は 後登録・先実行 です。- つまり、複数の
request interceptorsは共存できますが、登録順序が FT に「変更前」と「変更後」のどちらのリクエストヘッダーが渡されるかに影響します。 - FT が業務の認証、署名などのフィールド補完後の最終的なリクエストヘッダーを収集するようにしたい場合は、推奨順序は 先に
applyFTAxiosTrack(client)を実行し、その後で業務のrequest interceptorを登録します。 - 上記の順序に従うと、業務の
request interceptorが先に実行され、FT がその後実行されて最終的なheadersを読み取ります。 - 順序を調整したい場合は、登録順序を変更するだけです。例えば、先に業務を登録し、その後
applyFTAxiosTrack(client)を呼び出すと、FT が先に実行され、業務インターセプターが後に実行されます。
@ohos/axios 2.2.8 以上¶
@ohos/axios 2.2.8 以上の場合は、@guancecloud/ft_sdk_ext の interceptorChain を介して FT 自動追跡を導入することを優先的に推奨します。
import axios from '@ohos/axios';
import {
createFTHttpInterceptorChain,
applyFTAxiosChainMethodBridge
} from '@guancecloud/ft_sdk_ext/Index';
const client = axios.create({
timeout: 10000,
interceptorChain: createFTHttpInterceptorChain()
});
applyFTAxiosChainMethodBridge(client);
const response = await client.post('https://api.example.com/data', {
source: 'axios',
message: 'ft auto track'
});
複数のインターセプターが共存し、実行順序を手動で調整する必要がある場合、または業務カスタムインターセプターと統一的に組み立てる必要があるシナリオについては、HTTP インターセプターの導入 の内容を参照し、必要に応じて HttpInitialRequestInterceptor と HttpFinalResponseInterceptor を組み合わせてください。
単一リクエストとして渡す場合は、以下のように記述することもできます。
import axios from '@ohos/axios';
import { createFTHttpInterceptorChain } from '@guancecloud/ft_sdk_ext/Index';
const response = await axios.request({
url: 'https://httpbin.org/post',
method: 'post',
data: {
source: 'axios',
message: 'ft auto track'
},
responseType: 'string',
interceptorChain: createFTHttpInterceptorChain()
});
注意事項:
- Axios インスタンスを作成する際に、
interceptorChainを一元的に注入し、applyFTAxiosChainMethodBridge(client)を呼び出して、bridge の欠落によるResourcemethod の記録不正確を防ぐことを推奨します。 interceptorChainモードは@guancecloud/ft_sdk_ext(ローカル HAR ファイル名はft_sdk_ext.harのまま)に依存し、HarmonyOS API 22+ が必要です。- Trace Headers を自動注入するには、インターセプターチェーンの作成に加え、Trace 設定で
setEnableAutoTrace(true)を有効にする必要があります。 Resourceを自動収集するには、RUM 設定でsetEnableTraceUserResource(true)を有効にする必要があります。- 呼び出し側に既にカスタム HTTP/Axios インターセプターがある場合は、
HttpInitialRequestInterceptor、HttpFinalResponseInterceptorを直接使用して順序を手動で組み立て、FT 自動追跡後にurl、method、headersが再度書き換えられるのを防ぐことを推奨します。 - SDK はインターセプターとデフォルト設定のファクトリ関数のみを提供します。RCP Session の作成とライフサイクルは業務側で管理してください。
- 業務で
rcp.createSession()を直接使用して Session を作成する場合は、SDK が提供するインターセプターを自分で追加する必要があります。追加しないと、リクエストは自動追跡されません。 - 業務で
http.createHttp()または@ohos/axiosを直接使用する場合は、applyFTHttpTrack()、applyFTAxiosTrack()、createFTHttpInterceptorChain()を明示的にマウントする必要があります。AxiosinterceptorChainモードでは、applyFTAxiosChainMethodBridge(client)も呼び出す必要があります。
Resource パフォーマンス指標の説明¶
HarmonyOS SDK は、RCP(Remote Call Protocol)の TimeInfo インターフェースを介してネットワークリクエストのパフォーマンス指標(DNS、TCP、SSL、TTFB など)を取得します。
TTFB 計算の説明:
- HarmonyOS TTFB:
startTransferTimeMs - preTransferTimeMsで計算します。サーバー処理時間、ネットワーク転送時間、レスポンスヘッダー受信時間を含みます。 -
Android TTFB:レスポンスヘッダー受信時間のみを表し、通常は非常に短いです。
-
DNS 時間:
nameLookupTimeMs - TCP 時間:
connectTimeMs - nameLookupTimeMs - SSL 時間:
tlsHandshakeTimeMs - connectTimeMs - TTFB:
startTransferTimeMs - preTransferTimeMs - ダウンロード時間:
totalTimeMs - startTransferTimeMs
HarmonyOS RCP API の制限により、preTransferTimeMs はほぼ SSL 完了時間と等しくなります。そのため、HarmonyOS の TTFB にはサーバー処理時間が含まれ、通常は Android よりも大きくなります。これは予期されるプラットフォームの動作の違いであり、SDK の実装問題ではありません。