콘텐츠로 이동

RUM 설정

RUM 초기화 설정

FTRumConfig *rumConfig = [[FTRumConfig alloc] initWithAppid:appid];
rumConfig.enableTrackAppCrash = YES;
rumConfig.enableTrackAppANR = YES;
rumConfig.enableTrackAppFreeze = YES;
rumConfig.enableTraceUserAction = YES;
rumConfig.enableTraceUserView = YES;
rumConfig.enableTraceUserResource = YES;
rumConfig.errorMonitorType = FTErrorMonitorAll;
rumConfig.deviceMetricsMonitorType = FTDeviceMetricsMonitorAll;
[[FTSDKAgent sharedInstance] startRumWithConfigOptions:rumConfig];
let rumConfig = FTRumConfig(appid: appid)
rumConfig.enableTraceUserAction = true
rumConfig.enableTrackAppANR = true
rumConfig.enableTraceUserView = true
rumConfig.enableTraceUserResource = true
rumConfig.enableTrackAppCrash = true
rumConfig.enableTrackAppFreeze = true
rumConfig.errorMonitorType = .all
rumConfig.deviceMetricsMonitorType = .all
rumConfig.monitorFrequency = .rare
FTSDKAgent.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 데이터입니다.
enableTrackAppCrash BOOL 아니요 크래시 로그 수집 여부를 설정합니다. 기본값은 NO입니다.
enableTrackAppANR BOOL 아니요 ANR(애플리케이션 응답 없음) 이벤트를 수집합니다. 기본값은 NO입니다.
enableTrackAppFreeze BOOL 아니요 UI 멈춤 이벤트를 수집합니다. 기본값은 NO입니다.
enableTraceUserView BOOL 아니요 사용자 View 작업 추적 여부를 설정합니다. 기본값은 NO입니다.
enableTraceUserAction BOOL 아니요 사용자 Action 작업 추적 여부를 설정합니다. 기본값은 NO입니다.
enableTraceUserResource BOOL 아니요 사용자 네트워크 요청 추적 여부를 설정합니다. 기본값은 NO이며, native http에만 적용됩니다.
resourceUrlHandler FTResourceUrlHandler 아니요 사용자 지정 Resource 수집 규칙입니다. 기본값은 필터링하지 않으며, NO를 반환하면 수집, YES를 반환하면 수집하지 않습니다. 자세한 내용은 데이터 수집 사용자 지정 규칙을 참조하세요.
errorMonitorType FTErrorMonitorType 아니요 오류 이벤트 모니터링 보충 유형입니다. 수집된 크래시 데이터에 모니터링 정보를 추가합니다. 기본값은 설정하지 않음입니다.
monitorFrequency FTMonitorFrequency 아니요 뷰의 성능 모니터링 샘플링 주기입니다.
deviceMetricsMonitorType FTDeviceMetricsMonitorType 아니요 뷰의 성능 모니터링 유형입니다. 수집된 View 데이터에 해당 모니터링 항목 정보를 추가합니다. 기본값은 설정하지 않음입니다.
globalContext NSDictionary 아니요 사용자 모니터링 데이터 소스 구분을 위한 사용자 지정 태그를 추가합니다. 추적 기능을 사용해야 하는 경우 매개변수 key는 track_id, value는 임의의 숫자입니다. 추가 규칙은 사용자 지정 태그 사용을 참조하세요.

RUM 사용자 데이터 추적

FTRUMConfig 구성을 통해 자동 모드를 활성화하거나 수동으로 추가할 수 있습니다. RUM 관련 데이터는 FTGlobalRumManager 싱글톤을 통해 전달되며, 관련 API는 다음과 같습니다.

View

enableTraceUserView = YES로 설정하여 자동 수집을 활성화하면 SDK가 Window의 생명 주기를 자동으로 수집합니다. Window의 생명 주기 -becomeKeyWindow를 View의 시작으로, -resignKeyWindow를 View의 종료로 정의합니다.

페이지 이름은 NSStringFromClass(window.contentViewController.class) > NSStringFromClass(window.windowController.class) > NSStringFromClass(window)의 우선 순위로 설정됩니다.

Window 내의 뷰가 매우 복잡한 경우 다음 API를 사용하여 사용자 지정 수집할 수 있습니다.

사용 방법

/// 페이지 생성
///
/// `-startViewWithName` 메서드 전에 호출되며, 페이지 로드 시간을 기록하는 데 사용됩니다.
/// 로드 시간을 얻을 수 없는 경우 이 메서드를 호출하지 않아도 됩니다.
/// - Parameters:
///  - viewName: 페이지 이름
///  - loadTime: 페이지 로드 시간(나노초)
-(void)onCreateView:(NSString *)viewName loadTime:(NSNumber *)loadTime;

/// 페이지 진입
/// - Parameters:
///  - viewName: 페이지 이름
///  - property: 이벤트 사용자 지정 속성(선택 사항)
-(void)startViewWithName:(NSString *)viewName property:(nullable NSDictionary *)property;

/// 페이지 종료
/// - 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]?)

/// 페이지 종료
/// - Parameter property: 이벤트 사용자 지정 속성(선택 사항)
open func stopView(withProperty property: [AnyHashable : Any]?)

코드 예제

- (void)viewDidAppear{
  [super viewDidAppear];
  [[FTGlobalRumManager sharedManager] startViewWithName:@"TestVC"];
  [[FTGlobalRumManager sharedManager] startViewWithName:@"TestVC" property:@{@"custom_key":@"custom_value"}];
}
-(void)viewDidDisappear{
  [super viewDidDisappear];
  [[FTGlobalRumManager sharedManager] stopView];
  [[FTGlobalRumManager sharedManager] stopViewWithProperty:@{@"custom_key":@"custom_value"}];
}
override func viewDidAppear() {
    super.viewDidAppear()
    FTExternalDataManager.shared().startView(withName: "TestVC")
    FTExternalDataManager.shared().startView(withName: "TestVC", property: ["custom_key":"custom_value"])
}
override func viewDidDisappear() {
    super.viewDidDisappear()
    FTGlobalRumManager.shared().stopView()
    FTGlobalRumManager.shared().stopView(withProperty: ["custom_key":"custom_value"])
}

Action

사용 방법

/// Action 이벤트 추가
/// - Parameters:
///   - actionName: 이벤트 이름
///   - actionType: 이벤트 유형
///   - property: 이벤트 사용자 지정 속성(선택 사항)
- (void)addActionName:(NSString *)actionName actionType:(NSString *)actionType property:(nullable NSDictionary *)property;
/// Action 이벤트 추가
/// - Parameters:
///   - actionName: 이벤트 이름
///   - actionType: 이벤트 유형
///   - property: 이벤트 사용자 지정 속성(선택 사항)
func addActionName(String, actionType: String, property: [AnyHashable : Any]?)

코드 예제

[[FTGlobalRumManager sharedManager] addActionName:@"UITableViewCell click" actionType:@"click"];
[[FTGlobalRumManager sharedManager] addActionName:@"UITableViewCell click" actionType:@"click" property:@{@"custom_key":@"custom_value"}];
FTGlobalRumManager.shared().addActionName("custom_action", actionType: "click")
FTGlobalRumManager.shared().addActionName("custom_action", actionType: "click", property: ["custom_key":"custom_value"])

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]?)

코드 예제

[[FTGlobalRumManager sharedManager] addErrorWithType:@"type" message:@"message" stack:@"stack"];
[[FTGlobalRumManager sharedManager] addErrorWithType:@"ios_crash" message:@"crash_message" stack:@"crash_stack" property:@{@"custom_key":@"custom_value"}];
[[FTGlobalRumManager sharedManager] addErrorWithType:@"ios_crash" state:FTAppStateUnknown message:@"crash_message" stack:@"crash_stack" property:@{@"custom_key":@"custom_value"}];
FTGlobalRumManager.shared().addError(withType: "custom_type", message: "custom_message", stack: "custom_stack")
FTGlobalRumManager.shared().addError(withType: "custom_type", message: "custom_message", stack: "custom_stack", property: ["custom_key":"custom_value"])
FTGlobalRumManager.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]?)

코드 예제

[[FTGlobalRumManager sharedManager] addLongTaskWithStack:@"stack string" duration:@1000000000];
[[FTGlobalRumManager sharedManager] addLongTaskWithStack:@"stack string" duration:@1000000000 property:@{@"custom_key":@"custom_value"}];
FTGlobalRumManager.shared().addLongTask(withStack: "stack string", duration: 1000000000)
FTGlobalRumManager.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)

코드 예제

#import "FTMacOSSDK.h"

[[FTGlobalRumManager sharedManager] startResourceWithKey:key];
[[FTGlobalRumManager sharedManager] stopResourceWithKey:key];

FTResourceContentModel *content = [[FTResourceContentModel alloc] init];
content.httpMethod = request.HTTPMethod;
content.requestHeader = request.allHTTPHeaderFields;
content.responseHeader = httpResponse.allHeaderFields;
content.httpStatusCode = httpResponse.statusCode;
content.responseBody = responseBody;
content.error = error;

FTResourceMetricsModel *metricsModel = [[FTResourceMetricsModel alloc] initWithTaskMetrics:metrics];
metricsModel = [[FTResourceMetricsModel alloc] init];

[[FTGlobalRumManager sharedManager] addResourceWithKey:key metrics:metricsModel content:content];
import FTMacOSSDK

FTGlobalRumManager.shared().startResource(withKey: key)
FTGlobalRumManager.shared().stopResource(withKey: resource.key)

let contentModel = FTResourceContentModel(request: task.currentRequest!, response: task.response as? HTTPURLResponse, data: resource.data, error: error)

var metricsModel: FTResourceMetricsModel?
if let metrics = resource.metrics {
   metricsModel = FTResourceMetricsModel(taskMetrics: metrics)
}
metricsModel = FTResourceMetricsModel()

FTGlobalRumManager.shared().addResource(withKey: resource.key, metrics: metricsModel, content: contentModel)

문서 평가

이 페이지가 도움이 되었나요?