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¶
사용 방법¶
코드 예제¶
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¶
사용 방법¶
코드 예제¶
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)