コンテンツにスキップ

UniApp 小程序 JavaScript SDK リモート設定

この記事では、UniApp 小程序 JavaScript SDK 2.2.19 以降のリモート設定、強制サンプリング、および Session の動作について説明します。

この記事は rum-uniapp JavaScript 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 は次のアドレスにリクエストを送信します:

{datakitOrigin|datakitUrl|site}/v1/env_variable?app_id={applicationId}

パブリックネットワークの DataWay を使用する場合、リクエストには clientToken も含まれます。対応するドメイン名を小程序プラットフォームのリクエスト許可ドメイン名リストに追加する必要があります。

設定の配信形式

リモート設定のキーは次の形式を使用します:

R.{applicationId}.{設定名}

例:

{
  "R.appid_xxxxxxx.sessionSampleRate": 20,
  "R.appid_xxxxxxx.vip_id": "[\"user-1\", \"user-2\"]"
}

SDK は R.{applicationId}. プレフィックスを削除します。ビジネスロジックは getRemoteConfiguration() を使用して取得します:

{
  "sessionSampleRate": 20,
  "vip_id": "[\"user-1\", \"user-2\"]"
}

現在、リモート更新をサポートしている項目は次のとおりです:

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 データは引き続き報告され、次のタグが付与されます:

session_is_forced=true

次の例では、リモートで配信された 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 の動作が維持されます。

フィードバック

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