跳转至

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 用户访问监测应用 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,仅作用于 native http。注意:通过 [NSURLSession sharedSession] 发起的网络请求无法采集性能数据;SDK 1.5.9 及以上支持采集通过 Swift 的 URLSession async/await APIs 发起的网络请求
resourceUrlHandler FTResourceUrlHandler 自定义采集 resource 规则。默认不过滤。返回 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 添加自定义标签,用于用户监测数据源区分。如果需要使用追踪功能,则参数 keytrack_idvalue 为任意数值。添加规则请查阅 此处
rumCacheLimitCount int RUM 最大缓存量。默认 100_000,SDK 1.5.8 以上版本支持该参数
rumDiscardType FTRUMCacheDiscard 设置 RUM 丢弃规则。默认 FTRUMCacheDiscardFTRUMCacheDiscard 当 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 host 地址,nil 时全采集,默认为 nil。SDK 1.5.17 以上支持
sessionTaskErrorFilter FTSessionTaskErrorFilter 设置是否拦截 URLSessionTask Error,确认拦截返回 YES,不拦截返回 NO,拦截后 RUM-Error 不采集该条错误。SDK 1.5.17 以上支持
viewTrackingHandler FTViewTrackingHandler 自定义追踪 View 逻辑,用于决定哪些 ViewController 需要作为 RUM View 进行监控和自定义 View Name。生效条件:enableTraceUserView = YES。SDK 1.5.18 以上支持,使用示例请看 这里
actionTrackingHandler FTActionTrackingHandler 自定义追踪 Action 逻辑,用于筛选需要记录的 RUM Action 事件和自定义 Action Name。生效条件:enableTraceUserAction = YES。SDK 1.5.18 以上支持,使用示例请看 这里
crashMonitoring FTCrashMonitorType 配置 SDK 崩溃监控的类型范围,默认为 FTCrashMonitorTypeHighCompatibility(高兼容模式预设宏)。生效条件:enableTrackAppCrash = YES。注意:需要指定 FTCrashMonitorTypeSystem | FTCrashMonitorTypeApplicationState,这些能为报告提供重要信息。SDK 1.5.19 以上支持

RUM 用户数据追踪

FTRUMConfig 配置 enableTraceUserActionenableTraceUserViewenableTraceUserResourceenableTrackAppFreezeenableTrackAppCrashenableTrackAppANR 来实现 ActionViewResourceLongTaskError 数据的自动采集追踪获取数据。如果想自定义采集,可以通过 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"])
}

Action

使用方法

/// 启动 RUM Action。
///
/// RUM 会绑定该 Action 可能触发的 Resource、Error、LongTask 事件。避免在 0.1 s 内多次添加,同一个 View 在同一时间只会关联一个 Action,在上一个 Action 未结束时,新增的 Action 会被丢弃。
/// 与 `addAction:actionType:property` 方法添加 Action 互不影响。
///
/// - Parameters:
///   - actionName: 事件名称
///   - actionType: 事件类型
///   - property: 事件自定义属性(可选)
- (void)startAction:(NSString *)actionName actionType:(NSString *)actionType property:(nullable NSDictionary *)property;

/// 添加 Action 事件.无 duration,无丢弃逻辑
///
/// 与 `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 s 内多次添加,同一个 View 在同一时间只会关联一个 Action,在上一个 Action 未结束时,新增的 Action 会被丢弃。
/// 与 `addAction:actionType:property` 方法添加 Action 互不影响。
///
/// - Parameters:
///   - actionName: 事件名称
///   - actionType: 事件类型
///   - property: 事件自定义属性(可选)
open func startAction(_ actionName: String, actionType: String, property: [AnyHashable : Any]?)

/// 添加 Action 事件.无 duration,无丢弃逻辑
///
/// 与 `startAction:actionType:property:` 启动的 RUM Action 互不影响。
/// - Parameters:
///   - actionName: 事件名称
///   - actionType: 事件类型
///   - property: 事件自定义属性(可选)
open func addAction(_ actionName: String, actionType: String, property: [AnyHashable : Any]?)

代码示例

// startAction
[[FTExternalDataManager sharedManager] startAction:@"action" actionType:@"click" property:@{@"action_property":@"testActionProperty1"}];
// addAction
[[FTExternalDataManager sharedManager] addAction:@"action" actionType:@"click" property:@{@"action_property":@"testActionProperty1"}];
// startAction
FTExternalDataManager.shared().startAction("custom_action", actionType: "click",property: nil)
// addAction
FTExternalDataManager.shared().addAction("custom_action", actionType: "click",property: nil)

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

使用方法

/// 添加 卡顿 事件
/// - Parameters:
///   - stack: 卡顿堆栈
///   - duration: 卡顿时长(纳秒)
///   - property: 事件自定义属性(可选)
- (void)addLongTaskWithStack:(NSString *)stack duration:(NSNumber *)duration property:(nullable NSDictionary *)property;
/// 添加 卡顿 事件
/// - Parameters:
///   - stack: 卡顿堆栈
///   - duration: 卡顿时长(纳秒)
///   - property: 事件自定义属性(可选)
func addLongTask(withStack: String, duration: NSNumber, property: [AnyHashable : Any]?)

代码示例

// 场景1
[[FTExternalDataManager sharedManager] addLongTaskWithStack:@"stack string" duration:@1000000000];
// 场景2: 动态参数
[[FTExternalDataManager sharedManager] addLongTaskWithStack:@"stack string" duration:@1000000000 property:@{@"custom_key":@"custom_value"}];
// 场景1
FTExternalDataManager.shared().addLongTask(withStack: "stack string", duration: 1000000000)
// 场景2: 动态参数
FTExternalDataManager.shared().addLongTask(withStack: "stack string", duration: 1000000000 ,property: [["custom_key":"custom_value"]])

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)

代码示例

//第一步:请求开始前
[[FTExternalDataManager sharedManager] startResourceWithKey:key];

//第二步:请求完成
[[FTExternalDataManager sharedManager] stopResourceWithKey:key];

//第三步:拼接 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];

//第四步:add resource 如果没有时间数据 metrics 传 nil
[[FTExternalDataManager sharedManager] addResourceWithKey:key metrics:metricsModel content:content];
//第一步:请求开始前
FTExternalDataManager.shared().startResource(withKey: key)

//第二步:请求完成
FTExternalDataManager.shared().stopResource(withKey: resource.key)

//第三步:① 拼接 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()
...

//第四步:add resource 如果没有时间数据 metrics 传 nil
FTExternalDataManager.shared().addResource(withKey: resource.key, metrics: metricsModel, content: contentModel)

文档评价

文档内容是否对您有帮助? ×