- 필수 기능
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- 디지털 경험
- 소프트웨어 제공
- 보안
- 로그 관리
- 관리
- 인프라스트럭처
- ci
- containers
- csm
- ndm
- otel_guides
- overview
- slos
- synthetics
- tests
- 워크플로
아직 RUM iOS SDK를 설정하지 않은 경우, 인앱 설정 지침을 따르거나 RUM iOS 설정 설명서를 참고하세요.
iOS RUM은 사용자 활동, 화면, 오류, 네트워크 요청과 같은 속성을 자동으로 추적합니다. RUM 이벤트 및 기본 속성에 대한 자세한 내용은 RUM 데이터 수집 설명서를 참고하세요. 커스텀 이벤트를 추적하여 사용자 세션 정보를 보강하고 수집된 속성을 보다 세밀하게 제어할 수 있습니다.
자동으로 보기 추적에 더해, viewControllers
와 같은 특정 보기가 확인 가능하고 상호작용 가능해졌을 때 이를 추적할 수 있습니다. 보기를 더 이상 확인할 수 없을 경우에는 RUMMonitor.shared()
에서 다음 방법을 사용해 추적을 중단하세요.
.startView(viewController:)
.stopView(viewController:)
예시:
import DatadogRUM
// 내 `UIViewController`에서:
let rum = RUMMonitor.shared()
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
rum.startView(viewController: self)
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
rum.stopView(viewController: self)
}
@import DatadogObjc;
// 내 `UIViewController`에서:
DDRUMMonitor *rum = [DDRUMMonitor shared];
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[rum startViewWithViewController:self name:nil attributes:nil];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[rum stopViewWithViewController:self attributes:nil];
}
사용 가능한 옵션에 대한 자세한 내용은 [GitHub 관련 파일]에서 DDRUMMonitor
클래스로 필터링하세요.
RUM의 기본 속성 외에도 addTiming(name:)
API를 사용해 애플리케이션이 시간을 소비하는 위치를 측정할 수 있습니다. 이 타이밍 측정값은 현재 RUM 보기의 시작을 기준으로 합니다.
예를 들어 히어로 이미지가 나타나는 데 걸리는 시간을 지정할 수 있습니다.
func onHeroImageLoaded() {
let rum = RUMMonitor.shared()
rum.addTiming(name: "hero_image")
}
- (void)onHeroImageLoad {
[[DDRUMMonitor shared] addTimingWithName:@"hero_image"];
}
타이밍을 설정하면 @view.custom_timings.<timing_name>
로 액세스할 수 있습니다. 예를 들어 @view.custom_timings.hero_image
입니다.
대시보드에서 시각화를 만들려면 먼저 [측정값을 생성]합니다4.
자동으로 작업을 추적하는 것에 더해, addAction(type:name:)
API를 사용해 특정 커스텀 사용자 작업(탭, 클릭, 스크롤)을 추적할 수 있습니다.
RUMMonitor.shared()
에서 .tap
과 같이 즉각적인 RUM 작업을 수동으로 등록하려면 .addAction(type:name:)
을 사용하세요. .scroll
과 같이 지속적인 RUM 작업의 경우에는 .startAction(type:name:)
나 .stopAction(type:name:)
을 사용하세요.
예시:
import DatadogRUM
// 내 `UIViewController`에서:
let rum = RUMMonitor.shared()
@IBAction func didTapDownloadResourceButton(_ sender: UIButton) {
rum.addAction(
type: .tap,
name: sender.currentTitle ?? "",
)
}
- (IBAction)didTapDownloadResourceButton:(UIButton *)sender {
NSString *name = sender.currentTitle ? sender.currentTitle : @"";
[[DDRUMMonitor shared] addActionWithType:DDRUMActionTypeTap name:name attributes:@{}];
}
참고: .startAction(type:name:)
과 .stopAction(type:name:)
을 사용할 때, type
작업이 같아야 합니다. 이는 RUM iOS SDK에서 작업 시작과 완료를 매칭할 때 필요합니다.
DDRUMMonitor
클래스에서 자세한 내용과 사용할 수 있는 옵션을 알아보세요.
리소스를 자동으로 추적하는 것 외에도 네트워크 요청이나 타사 제공자 API와 같은 특정 커스텀 리소스를 추적할 수 있습니다. RUMMonitor.shared()
에서 다음 방법을 사용해 수동으로 RUM 리소스를 수집할 수 있습니다.
.startResource(resourceKey:request:)
.stopResource(resourceKey:response:)
.stopResourceWithError(resourceKey:error:)
.stopResourceWithError(resourceKey:message:)
예시:
import DatadogRUM
// in your network client:
let rum = RUMMonitor.shared()
rum.startResource(
resourceKey: "resource-key",
request: request
)
rum.stopResource(
resourceKey: "resource-key",
response: response
)
// in your network client:
[[DDRUMMonitor shared] startResourceWithResourceKey:@"resource-key"
request:request
attributes:@{}];
[[DDRUMMonitor shared] stopResourceWithResourceKey:@"resource-key"
response:response
attributes:@{}];
참고: RUM iOS SDK가 리소스의 시작과 완료를 일치시키려면 호출하는 리소스의 두 호출에서 resourceKey
로 사용되는 String
이 고유해야 합니다.
DDRUMMonitor
클래스에서 자세한 내용과 사용할 수 있는 옵션을 알아보세요.
특정 오류를 추적하려면 메시지, 소스, 예외, 추가 속성에 함께 RUMMonitor
에 알립니다. 오류 속성 설명서를 참고하세요.
let rum = RUMMonitor.shared()
rum.addError(message: "error message.")
[[DDRUMMonitor shared] addErrorWithMessage:@"error message." stack:nil source:DDRUMErrorSourceCustom attributes:@{}];
자세한 내용과 사용할 수 있는 옵션을 보려면 DDRUMMonitor
클래스에서 코드 설명서 코멘트를 참고하세요.
RUM iOS SDK에서 자동으로 캡처하는 기본 RUM 속성 외에도 추가 컨텍스트 정보(커스텀 속성 등)를 RUM 이벤트에 추가하여 Datadog 내에서의 가시성을 보강할 수 있습니다.
커스텀 속성을 사용하면 관찰된 사용자 행동에 대한 정보(예: 카트 값, 판매자 계층, 또는 광고 캠페인)를 코드 수준 정보(예: 백엔드 서비스, 세션 타임라인, 오류 로그 및 네트워크 상태)로 필터링하고 그룹화할 수 있습니다.
커스텀 전역 속성을 설정하려면 RUMMonitor.shared().addAttribute(forKey:value:)
를 사용합니다.
RUMMonitor.shared().addAttribute(forKey: "some key", value: "some value")
를 사용합니다.RUMMonitor.shared().addAttribute(forKey: "some key", value: "some other value")
를 사용합니다.RUMMonitor.shared().removeAttribute(forKey: "some key")
를 사용합니다.RUM 세션에 사용자 정보를 추가하면 다음 작업이 용이해집니다.
다음 속성은 선택 사항이며, 이 정보 중에서 최소 하나를 제공해야 합니다.
속성 | 유형 | 설명 |
---|---|---|
usr.id | 문자열 | 고유한 사용자 식별자. |
usr.name | 문자열 | RUM UI에 기본적으로 표시되는 사용자 친화적인 이름. |
usr.email | 문자열 | 사용자 이메일. 사용자 이름이 없는 경우 RUM UI에 표시됨. Gravatars를 가져오는 데 사용되기도 함. |
사용자 세션을 확인하려면 setUserInfo(id:name:email:)
API를 사용합니다.
예시:
Datadog.setUserInfo(id: "1234", name: "John Doe", email: "john@doe.com")
[DDDatadog setUserInfoWithId:@"1234" name:@"John Doe" email:@"john@doe.com" extraInfo:@{}];
Datadog 구성을 생성할 때 Datadog.Configuration
에서 다음 속성을 사용해 라이브러리를 초기화할 수 있습니다.
site
batchSize
.small
, .medium
, .large
값을 사용할 수 있습니다.uploadFrequency
.frequent
, .average
, .rare
를 포함해 선택할 수 있습니다.RUM을 활성화할 때 RUM.Configuration
에서 다음 속성을 사용할 수 있습니다.
sessionSampleRate
sessionSampleRate
값은 0.0
와 100.0
사이여야 합니다. 0.0
값은 전송 세션이 없다는 뜻이고, 100.0
은 모든 세션이 Datadog에 전송된다는 뜻입니다. 이 설정이 구성되지 않으면 기본값 100.0
이 사용됩니다.uiKitViewsPredicate
UIViewControllers
을 RUM 보기로 추적 활성화합니다. DefaultUIKitRUMViewsPredicate
로 설정해 기본값 predicate
을 사용하거나 내 앱에 맞게 사용자 지정된 고유 UIKitRUMViewsPredicate
]((#automatically-track-views)를 구현할 수 있습니다.uiKitActionsPredicate
DefaultUIKitRUMActionsPredicate
로 설정해 기본값 predicate
을 사용하거나 내 앱에 맞게 사용자 지정된 고유 UIKitRUMActionsPredicate
](#automatically-track-user-actions)를 구현할 수 있습니다.urlSessionTracking
URLSession
작업(네트워크 요청)을 RUM 리소스로 추적 활성화합니다. firstPartyHostsTracing
파라미터는 first-party
리소스로 카테고리화되고(RUM이 활성화된 경우) 추적 정보가 주입된(추적 기능이 활성화된 경우) 호스트를 정의합니다. resourceAttributesProvider
파라미터는 클로저를 정의해 RUM iOS SDK에서 수집한 각 리소스에 호출된 추적 대상 리소스의 커스텀 속성을 제공합니다. 이 클로저는 작업 정보와 함께 호출되고 커스텀 리소스 속성을 반환하거나 속성이 연결될 수 없을 경우 nil
을 반환합니다.viewEventMapper
resourceEventMapper
actionEventMapper
errorEventMapper
longTaskEventMapper
vitalsUpdateFrequency
.frequent
(100ms 마다), .average
(500ms 마다), .rare
(1s 마다), .never
(활력 징후 모니터링 비활성화)가 있습니다.자동으로 보기를 추적(UIViewControllers
)하려면 RUM을 활성화할 때 uiKitViewsPredicate
옵션을 사용하세요. 기본값은 보기 컨트롤러의 클래스 이름으로 보기 이름이 지정되어 있습니다. 사용자 지정하려면 UIKitRUMViewsPredicate
프로토콜을 준수하는 나만의 predicate
구현을 제공하세요.
public protocol UIKitRUMViewsPredicate {
func rumView(for viewController: UIViewController) -> RUMView?
}
@objc
public protocol DDUIKitRUMViewsPredicate: AnyObject {
func rumView(for viewController: UIViewController) -> DDRUMView?
}
rumView(for:)
구현 내에서 사용자 앱이 UIViewController
인스턴스가 RUM 보기로 시작할지(반환 값) 아닐 지(nil
반환)을 결정합니다. 반환된 RUMView
값은 name
을 지정해야 하고 생성된 RUM 보기를 위해 추가 attributes
를 제공해야 할 수 있습니다.
예를 들어 앱의 각 보기 컨트롤러에 명시적인 유형의 점검을 사용하도록 조건자를 구성할 수 있습니다.
class YourCustomPredicate: UIKitRUMViewsPredicate {
func rumView(for viewController: UIViewController) -> RUMView? {
switch viewController {
case is HomeViewController: return .init(name: "Home")
case is DetailsViewController: return .init(name: "Details")
default: return nil
}
}
}
@interface YourCustomPredicate : NSObject<DDUIKitRUMViewsPredicate>
@end
@implementation YourCustomPredicate
- (DDRUMView * _Nullable)rumViewFor:(UIViewController * _Nonnull)viewController {
if ([viewController isKindOfClass:[HomeViewController class]]) {
return [[DDRUMView alloc] initWithName:@"Home" attributes:@{}];
}
if ([viewController isKindOfClass:[DetailsViewController class]]) {
return [[DDRUMView alloc] initWithName:@"Details" attributes:@{}];
}
return nil;
}
@end
앱의 아키텍처에 따라 더 역동적인 솔루션을 사용할 수도 있습니다.
예를 들어 보기 컨트롤러가 일관되게 accessibilityLabel
를 사용한다면 접근성 레이블값으로 보기 이름을 지정할 수 있습니다.
class YourCustomPredicate: UIKitRUMViewsPredicate {
func rumView(for viewController: UIViewController) -> RUMView? {
guard let accessibilityLabel = viewController.accessibilityLabel else {
return nil
}
return RUMView(name: accessibilityLabel)
}
}
@interface YourCustomPredicate : NSObject<DDUIKitRUMViewsPredicate>
@end
@implementation YourCustomPredicate
- (DDRUMView * _Nullable)rumViewFor:(UIViewController * _Nonnull)viewController {
if (viewController.accessibilityLabel) {
return [[DDRUMView alloc] initWithName:viewController.accessibilityLabel attributes:@{}];
}
return nil;
}
@end
참고: RUM iOS SDK는 앱이 실행되는 동안 rumView(for:)
를 많이 호출합니다. 단일 스레드로 속도가 빠르도록 구현하는 것이 좋습니다.
자동으로 사용자의 탭 작업을 추적하려면 RUM을 활성화할 때 uiKitActionsPredicate
옵션을 설정하세요.
자동으로 리소스(네트워크 요청)을 추적하고 첫 바이트나 DNS 확인 시간과 같은 시간 정보를 수신하려면 RUM을 활성화할 때 urlSessionTracking
옵션을 사용하고 URLSessionInstrumentation
을 활성화하세요.
URLSessionInstrumentation.enable(
with: .init(
delegateClass: SessionDelegate.self
)
)
let session = URLSession(
configuration: .default,
delegate: SessionDelegate(),
delegateQueue: nil
)
DDURLSessionInstrumentationConfiguration *config = [[DDURLSessionInstrumentationConfiguration alloc] initWithDelegateClass:[SessionDelegate class]];
[DDURLSessionInstrumentation enableWithConfiguration:config];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]
delegate:[[SessionDelegate alloc] init]
delegateQueue:nil];
또한 urlSessionTracking
을 사용해 퍼스트 파티 호스트를 구성할 수 있습니다. 그러면 RUM에서 “퍼스트 파티"와 일치하는 도메인을 구분하고 추적 정보를 백엔드로 전파합니다(추적을 활성화한 경우). 네트워크 트레이스는 조정 가능한 샘플링 속도로 샘플링 됩니다. 샘플링 기본값은 20%입니다.
예를 들어 퍼스트 파티 호스트를 example.com
로 구성하고 RUM과 추적 기능을 모두 활성화할 수 있습니다.
import DatadogRUM
RUM.enable(
with: RUM.Configuration(
applicationID: "<rum application id>",
uiKitViewsPredicate: DefaultUIKitRUMViewsPredicate(),
uiKitActionsPredicate: DefaultUIKitRUMActionsPredicate(),
urlSessionTracking: RUM.Configuration.URLSessionTracking(
firstPartyHostsTracing: .trace(hosts: ["example.com"], sampleRate: 20)
)
)
)
URLSessionInstrumentation.enable(
with: .init(
delegateClass: SessionDelegate.self
)
)
let session = URLSession(
configuration: .default,
delegate: SessionDelegate(),
delegateQueue: nil
)
이는 계측된 session
과 함께 전송된 모든 요청을 추적합니다. example.com
도메인과 일치하는 요청은 “퍼스트 파티"로 표시되고 추적 정보는 백엔드로 전송되어 RUM 리소스를 트레이스와 연결합니다.
@import DatadogObjc;
DDRUMConfiguration *configuration = [[DDRUMConfiguration alloc] initWithApplicationID:@"<rum application id>"];
DDRUMURLSessionTracking *urlSessionTracking = [DDRUMURLSessionTracking new];
[urlSessionTracking setFirstPartyHostsTracing:[DDRUMFirstPartyHostsTracing alloc] initWithHosts:@[@"example.com"] sampleRate:20];
[configuration setURLSessionTracking:urlSessionTracking];
[DDRUM enableWith:configuration];
커스텀 속성을 리소스에 추가하려면 RUM을 활성화할 때 URLSessionTracking.resourceAttributesProvider
옵션을 사용하세요. 속성 제공자 클로저를 설정하면 추가 속성을 반환해 추적된 리소스에 연결할 수 있습니다.
예를 들어 HTTP 요청과 응답 헤더를 RUM 리소스에 추가할 수 있습니다.
RUM.enable(
with: RUM.Configuration(
...
urlSessionTracking: RUM.Configuration.URLSessionTracking(
resourceAttributesProvider: { request, response, data, error in
return [
"request.headers" : redactedHeaders(from: request),
"response.headers" : redactedHeaders(from: response)
]
}
)
)
)
요청을 추적하고 싶지 않으면 대리인 유형의 URLSessionInstrumentation을 비활성화할 수 있습니다.
```swift
URLSessionInstrumentation.disable(delegateClass: SessionDelegate.self)
[DDURLSessionInstrumentation disableWithDelegateClass:[SessionDelegate class]];
Logger
와 함께 전송되는 “오류"와 “크리티컬” 로그 모두는 자동으로 RUM 오류로 보고되고 현재 RUM 보기에 연결됩니다.
import DatadogLogs
let logger = Logger.create()
logger.error("message")
logger.critical("message")
@import DatadogObjc;
DDLogger *logger = [DDLogger create];
[logger error:@"message"];
[logger critical:@"message"];
마찬가지로 완료된 스팬 모두는 오류로 표시되고 RUM 오류로 보고됩니다.
import DatadogTrace
let span = Tracer.shared().startSpan(operationName: "operation")
// ... capture the `error`
span.setError(error)
span.finish()
// ... capture the `error`
id<OTSpan> span = [[DDTracer shared] startSpan:@"operation"];
[span setError:error];
[span finish];
RUM 이벤트가 Datadog으로 전송되기 전에 해당 속성을 수정하거나 이벤트를 완전히 삭제하려면 RUM iOS SDK를 설정할 때 Event Mappers API를 사용하세요.
let configuration = RUM.Configuration(
applicationID: "<rum application id>",
viewEventMapper: { viewEvent in
return viewEvent
}
resourceEventMapper: { resourceEvent in
return resourceEvent
}
actionEventMapper: { actionEvent in
return actionEvent
}
errorEventMapper: { errorEvent in
return errorEvent
}
longTaskEventMapper: { longTaskEvent in
return longTaskEvent
}
)
DDRUMConfiguration *configuration = [[DDRUMConfiguration alloc] initWithApplicationID:@"<rum application id>"];
[configuration setViewEventMapper:^DDRUMViewEvent * _Nonnull(DDRUMViewEvent * _Nonnull viewEvent) {
return viewEvent;
}];
[configuration setErrorEventMapper:^DDRUMErrorEvent * _Nullable(DDRUMErrorEvent * _Nonnull errorEvent) {
return errorEvent;
}];
[configuration setResourceEventMapper:^DDRUMResourceEvent * _Nullable(DDRUMResourceEvent * _Nonnull resourceEvent) {
return resourceEvent;
}];
[configuration setActionEventMapper:^DDRUMActionEvent * _Nullable(DDRUMActionEvent * _Nonnull actionEvent) {
return actionEvent;
}];
[configuration setLongTaskEventMapper:^DDRUMLongTaskEvent * _Nullable(DDRUMLongTaskEvent * _Nonnull longTaskEvent) {
return longTaskEvent;
}];
각 맵퍼는 시그니처가 (T) -> T?
인 Swift 클로저이며, 여기서 T
는 구체적인 RUM 이벤트 유형입니다. 이렇게 하면 이벤트가 전송되기 전에 이벤트의 일부를 변경할 수 있습니다.
예를 들어, RUM 리소스의 url
에서 민감한 정보를 삭제하려면 커스텀 redacted(_:) -> String
함수을 구현하고 resourceEventMapper
에서 사용합니다.
let configuration = RUM.Configuration(
applicationID: "<rum application id>",
resourceEventMapper: { resourceEvent in
var resourceEvent = resourceEvent
resourceEvent.resource.url = redacted(resourceEvent.resource.url)
return resourceEvent
}
)
DDRUMConfiguration *configuration = [[DDRUMConfiguration alloc] initWithApplicationID:@"<rum application id>"];
[configuration setResourceEventMapper:^DDRUMResourceEvent * _Nullable(DDRUMResourceEvent * _Nonnull resourceEvent) {
return resourceEvent;
}];
오류, 리소스, 또는 작업 맵퍼에서 nil
이 반환되면 이벤트 전체가 드롭되고 해당 이벤트가 Datadog로 전송되지 않습니다. 보기 이벤트 맵퍼에서 반환된 값이 nil
여서는 안됩니다(보기를 드롭하고, UIKitRUMViewsPredicate
의 구현을 사용자 지정하는 방법에 관한 자세한 정보는 자동으로 보기 추적을 참고).
이벤트 유형에 따라 일부 특정 속성만 수정할 수 있습니다:
이벤트 유형 | 속성 키 | 설명 |
---|---|---|
RUMViewEvent | viewEvent.view.name | 보기의 이름. |
viewEvent.view.url | 보기 URL. | |
RUMActionEvent | actionEvent.action.target?.name | 작업 이름. |
actionEvent.view.url | 이 작업에 연결된 보기의 URL. | |
RUMErrorEvent | errorEvent.error.message | 오류 메시지. |
errorEvent.error.stack | 오류의 스택 트레이스. | |
errorEvent.error.resource?.url | 오류가 참조하는 리소스의 URL. | |
errorEvent.view.url | 이 오류에 연결된 보기의 URL. | |
RUMResourceEvent | resourceEvent.resource.url | 리소스의 URL. |
resourceEvent.view.url | 이 리소스에 연결된 보기의 URL. |
GDPR 규정을 준수하려면 RUM iOS SDK 초기화 시 추적 동의 값이 필요합니다.
trackingConsent
설정은 다음 값 중 하나가 될 수 있습니다.
.pending
: RUM iOS SDK는 데이터 수집 및 일괄 처리를 시작하지만 데이터를 Datadog으로 전송하지는 않습니다. RUM iOS SDK는 새로운 추적 동의 값을 기다렸다가 일괄 처리된 데이터로 실행할 작업을 결정합니다..granted
: RUM iOS SDK가 데이터 수집을 시작하여 Datadog으로 전송합니다..notGranted
: RUM iOS SDK에서는 어떠한 데이터도 수집하지 않습니다. 로그, 추적 또는 RUM 이벤트가 Datadog으로 전송되지 않습니다.RUM iOS SDK 초기화 후 추적 동의 값을 변경하려면 Datadog.set(trackingConsent:)
API 호출을 사용합니다. RUM iOS SDK에서 새로운 값에 따라 동작을 변경합니다.
예를 들어, 현재 추적 동의가 .pending
로 되어 있을 경우:
.granted
로 변경하면 RUM iOS SDK에서 현재부터 이후 모든 데이터를 Datadog로 전송합니다..notGranted
로 변경하면 RUM iOS SDK에서는 현재 데이터를 모두 삭제하고 이후 데이터를 수집하지 않습니다.애플리케이션이 Datadog RUM으로 전송하는 데이터를 제어하려면 RUM iOS SDK를 초기화할 때 0과 100 사이의 백분율을 지정해 RUM 세션의 샘플링 속도를 정할 수 있습니다.
예를 들어 세션의 50%만 유지하려면 다음을 사용합니다.
let configuration = RUM.Configuration(
applicationID: "<rum application id>",
sessionSampleRate: 50
)
DDRUMConfiguration *configuration = [[DDRUMConfiguration alloc] initWithApplicationID:@"<rum application id>"];
configuration.sessionSampleRate = 50;
RUM은 사용자 디바이스가 오프라인 상태일 때 데이터의 가용성을 보장합니다. 네트워크 연결이 원활하지 않은 지역이 디바이스 배터리가 너무 부족한 경우 모든 RUM 이벤트는 먼저 로컬 디바이스에 일괄적으로 저장됩니다. 네트워크를 사용할 수 있고 배터리가 충분히 충전되어 RUM iOS SDK가 최종 사용자 경험에 영향을 미치지 않는 환경이 되면 즉시 전송됩니다. 애플리케이션이 포그라운드에서 실행 중인 상태에서 네트워크를 사용할 수 없거나 데이터 업로드에 실패하면 배치가 성공적으로 전송될 때까지 보관됩니다.
즉, 사용자가 오프라인 상태에서 애플리케이션을 열어도 데이터가 손실되지 않습니다.
참고: RUM iOS SDK가 디스크 공간을 너무 많이 사용하지 않도록 하기 위해 너무 오래된 디스크 데이터는 자동으로 삭제됩니다.
커스텀 프록시를 사용해 디바이스에서 앱을 실행 중인 경우, RUM iOS SDK의 데이터 업로더에 이 정보를 제공해 추적 중인 모든 데이터가 관련 구성과 함께 업로드되도록 합니다.
iOS SDK를 초기화할 때 프록시 구성에서 이를 지정하세요.
import DatadogCore
Datadog.initialize(
with: Datadog.Configuration(
clientToken: "<client token>",
env: "<environment>",
proxyConfiguration: [
kCFNetworkProxiesHTTPEnable: true,
kCFNetworkProxiesHTTPPort: 123,
kCFNetworkProxiesHTTPProxy: "www.example.com",
kCFProxyUsernameKey: "proxyuser",
kCFProxyPasswordKey: "proxypass"
]
),
trackingConsent: trackingConsent
)
@import DatadogObjc;
DDConfiguration *configuration = [[DDConfiguration alloc] initWithClientToken:@"<client token>" env:@"<environment>"];
configuration.proxyConfiguration = @{
(NSString *)kCFNetworkProxiesHTTPEnable: @YES,
(NSString *)kCFNetworkProxiesHTTPPort: @123,
(NSString *)kCFNetworkProxiesHTTPProxy: @"www.example.com",
(NSString *)kCFProxyUsernameKey: @"proxyuser",
(NSString *)kCFProxyPasswordKey: @"proxypass"
}];
[DDDatadog initializeWithConfiguration:configuration
trackingConsent:trackingConsent];
자세한 정보는 URLSessionConfiguration.connectionProxyDictionary 설명서를 참고하세요.
Additional helpful documentation, links, and articles: