コンテンツにスキップ

ミニプログラム SDK リモート設定と強制サンプリング

ミニプログラム SDK 2.2.16 以降では、ミニプログラムを再リリースすることなくサンプリングレートなどのランタイム設定を調整できるほか、リモートから配信されたビジネスフィールドに基づいて、指定したユーザーの現在のセッションを強制的に収集することも可能です。

リモート設定を有効にする

初期化時に remoteConfiguration: true を設定します。SDK は即座にローカル設定で起動し、リモート設定のリクエストが初回画面収集をブロックすることはありません。

過去のバージョンでは remoteConfigration というスペルが使用されていましたが、2.2.16 では引き続きこのパラメータも互換性があります。ただし、新しいプロジェクトでは remoteConfiguration を使用してください。

const { datafluxRum } = require('@cloudcare/rum-miniapp')

datafluxRum.init({
  applicationId: 'appid_xxxxxxx',
  site: 'https://rum-openway.guance.com',
  clientToken: 'client_token_xxxxx',
  service: 'miniapp-demo',
  env: 'production',
  version: '1.0.0',
  sessionSampleRate: 20,
  allowedTracingOrigins: ['https://api.example.com'],
  allowTraceHeaderWithoutSession: true,
  remoteConfiguration: true,
  remoteConfigurationFetchTimeout: 3000,
})
パラメータ デフォルト値 説明
sessionSampleRate number 100 sampleRate の互換エイリアス、範囲は 0 から 100。両方が設定されている場合は sampleRate が優先されます
allowedTracingOrigins Array [] Trace Header の注入を許可するリクエスト Origin のリスト。文字列と正規表現をサポートします
allowTraceHeaderWithoutSession boolean false 現在のセッションがサンプリングにヒットしなかった場合でも、allowedTracingOrigins にヒットしたリクエストに Trace Header を注入するかどうか。有効にしても、そのセッションの RUM データがアップロードされることはありません
remoteConfiguration boolean false リモート設定を非同期で取得して適用するかどうか
remoteConfigration boolean false 古いスペルとの互換性のための項目。新しいプロジェクトでは推奨されません
remoteConfigurationFetchTimeout number 3000 リモート設定リクエストのタイムアウト時間(ミリ秒)。リクエストが失敗した場合やタイムアウトした場合は、ローカル設定が引き続き使用されます

有効にすると、SDK は以下のアドレスにリクエストを送信します:

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

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

設定配信形式

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

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

sessionSampleRatesampleRate として適用されます。vip_id などのカスタムフィールドは SDK の動作を自動的に変更しません。ビジネスコードで読み取った後、自身で処理する必要があります。

サンプリングされていないセッションの Trace Header

デフォルトでは、現在のセッションが RUM サンプリングにヒットした場合のみ、SDK は allowedTracingOrigins にヒットしたリクエストに Trace Header を注入します。

allowTraceHeaderWithoutSession: true を設定すると、現在のセッションがサンプリングにヒットしなかった場合でも、SDK は条件に一致するリクエストに Trace Header を注入します。この設定により、強制的なサンプリングや新しいセッションの作成は行われず、サンプリングされていないセッションの View、Action、Resource、Error などの RUM データがアップロードされることもありません。

この設定はリモート更新をサポートしています。リモート値が返されるまではローカル設定に従って処理され、返された後は後続のリクエストにのみ影響します。

リモート設定を取得する

datafluxRum.init() の後に getRemoteConfiguration(callback) を呼び出します:

datafluxRum.getRemoteConfiguration(function (remoteConfig) {
  console.log('remote config:', remoteConfig)
})
  • リクエストが完了していない場合、コールバックは今回のリクエストが完了するのを待ちます。
  • リクエストが既に完了している場合、コールバックはキャッシュされた結果を即座に受け取り、新たにリクエストを開始することはありません。
  • 各コールバックは独立したコピーを受け取ります。返されたオブジェクトを変更しても、SDK 内部の設定は変更されません。
  • リモート設定が有効でない場合、リクエストが失敗した場合、タイムアウトした場合、または返された内容を解析できない場合、コールバックは空のオブジェクト {} を受け取ります。

現在のセッションを強制収集する

setForcedSession() は、現在のセッションを強制的に収集するために使用します。ローカルまたはリモートのサンプリングレートにヒットしなかった場合でも、呼び出し後の RUM データは引き続きアップロードされ、以下の情報が付与されます:

session_is_forced=true

以下の例では、リモートから配信された VIP ユーザーリストに基づいて強制収集を行います:

var currentUserId = 'user-1'

datafluxRum.setUser({ id: currentUserId })
datafluxRum.getRemoteConfiguration(function (remoteConfig) {
  var 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() は呼び出し後のデータにのみ影響し、それ以前に破棄されたデータを再送信することはありません。強制状態は現在のセッションのみに属します。セッションが期限切れになると、最新のサンプリングレートに基づいて再計算されます。

セッションとランタイムの動作

  • セッションは applicationId ごとに独立して保存されます。異なる RUM アプリケーション間でセッション ID やサンプリング結果が再利用されることはありません。
  • 15 分間連続してアクティビティがない場合、新しいセッションが作成されます。1 つのセッションの最大長は 4 時間です。
  • ページへの進入、クリック、タッチ、入力、および宣言されたページスクロールによってセッションが延長されます。trackInteractions を無効にすると、自動アクション収集のみが停止し、セッションのアクティビティ認識には影響しません。
  • リモート設定が返される前のデータはローカル設定で処理され、遡って再計算されることはありません。
  • 今回の初期化で新しく作成され、まだ強制サンプリングされていないセッションについては、リモートサンプリングレートが返された後、サンプリング結果を再計算できます。ストレージから復元されたセッションは、元のサンプリング決定を保持します。
  • SDK が wx.request および wx.downloadFile をプロキシする場合、ビジネス呼び出しの元の戻り値と Promise の動作が維持されます。

フィードバック

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