UniApp 小程序 JavaScript SDK リモート設定¶
この記事では、UniApp 小程序 JavaScript SDK 2.2.19 以降のリモート設定、強制サンプリング、および Session の動作について説明します。
この記事は
rum-uniappJavaScript SDK にのみ適用され、GC-JSPlugin+GC-UniPluginの0.3.0以降の Native RUM 導入方法には適用されません。
リモート設定を有効にする¶
初期化時に remoteConfiguration: true を設定します。SDK はすぐにローカル設定に従って起動し、リモート設定のリクエストは初回画面収集をブロックしません。リクエストが返された後、サポートされている設定項目は実行時に更新されます。
過去のバージョンでは remoteConfigration というスペルが使用されていましたが、2.2.19 でもこのパラメーターは引き続き互換性があります。ただし、新しいプロジェクトでは remoteConfiguration を使用する必要があります。
const { datafluxRum } = require('@cloudcare/rum-uniapp')
const rumConfig = {
applicationId: 'appid_xxxxxxx',
site: 'https://rum-openway.guance.com',
clientToken: 'client_token_xxxxx',
service: 'uniapp-demo',
env: 'production',
version: '1.0.0',
sessionSampleRate: 20,
allowedTracingOrigins: ['https://api.example.com'],
allowTraceHeaderWithoutSession: true,
remoteConfiguration: true,
remoteConfigurationFetchTimeout: 3000,
}
// Vue2
datafluxRum.init(Vue, rumConfig)
// Vue3 プロジェクトの場合は次のように変更:
// datafluxRum.initVue3(rumConfig)
| パラメーター | 型 | デフォルト値 | 説明 |
|---|---|---|---|
sessionSampleRate |
number | 100 |
sampleRate の互換エイリアス。範囲は 0 から 100 です。両方が設定されている場合は sampleRate が優先されます |
allowedTracingOrigins |
Array | [] |
Trace Header の注入を許可するリクエスト Origin のリスト。文字列と正規表現をサポートします |
allowTraceHeaderWithoutSession |
boolean | false |
現在の Session がサンプリングにヒットしなかった場合でも、allowedTracingOrigins にヒットするリクエストに Trace Header を注入するかどうか。有効にしても、この Session の RUM データは報告されません |
remoteConfiguration |
boolean | false |
リモート設定を非同期で取得して適用するかどうか |
remoteConfigration |
boolean | false |
旧スペルとの互換性のための項目。新しいプロジェクトでは推奨されません |
remoteConfigurationFetchTimeout |
number | 3000 |
リモート設定リクエストのタイムアウト時間(ミリ秒単位)。リクエストが失敗するかタイムアウトした場合は、ローカル設定が引き続き使用されます |
有効にすると、SDK は次のアドレスにリクエストを送信します:
パブリックネットワークの DataWay を使用する場合、リクエストには clientToken も含まれます。対応するドメイン名を小程序プラットフォームのリクエスト許可ドメイン名リストに追加する必要があります。
設定の配信形式¶
リモート設定のキーは次の形式を使用します:
例:
SDK は R.{applicationId}. プレフィックスを削除します。ビジネスロジックは getRemoteConfiguration() を使用して取得します:
現在、リモート更新をサポートしている項目は次のとおりです:
sampleRate
sessionSampleRate
service
env
version
trackInteractions
traceType
traceId128Bit
allowedTracingOrigins
allowTraceHeaderWithoutSession
sessionSampleRate は sampleRate として適用されます。vip_id などのカスタムフィールドは SDK の動作を自動的に変更しないため、ビジネスコードで読み取って自分で処理する必要があります。
サンプリングされていない Session の Trace Header¶
デフォルトでは、現在の Session が RUM サンプリングにヒットした場合にのみ、SDK は allowedTracingOrigins にヒットするリクエストに Trace Header を注入します。
allowTraceHeaderWithoutSession: true を設定すると、現在の Session がサンプリングにヒットしなかった場合でも、SDK は条件を満たすリクエストに Trace Header を注入します。この設定は、サンプリングを強制したり、新しい Session を作成したりしません。また、サンプリングされていない Session の View、Action、Resource、Error などの RUM データは報告されません。
const rumConfig = {
sessionSampleRate: 0,
traceType: 'w3c_traceparent',
allowedTracingOrigins: ['https://api.example.com'],
allowTraceHeaderWithoutSession: true,
}
この設定はリモート更新をサポートしています。リモート値が返される前はローカル設定に従って処理され、返された後は後続のリクエストにのみ影響します。
リモート設定の取得¶
init() または initVue3() の後に getRemoteConfiguration(callback) を呼び出します:
datafluxRum.getRemoteConfiguration(function (remoteConfig) {
console.log('remote config:', remoteConfig)
})
- リクエストが完了していない場合、コールバックは今回のリクエストが完了するのを待ちます。
- リクエストが既に完了している場合、コールバックはすぐにキャッシュされた結果を受け取ります。再度リクエストが発行されることはありません。
- 各コールバックは独立したコピーを受け取ります。返されたオブジェクトを変更しても SDK 内部の設定は変わりません。
- リモート設定が有効になっていない場合、リクエストが失敗した場合、タイムアウトした場合、または返された内容を解析できない場合、コールバックは空のオブジェクト
{}を受け取ります。
現在の Session の強制収集¶
setForcedSession() は、現在の Session を強制的に収集するために使用されます。ローカルまたはリモートのサンプリングレートがヒットしなかった場合でも、呼び出し後の RUM データは引き続き報告され、次のタグが付与されます:
次の例では、リモートで配信された VIP ユーザーリストに基づいて強制収集を行います:
const currentUserId = 'user-1'
datafluxRum.setUser({ id: currentUserId })
datafluxRum.getRemoteConfiguration(function (remoteConfig) {
let vipIds = remoteConfig && remoteConfig.vip_id
if (typeof vipIds === 'string') {
try {
vipIds = JSON.parse(vipIds)
} catch (error) {
vipIds = []
}
}
if (Array.isArray(vipIds) && vipIds.map(String).indexOf(currentUserId) !== -1) {
datafluxRum.setForcedSession()
datafluxRum.addRumGlobalContext('vip_force_collect', true)
}
})
setForcedSession() は呼び出し後のデータにのみ影響し、それ以前に破棄されたデータが再送信されることはありません。強制状態は現在の Session にのみ属します。Session が期限切れになると、再度最新のサンプリングレートに基づいて計算されます。
Session と実行時の動作¶
- Session は
applicationIdごとに独立して保存されます。異なる RUM アプリケーション間で Session ID やサンプリング結果が再利用されることはありません。 - 15 分間連続してアクティビティがない場合、新しい Session が作成されます。1 つの Session の最大長は 4 時間です。
- ページへの進入、クリック、タッチ、入力、および宣言されたページスクロールによって Session が更新されます。
trackInteractionsを無効にすると、自動 Action 収集のみが停止され、Session のアクティビティ認識には影響しません。 - リモート設定が返される前のデータはローカル設定に従って処理され、遡って再計算されることはありません。
- 今回の初期化で新しく作成され、まだ強制サンプリングされていない Session の場合、リモートサンプリングレートが返された後にサンプリング結果を再計算できます。ストレージから復元された Session は、元のサンプリング決定を保持します。
- SDK が
uni.requestとuni.downloadFileをプロキシする場合、ビジネス呼び出しの元の戻り値と Promise の動作が維持されます。