- 필수 기능
- 시작하기
- Glossary
- 표준 속성
- Guides
- Agent
- 통합
- 개방형텔레메트리
- 개발자
- API
- Datadog Mobile App
- CoScreen
- Cloudcraft
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- APM
- Continuous Profiler
- 스팬 시각화
- 데이터 스트림 모니터링
- 데이터 작업 모니터링
- 디지털 경험
- 소프트웨어 제공
- 보안
- AI Observability
- 로그 관리
- 관리
오류 추적은 기본 전략을 사용해 지능적으로 유사한 오류를 이슈로 그룹화합니다. _커스텀 핑거프린팅_을 사용해 그룹화 결정을 완벽히 통제하고 오류 스팬(span)의 그룹화 작업을 사용자 지정할 수 있습니다.
오류에 error.fingerprint
을 제공하여 그룹화를 사용자 지정할 수 있습니다. 오류의 소스에 따라 핑거프린트가 속성 또는 태그에 적용됩니다(자세한 내용은 설정 참조). error.fingerprint
값의 경우 특별한 형식이나 요구 사항은 없으나 내용은 반드시 문자열이어야 합니다.
error.fingerprint
이 제공된 경우 그룹화 행동은 이러한 규칙을 따릅니다.
error.fingerprint
내용은 수정 없이 그대로 사용됩니다.error.fingerprint
속성을 가지고 있는 경우 동일한 이슈로 그룹화됩니다.service
속성의 오류는 서로 다른 이슈로 그룹화됩니다.커스텀 그룹화 작업에는 오류 스팬(span) 및 error.fingerprint
문자열 스팬(span) 태그만 필요합니다.
Datadog으로 애플리케이션 성능 모니터링(APM) 트레이스를 수집하지 않는 경우 애플리케이션 성능 모니터링(APM) 문서를 참조하여 애플리케이션 성능 모니터링(APM)을 설정합니다.
이미 애플리케이션 성능 모니터링(APM) 스팬(span)을 전송한다면 오류 스팬(span)에 신규 error.fingerprint
태그를 추가하세요.
다음은 파이썬(Python)의 예시입니다.
with tracer.trace("throws.an.error") as span:
span.set_tag('error.fingerprint', 'my-custom-grouping-material')
raise Exception("Something went wrong")
예외 정보가 캡처되며, 예외 발생 시 활성화되었다면 스팬(span)에 첨부됩니다.
이 경우 my-custom-grouping-material
을 사용하여 해당 오류 스팬(span)을 오류 추적의 단일
이슈로 그룹화합니다.
커스텀 그룹화 작업에는 오류 로그 및 error.fingerprint
문자열 속성만 필요합니다.
Datadog으로 로그를 수집하지 않는 경우 로그 관리 문서를 참조하여 로그를 설정합니다.
source
태그(언어 지정)가 올바르게 설정되었는지 확인합니다.
이미 JSON 형식으로 로깅한다면 오류 로그에 신규 error.fingerprint
속성을 추가하세요.
다음은 JSON 형식 로거에 대한 파이썬(Python) 예시입니다.
import logging
import json_log_formatter
formatter = json_log_formatter.JSONFormatter()
json_handler = logging.FileHandler(filename='/var/log/my-log.json')
json_handler.setFormatter(formatter)
logger = logging.getLogger('my_json')
logger.addHandler(json_handler)
logger.setLevel(logging.INFO)
logger.error('Error processing request', extra={'error.fingerprint': 'my-custom-grouping-material'})
이 경우, my-custom-grouping-material
은 오류 추적에서 해당 오류 로그를 단일
이슈로 그룹화하는 데 사용됩니다.
Datadog 모바일 SDK에서는 다음과 같이 로그 요청에 사전 정의된 속성을 추가하여 에러를 로깅할 때 커스텀 오류 핑거프린트를 추가할 수 있습니다.
커스텀 그릅화를 사용하려면 Datadog iOS SDK 2.8.1
버전 이상이 필요합니다.
let errorFingerprint = "my-custom-grouping-material"
logger.error(
"My error message",
error: error,
attributes: [
Logs.Attributes.errorFingerprint: errorFingerprint
]
)
커스텀 그릅화를 사용하려면 Datadog Android SDK 2.7.0
버전 이상이 필요합니다.
val errorFingerprint = "my-custom-grouping-material"
val attributes = mapOf(LogAttributes.ERROR_FINGERPRINT to errorFingerprint)
logger.e("My error message", error, attributes)
커스텀 그릅화를 사용하려면 Datadog Flutter SDK 2.4.0
버전 이상이 필요합니다.
final errorFingerprint = "my-custom-grouping-material";
logger.error(
'My error message',
errorStackTrace: st,
attributes {
DatadogAttributes.errorFingerprint: "my-custom-grouping-material",
}
);
또는 다음과 같이 로그 매퍼(mapper)에서 핑거프린트를 추가하거나 조정할 수 있습니다.
커스텀 그릅화를 사용하려면 Datadog iOS SDK 2.8.1
버전 이상이 필요합니다.
let logsConfiguration = Logs.Configuration(
eventMapper: { log in
var log = log
log.error?.fingerprint = "my-custom-grouping-material"
return log
}
)
Logs.enable(
with: logsConfiguration
)
커스텀 그릅화를 사용하려면 Datadog Android SDK 2.7.0
버전 이상이 필요합니다.
val mapper = object : EventMapper<LogEvent> {
override fun map(event: LogEvent): LogEvent {
event.fingerprint = "my-custom-grouping-material"
return event
}
}
val logsConfiguration = LogsConfiguration.Builder()
.setEventMapper(mapper)
.build()
Logs.enable(logsConfiguration)
커스텀 그릅화를 사용하려면 Datadog Flutter SDK 2.4.0
버전 이상이 필요합니다.
LogEvent? mapLogEvent(LogEvent event) {
event.error?.fingerprint = "my-custom-grouping-material";
return event;
}
final loggingConfiguration = DatadogLoggingConfiguration(
eventMapper: mapLogEvent,
);
final configuration = DatadogConfiguration(
// ...
loggingConfiguration: loggingConfiguration,
);
Datadog을 사용해 브라우저 RUM 이벤트를 수집하지 않는다면 RUM 브라우저 모니터링 설정 설명서나 RUM 모바일 및 TV 모니터링 설정 설명서를 참조하세요.
커스텀 그룹화를 사용하려면 Datadog 브라우저 SDK v4.42.0 이상 버전, 브라우저 RUM 오류 및 추가 문자열 속성이 필요합니다.
이미 브라우저 오류를 수집하고 있다면 다음 중 하나를 사용해 속성을 추가할 수 있습니다.
dd_fingerprint
속성 추가:import { datadogRum } from '@datadog/browser-rum';
// Send a custom error with context
const error = new Error('Something went wrong');
error.dd_fingerprint = 'my-custom-grouping-fingerprint'
datadogRum.addError(error);
error.fingerprint
속성으로 beforeSend
콜백을 사용합니다.DD_RUM.init({
...
beforeSend: () => {
if (event.type === 'error') {
event.error.fingerprint = 'my-custom-grouping-fingerprint'
}
},
})
모든 경우 my-custom-grouping-material
은 오류 추적에서 브라우저 RUM 오류를 단일 이슈로 그룹화하는 데 사용됩니다.
커스텀 그릅화를 사용하려면 Datadog iOS SDK 2.8.1
버전 이상이 필요합니다.
오류 수동 보고 시 커스텀 핑거프린트를 추가하려면, 다음과 같이 addError
을 호출할 때 사전 정의된 속성을 추가합니다.
RUMMonitor.shared().addError(
message: "My error message",
source: .source,
attributes: [
RUM.Attributes.errorFingerprint: "my-custom-grouping-fingerprint"
]
)
또는 다음과 같이 errorEventMapper
을 사용할 수 있습니다.
var config = RUM.Configuration(applicationID: "rum-application-id")
config.errorEventMapper = { errorEvent in
var errorEvent = errorEvent
errorEvent.error.fingerprint = "my-custom-grouping-fingerprint"
return errorEvent
}
RUM.enable(with: config)
커스텀 그릅화를 사용하려면 Datadog Android SDK 2.7.0
버전 이상이 필요합니다.
오류 수동 보고 시 커스텀 핑거프린트를 추가하려면, 다음과 같이 addError
을 호출할 때 사전 정의된 속성을 추가합니다.
GlobalRumMonitor.get().addError(
"My error message",
RumErrorSource.SOURCE,
exception,
mapOf(
RumAttributes.ERROR_CUSTOM_FINGERPRINT to "my-custom-grouping-fingerprint"
)
)
또는 다음과 같이 errorEventMapper
을 사용할 수 있습니다.
val rumConfiguration = RumConfiguration.Builder("rum-application-id")
.setErrorEventMapper(object : EventMapper<ErrorEvent> {
override fun map(event: ErrorEvent): ErrorEvent {
event.error.fingerprint = "my-custom-grouping-fingerprint"
return event
}
}).build()
RUM.enable(rumConfiguration)
커스텀 그릅화를 사용하려면 Datadog Flutter SDK 2.4.0
버전 이상이 필요합니다.
오류 수동 보고 시 커스텀 핑거프린트를 추가하려면, 다음과 같이 addError
을 호출할 때 사전 정의된 속성을 추가합니다.
final rum = DatadogSdk.instance.rum;
rum?.addErrorInfo("My error message",
RumErrorSource.source,
attributes: {
DatadogAttributes.errorFingerprint: 'my-custom-grouping-fingerprint',
},
);
또는 다음과 같이 errorEventMapper
을 사용할 수 있습니다.
RumErrorEvent? mapRumErrorEvent(RumErrorEvent event) {
event.error.fingerprint = "my-custom-grouping-fingerprint";
return event;
}
final rumConfiguration = DatadogRumConfiguration(
// ...
errorEventMapper: mapRumErrorEvent,
);
final configuration = DatadogConfiguration(
// ...
rumConfiguration: rumConfiguration,
);