RUM 設定¶
RUM 初期化設定¶
// RUM を有効化
FTRumConfig *rumConfig = [[FTRumConfig alloc]initWithAppid:appid];
rumConfig.enableTraceUserView = YES;
rumConfig.deviceMetricsMonitorType = FTDeviceMetricsMonitorAll;
rumConfig.monitorFrequency = FTMonitorFrequencyRare;
rumConfig.enableTraceUserAction = YES;
rumConfig.enableTraceUserResource = YES;
rumConfig.enableTrackAppFreeze = YES;
rumConfig.enableTrackAppCrash = YES;
rumConfig.enableTrackAppANR = YES;
rumConfig.errorMonitorType = FTErrorMonitorAll;
[[FTMobileAgent sharedInstance] startRumWithConfigOptions:rumConfig];
let rumConfig = FTRumConfig(appid: appid)
rumConfig.enableTraceUserView = true
rumConfig.deviceMetricsMonitorType = .all
rumConfig.monitorFrequency = .rare
rumConfig.enableTraceUserAction = true
rumConfig.enableTraceUserResource = true
rumConfig.enableTrackAppFreeze = true
rumConfig.enableTrackAppCrash = true
rumConfig.enableTrackAppANR = true
rumConfig.errorMonitorType = .all
FTMobileAgent.sharedInstance().startRum(withConfigOptions: rumConfig)
| プロパティ | 型 | 必須 | 説明 |
|---|---|---|---|
| appid | NSString | はい | RUM アプリケーション ID の一意識別子。RUM の appid を設定することで、RUM の収集機能が有効になります。appid の取得方法 |
| sampleRate | int | いいえ | サンプリングレート。範囲は [0,100]。0 は収集しない、100 はすべて収集、デフォルト値は 100。同一 session_id 内のすべての View、Action、LongTask、Error データに適用されます |
| sessionOnErrorSampleRate | int | いいえ | エラー収集率を設定します。sampleRate でサンプリングされなかったセッションでエラーが発生した場合、エラー発生前 1 分間のデータを収集できます。範囲は [0,100]。0 は収集しない、100 はすべて収集、デフォルト値は 0。同一 session_id 内のすべての View、Action、LongTask、Error データに適用されます。SDK 1.5.16 以上でサポート |
| enableTrackAppCrash | BOOL | いいえ | クラッシュログの収集を有効にするかどうかを設定します。デフォルトは NO |
| enableTrackAppANR | BOOL | いいえ | ANR イベントを収集します。デフォルトは NO |
| enableTrackAppFreeze | BOOL | いいえ | UI 処理落ちイベントを収集します。デフォルトは NO。-setEnableTrackAppFreeze:freezeDurationMs: メソッドを使用して、処理落ち収集を有効にし、しきい値を設定できます |
| freezeDurationMs | long | いいえ | UI 処理落ちのしきい値を設定します。範囲は [100,)、単位はミリ秒、デフォルトは 250ms。SDK 1.5.7 以上でサポート |
| enableTraceUserView | BOOL | いいえ | ユーザーの View 操作を追跡するかどうかを設定します。デフォルトは NO |
| enableTraceUserAction | BOOL | いいえ | ユーザーの Action 操作を追跡するかどうかを設定します。デフォルトは NO。view.accessibilityIdentifier を使用して action_name をカスタマイズできます |
| enableTraceUserResource | BOOL | いいえ | ユーザーのネットワークリクエストを追跡するかどうかを設定します。デフォルトは NO、ネイティブな http リクエストのみに作用します。注意:[NSURLSession sharedSession] を介して開始されたネットワークリクエストのパフォーマンスデータは収集できません。SDK 1.5.9 以降では、Swift の URLSession async/await APIs を介して開始されたネットワークリクエストの収集をサポートしています |
| resourceUrlHandler | FTResourceUrlHandler | いいえ | リソース収集ルールをカスタマイズします。デフォルトではフィルタリングされません。NO を返すと収集、YES を返すと収集しないことを意味します |
| errorMonitorType | FTErrorMonitorType | いいえ | エラーイベントモニタリングの補完タイプ。収集されたクラッシュデータにモニタリング情報を追加します。FTErrorMonitorBattery はバッテリー残量、FTErrorMonitorMemory はメモリ使用量、FTErrorMonitorCpu は CPU 使用率、デフォルトでは設定されません |
| deviceMetricsMonitorType | FTDeviceMetricsMonitorType | いいえ | ビューのパフォーマンスモニタリングタイプ、デフォルトでは設定されません。収集された View データに対応するモニタリング項目情報を追加します。FTDeviceMetricsMonitorMemory は現在のアプリのメモリ使用状況を監視、FTDeviceMetricsMonitorCpu は CPU 使用率を監視、FTDeviceMetricsMonitorFps は画面のフレームレートを監視します |
| monitorFrequency | FTMonitorFrequency | いいえ | ビューのパフォーマンスモニタリングのサンプリング周期。FTMonitorFrequencyDefault 500ms(デフォルト)、FTMonitorFrequencyFrequent 100ms、FTMonitorFrequencyRare 1000ms |
| enableResourceHostIP | BOOL | いいえ | リクエスト先のドメイン名アドレスの IP を収集するかどうか。>= iOS 13.0、>= tvOS 13.0 でサポート |
| globalContext | NSDictionary | いいえ | ユーザー監視データソースを区別するためのカスタムタグを追加します。トレーシング機能を使用する必要がある場合、パラメータ key は track_id、value は任意の数値にします。追加ルールはこちらを参照してください |
| rumCacheLimitCount | int | いいえ | RUM の最大キャッシュ数。デフォルトは 100_000。SDK 1.5.8 以上でこのパラメータをサポート |
| rumDiscardType | FTRUMCacheDiscard | いいえ | RUM の破棄ルールを設定します。デフォルトは FTRUMCacheDiscard。FTRUMCacheDiscard は RUM データ数が最大値を超えた場合、追加データを破棄します。FTRUMDiscardOldest は RUM データが最大値を超えた場合、古いデータを破棄します。SDK 1.5.8 以上でこのパラメータをサポート |
| resourcePropertyProvider | FTResourcePropertyProvider | いいえ | block コールバックを介して RUM Resource のカスタムプロパティを追加します。SDK 1.5.10 以上でこのパラメータをサポート。優先度は URLSession カスタム収集 よりも低くなります |
| enableTraceWebView | BOOL | いいえ | WebView データの収集を有効にするかどうかを設定します。デフォルトは YES。SDK 1.5.17 以上でサポート |
| allowWebViewHost | NSArray | いいえ | データ追跡を許可する WebView のホストアドレスを設定します。nil の場合はすべて収集、デフォルトは nil。SDK 1.5.17 以上でサポート |
| sessionTaskErrorFilter | FTSessionTaskErrorFilter | いいえ | URLSessionTask Error をインターセプトするかどうかを設定します。インターセプトする場合は YES を返し、インターセプトしない場合は NO を返します。インターセプトした場合、RUM-Error はそのエラーを収集しません。SDK 1.5.17 以上でサポート |
| issueDataProvider | FTIssueDataProvider | いいえ | SDK が自動収集する Crash および ANR RUM Error にカスタムフィールドを同期追加します。enableTrackAppCrash または enableTrackAppANR をそれぞれ有効にする必要があります。SDK 1.6.7 以上でサポート。使用方法は Error カスタムフィールド を参照してください |
| viewTrackingHandler | FTViewTrackingHandler | いいえ | View の追跡ロジックをカスタマイズします。どの ViewController を RUM View として監視するか、およびカスタム View 名を決定するために使用します。有効条件:enableTraceUserView = YES。SDK 1.5.18 以上でサポート。使用例はこちらを参照してください |
| swiftUIViewTrackingHandler | FTSwiftUIViewTrackingHandler | いいえ | 実験的。SwiftUI View の自動収集ロジックをカスタマイズします。自動抽出された SwiftUI View 名をフィルタリングし、RUM View 名をカスタマイズするために使用します。有効条件:enableTraceUserView = YES かつ、この設定が空でないこと。フィルタリングや名前付けのカスタマイズが不要な場合は、FTDefaultSwiftUIViewTrackingHandler を設定できます。この実験的 API は将来のバージョンで変更される可能性があります。SDK 1.6.4 以上でサポート。使用例はこちらを参照してください |
| actionTrackingHandler | FTActionTrackingHandler | いいえ | Action の追跡ロジックをカスタマイズします。記録する RUM Action イベントとカスタム Action 名をフィルタリングするために使用します。有効条件:enableTraceUserAction = YES。SDK 1.5.18 以上でサポート。使用例はこちらを参照してください |
| crashMonitoring | FTCrashMonitorType | いいえ | SDK のクラッシュモニタリングの種類範囲を設定します。デフォルトは FTCrashMonitorTypeHighCompatibility(高互換モードのプリセットマクロ)。有効条件:enableTrackAppCrash = YES。注意:FTCrashMonitorTypeSystem | FTCrashMonitorTypeApplicationState を指定する必要があります。これらはレポートに重要な情報を提供します。SDK 1.5.19 以上でサポート |
サンプリングレートパラメータの命名
SDK 1.6.6 以降では、samplerate は非推奨となりました。現在も使用可能で、sampleRate と同じ値にマッピングされます。新しいコードでは sampleRate を使用することを推奨します。1.6.6 未満のバージョンでは、引き続き samplerate を使用してください。
RUM ユーザーデータ追跡¶
FTRUMConfig で enableTraceUserAction、enableTraceUserView、enableTraceUserResource、enableTrackAppFreeze、enableTrackAppCrash、enableTrackAppANR を設定することで、Action、View、Resource、LongTask、Error データの自動収集追跡を実現し、データを取得します。カスタム収集を行いたい場合は、FTExternalDataManager を使用してデータを送信できます。
View¶
使用方法¶
/// ページを作成します
///
/// `-startViewWithName` メソッドの前に呼び出します。このメソッドはページの読み込み時間を記録するために使用します。読み込み時間を取得できない場合は、このメソッドを呼び出す必要はありません。
/// - Parameters:
/// - viewName: ページ名
/// - loadTime: ページ読み込み時間(ナノ秒)
-(void)onCreateView:(NSString *)viewName loadTime:(NSNumber *)loadTime;
/// ページに遷移します
/// - Parameters:
/// - viewName: ページ名
/// - property: イベントのカスタムプロパティ(オプション)
-(void)startViewWithName:(NSString *)viewName property:(nullable NSDictionary *)property;
/// 現在の RUM View の読み込み時間を更新します。
/// `-startView` と `-stopView` メソッドの間でのみ呼び出すことで有効になります。
/// - Parameter duration: 読み込み時間(ナノ秒)。
-(void)updateViewLoadingTime:(NSNumber *)duration;
/// ページを離脱します
/// - Parameter property: イベントのカスタムプロパティ(オプション)
-(void)stopViewWithProperty:(nullable NSDictionary *)property;
/// ページを作成します
///
/// `-startViewWithName` メソッドの前に呼び出します。このメソッドはページの読み込み時間を記録するために使用します。読み込み時間を取得できない場合は、このメソッドを呼び出す必要はありません。
/// - Parameters:
/// - viewName: ページ名
/// - loadTime: ページ読み込み時間(ns)
open func onCreateView(_ viewName: String, loadTime: NSNumber)
/// ページに遷移します
/// - Parameters:
/// - viewName: ページ名
/// - property: イベントのカスタムプロパティ(オプション)
open func startView(withName viewName: String, property: [AnyHashable : Any]?)
/// 現在の RUM View の読み込み時間を更新します。
/// `-startView` と `-stopView` メソッドの間でのみ呼び出すことで有効になります。
/// - Parameter duration: 読み込み時間(ナノ秒)。
open func updateViewLoadingTime(_ duration: NSNumber)
/// ページを離脱します
/// - Parameter property: イベントのカスタムプロパティ(オプション)
open func stopView(withProperty property: [AnyHashable : Any]?)
コード例¶
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
// シナリオ 1:
[[FTExternalDataManager sharedManager] startViewWithName:@"TestVC"];
// シナリオ 2:動的パラメータ
[[FTExternalDataManager sharedManager] startViewWithName:@"TestVC" property:@{@"custom_key":@"custom_value"}];
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
// シナリオ 1:
[[FTExternalDataManager sharedManager] stopView];
// シナリオ 2:動的パラメータ
[[FTExternalDataManager sharedManager] stopViewWithProperty:@{@"custom_key":@"custom_value"}];
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// シナリオ 1:
FTExternalDataManager.shared().startView(withName: "TestVC")
// シナリオ 2:動的パラメータ
FTExternalDataManager.shared().startView(withName: "TestVC",property: ["custom_key":"custom_value"])
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// シナリオ 1:
FTExternalDataManager.shared().stopView()
// シナリオ 2:動的パラメータ
FTExternalDataManager.shared().stopView(withProperty: ["custom_key":"custom_value"])
}
SwiftUI View 収集¶
SwiftUI View は自動収集と手動収集をサポートしています:
- 自動収集(実験的):SDK が自動的にページを識別し、
FTRumConfig.swiftUIViewTrackingHandlerを使用して一括でフィルタリングと命名を行います。使用方法は SwiftUI View 自動収集(実験的) を参照してください。 - 手動収集:特定の SwiftUI View で
.ftTrackRUMView(name:property:)を使用して、ページの開始と終了を明示的にマークし、View 名とプロパティをカスタマイズします。安定したページ名が必要な場合、View のライフサイクルを正確に制御したい場合、または自動抽出された名前が期待と異なる場合に適しています。
Action¶
使用方法¶
/// RUM Action を開始します。
///
/// RUM はこの Action がトリガーする可能性のある Resource、Error、LongTask イベントをバインドします。0.1 秒以内に複数回追加しないでください。同じ View は同時に 1 つの Action のみに関連付けられ、前の Action が終了していない場合、新しい Action は破棄されます。
/// `addAction:actionType:property` メソッドで追加された Action とは相互に影響しません。
///
/// - Parameters:
/// - actionName: イベント名
/// - actionType: イベントタイプ
/// - property: イベントのカスタムプロパティ(オプション)
- (void)startAction:(NSString *)actionName actionType:(NSString *)actionType property:(nullable NSDictionary *)property;
/// Action イベントを追加します。破棄ロジックはなく、Resource、Error、LongTask イベントはバインドされません。
///
/// `startAction:actionType:property:` で開始された RUM Action とは相互に影響しません。
/// - Parameters:
/// - actionName: イベント名
/// - actionType: イベントタイプ
/// - property: イベントのカスタムプロパティ(オプション)
- (void)addAction:(NSString *)actionName actionType:(NSString *)actionType property:(nullable NSDictionary *)property;
/// RUM Action を開始します。
///
/// RUM はこの Action がトリガーする可能性のある Resource、Error、LongTask イベントをバインドします。0.1 秒以内に複数回追加しないでください。同じ View は同時に 1 つの Action のみに関連付けられ、前の Action が終了していない場合、新しい Action は破棄されます。
/// `addAction:actionType:property` メソッドで追加された Action とは相互に影響しません。
///
/// - Parameters:
/// - actionName: イベント名
/// - actionType: イベントタイプ
/// - property: イベントのカスタムプロパティ(オプション)
open func startAction(_ actionName: String, actionType: String, property: [AnyHashable : Any]?)
/// Action イベントを追加します。破棄ロジックはなく、Resource、Error、LongTask イベントはバインドされません。
///
/// `startAction:actionType:property:` で開始された RUM Action とは相互に影響しません。
/// - Parameters:
/// - actionName: イベント名
/// - actionType: イベントタイプ
/// - property: イベントのカスタムプロパティ(オプション)
open func addAction(_ actionName: String, actionType: String, property: [AnyHashable : Any]?)
コード例¶
SwiftUI Action 手動収集¶
SwiftUI Action は、ビジネス上のインタラクション箇所で手動で追加する必要があります。Button、NavigationLink、List 項目、またはカスタムジェスチャーなどの SwiftUI コンポーネントについては、ユーザー操作が発生したことを確認した位置で、能動的に RUM Action を記録してください。
SwiftUI Action は 2 種類の手動収集方法をサポートしています:
- 既存のイベントクロージャ内で呼び出す:
FTRUMSwiftUI.trackTapAction(name:property:)を使用します。追加のジェスチャーは追加されません。Button、NavigationLink、List、スクロールビュー、または既存のカスタムジェスチャーがある場合に適しています。 - View Modifier を使用する:
.ftTrackRUMTapAction(name:property:count:)を使用します。現在の View にsimultaneousGestureを追加します。通常の View のシンプルなタップ収集に適しています。
注意:同じタップイベントがすでに
FTExternalDataManagerを介して手動収集されている場合は、SwiftUI Action の手動収集を再度使用しないでください。重複送信を防ぐためです。
FTRUMSwiftUI.trackTapAction(name:property:) は、特に既にタップクロージャを持つコンポーネントにおいて、より推奨される手動収集方法です。.ftTrackRUMTapAction(name:property:count:) は便利な記述方法ですが、追加のタップジェスチャーが追加されるため、List、NavigationLink、スクロールコンテナ、または複雑なジェスチャーの組み合わせでは、既存のインタラクションに影響を与える可能性があります。その場合は、既存のタップクロージャ内で FTRUMSwiftUI.trackTapAction(name:property:) を呼び出すように変更することをお勧めします。
Error¶
使用方法¶
/// Error イベントを追加します
/// - Parameters:
/// - type: error タイプ
/// - message: エラーメッセージ
/// - stack: スタック情報
/// - property: イベントのカスタムプロパティ(オプション)
- (void)addErrorWithType:(NSString *)type message:(NSString *)message stack:(NSString *)stack property:(nullable NSDictionary *)property;
/// Error イベントを追加します
/// - Parameters:
/// - type: error タイプ
/// - state: プログラム実行状態
/// - message: エラーメッセージ
/// - stack: スタック情報
/// - property: イベントのカスタムプロパティ(オプション)
- (void)addErrorWithType:(NSString *)type state:(FTAppState)state message:(NSString *)message stack:(NSString *)stack property:(nullable NSDictionary *)property;
/// Error イベントを追加します
/// - Parameters:
/// - type: error タイプ
/// - message: エラーメッセージ
/// - stack: スタック情報
/// - property: イベントのカスタムプロパティ(オプション)
open func addError(withType: String, message: String, stack: String, property: [AnyHashable : Any]?)
/// Error イベントを追加します
/// - Parameters:
/// - type: error タイプ
/// - state: プログラム実行状態
/// - message: エラーメッセージ
/// - stack: スタック情報
/// - property: イベントのカスタムプロパティ(オプション)
open func addError(withType type: String, state: FTAppState, message: String, stack: String, property: [AnyHashable : Any]?)
コード例¶
// シナリオ1
[[FTExternalDataManager sharedManager] addErrorWithType:@"type" message:@"message" stack:@"stack"];
// シナリオ2: 動的パラメータ
[[FTExternalDataManager sharedManager] addErrorWithType:@"ios_crash" message:@"crash_message" stack:@"crash_stack" property:@{@"custom_key":@"custom_value"}];
// シナリオ3: 動的パラメータ
[[FTExternalDataManager sharedManager] addErrorWithType:@"ios_crash" state:FTAppStateUnknown message:@"crash_message" stack:@"crash_stack" property:@{@"custom_key":@"custom_value"}];
// シナリオ1
FTExternalDataManager.shared().addError(withType: "custom_type", message: "custom_message", stack: "custom_stack")
// シナリオ2: 動的パラメータ
FTExternalDataManager.shared().addError(withType: "custom_type", message: "custom_message", stack: "custom_stack",property: ["custom_key":"custom_value"])
// シナリオ3: 動的パラメータ
FTExternalDataManager.shared().addError(withType: "custom_type", state: .unknown, message: "custom_message", stack: "custom_stack", property: ["custom_key":"custom_value"])
LongTask¶
使用方法¶
コード例¶
Resource¶
使用方法¶
/// HTTP リクエスト開始
/// - Parameters:
/// - key: リクエスト識別子
/// - property: イベントのカスタムプロパティ(オプション)
- (void)startResourceWithKey:(NSString *)key property:(nullable NSDictionary *)property;
/// HTTP リクエストデータを追加
///
/// - Parameters:
/// - key: リクエスト識別子
/// - metrics: リクエスト関連のパフォーマンスプロパティ
/// - content: リクエスト関連データ
- (void)addResourceWithKey:(NSString *)key metrics:(nullable FTResourceMetricsModel *)metrics content:(FTResourceContentModel *)content;
/// HTTP リクエスト終了
/// - Parameters:
/// - key: リクエスト識別子
/// - property: イベントのカスタムプロパティ(オプション)
- (void)stopResourceWithKey:(NSString *)key property:(nullable NSDictionary *)property;
/// HTTP リクエスト開始
/// - Parameters:
/// - key: リクエスト識別子
/// - property: イベントのカスタムプロパティ(オプション)
open func startResource(withKey key: String, property: [AnyHashable : Any]?)
/// HTTP リクエスト終了
/// - Parameters:
/// - key: リクエスト識別子
/// - property: イベントのカスタムプロパティ(オプション)
open func stopResource(withKey key: String, property: [AnyHashable : Any]?)
/// HTTP リクエストデータを追加
///
/// - Parameters:
/// - key: リクエスト識別子
/// - metrics: リクエスト関連のパフォーマンスプロパティ
/// - content: リクエスト関連データ
open func addResource(withKey key: String, metrics: FTResourceMetricsModel?, content: FTResourceContentModel)
コード例¶
// ステップ1:リクエスト開始前
[[FTExternalDataManager sharedManager] startResourceWithKey:key];
// ステップ2:リクエスト完了
[[FTExternalDataManager sharedManager] stopResourceWithKey:key];
// ステップ3:Resource データを構築
// FTResourceContentModel データ
FTResourceContentModel *content = [[FTResourceContentModel alloc]init];
content.httpMethod = request.HTTPMethod;
content.requestHeader = request.allHTTPHeaderFields;
content.responseHeader = httpResponse.allHeaderFields;
content.httpStatusCode = httpResponse.statusCode;
content.responseBody = responseBody;
// ios native
content.error = error;
// 各フェーズの時間データを取得できる場合
// FTResourceMetricsModel
// ios native で NSURLSessionTaskMetrics データを取得した場合、FTResourceMetricsModel のイニシャライザを直接使用
FTResourceMetricsModel *metricsModel = [[FTResourceMetricsModel alloc]initWithTaskMetrics:metrics];
// その他のプラットフォーム すべての時間データはナノ秒単位
FTResourceMetricsModel *metricsModel = [[FTResourceMetricsModel alloc]init];
// ステップ4:add resource 時間データがない場合、metrics は nil を渡す
[[FTExternalDataManager sharedManager] addResourceWithKey:key metrics:metricsModel content:content];
// ステップ1:リクエスト開始前
FTExternalDataManager.shared().startResource(withKey: key)
// ステップ2:リクエスト完了
FTExternalDataManager.shared().stopResource(withKey: resource.key)
// ステップ3:① Resource データを構築
let contentModel = FTResourceContentModel(request: task.currentRequest!, response: task.response as? HTTPURLResponse, data: resource.data, error: error)
//② 各フェーズの時間データを取得できる場合
// FTResourceMetricsModel
// ios native で NSURLSessionTaskMetrics データを取得した場合、FTResourceMetricsModel のイニシャライザを直接使用
var metricsModel:FTResourceMetricsModel?
if let metrics = resource.metrics {
metricsModel = FTResourceMetricsModel(taskMetrics:metrics)
}
// その他のプラットフォーム すべての時間データはナノ秒単位
metricsModel = FTResourceMetricsModel()
...
// ステップ4:add resource 時間データがない場合、metrics は nil を渡す
FTExternalDataManager.shared().addResource(withKey: resource.key, metrics: metricsModel, content: contentModel)