Error Tracking

[!tldr] 한줄 요약 수천 개의 개별 에러를 스택 트레이스 기반 핑거프린팅으로 자동 그룹핑하여 "이슈" 단위로 추적하며, APM/로그/RUM 에러를 한 화면에서 관리하고, Exception Replay로 프로덕션 변수 값까지 캡처한다.

핵심 내용

Error Tracking이란

APM, 로그, RUM에서 발생하는 에러를 자동으로 그룹핑하여 이슈(Issue) 단위로 추적하는 기능. 개별 에러 수천 개를 일일이 보는 게 아니라, 같은 원인의 에러를 하나의 이슈로 묶어서 빈도·영향 범위·최초 발생 시점을 파악한다.

APM이 이미 동작 중이면 추가 설정 없이 자동 활성화된다. 별도 SDK나 설정 변경이 불필요하다.

에러 그룹핑 (Fingerprinting)

Error Tracking의 핵심 메커니즘. 에러 Span의 3가지 속성으로 핑거프린트를 계산한다:

속성설명예시
error.type에러 타입/클래스NullPointerException
error.message에러 메시지Cannot read property 'id' of null
error.stack스택 트레이스최상위 프레임(에러 발생 위치)을 중심으로

같은 핑거프린트를 가진 에러는 같은 이슈로 그룹핑된다.

graph LR
    E1[에러 #1<br/>NullPointer at line 42] --> FP[핑거프린트 계산]
    E2[에러 #2<br/>NullPointer at line 42] --> FP
    E3[에러 #3<br/>NullPointer at line 42] --> FP
    FP --> ISSUE[이슈 #ISS-001<br/>3건 발생]

[!tip] 똑똑한 그룹핑 메시지 안의 숫자, 따옴표/괄호 안의 내용은 무시한다. "User 123 not found""User 456 not found"는 같은 이슈로 묶인다. 단어 수준의 토큰만 비교하여 "같은 원인, 다른 값"의 에러를 정확히 그룹핑한다.

이슈 생명주기

stateDiagram-v2
    [*] --> New: 최초 발생
    New --> Reviewed: 확인
    Reviewed --> Resolved: 수정 완료
    Resolved --> Regression: 다시 발생!
    Regression --> Resolved: 재수정
    New --> Recurring: 동일 이슈 재발생
    Recurring --> Reviewed: 확인
상태설명
New처음 발생한 이슈. 조사가 필요
Recurring이전에 본 이슈가 다시 발생
Regression해결했던 이슈가 다시 발생. 자동 재오픈되며 이전 수정 이력이 보존됨
Resolved수정 완료된 이슈

Regression 감지가 특히 유용하다. 배포 후 "고쳤던 버그가 다시 나왔다"를 자동으로 알려준다.

3가지 에러 소스

Error Tracking은 세 곳에서 에러를 수집하여 하나의 화면에서 보여준다:

소스수집 대상필요 조건
APM (Traces)백엔드 서비스의 에러 Spandd-trace 계측 (자동 활성화)
Logs에러 로그 (스택 트레이스 포함)로그 수집 + source 태그 설정
RUM프론트엔드 JS 에러, 크래시RUM SDK 설치

핵심 기능

Exception Replay

프로덕션 에러 발생 시 해당 시점의 로컬 변수 값을 자동 캡처한다. 에러를 재현하지 않고도 "이때 변수 값이 뭐였길래 에러가 났는지" 바로 확인 가능.

Suspected Cause

이슈 생성 시 의심 원인을 자동 라벨링한다:

Source Code Integration

스택 트레이스의 각 프레임에서 소스 코드로 직접 링크. GitHub/GitLab 연동 시 해당 커밋의 코드를 바로 볼 수 있다.

Error Tracking Monitor

모니터를 설정하여 알림을 받을 수 있다:

Sentry와의 비교

Datadog Error TrackingSentry
포지션옵저버빌리티 스택의 일부에러 추적 전문 도구
장점에러 → 트레이스 → 로그 → RUM 한 곳에서 연결에러 추적에 특화된 깊은 기능
설정APM 있으면 자동 활성화, 추가 SDK 불필요별도 SDK 설치 필요
적합한 경우이미 Datadog을 쓰고 있을 때에러 추적만 독립적으로 필요할 때

이미 Datadog APM/로그/RUM을 쓰고 있다면, 별도 도구 없이 에러 → 트레이스 → 로그를 한 곳에서 오갈 수 있는 것이 가장 큰 장점이다.

예시

장애 대응 흐름:

1. Error Tracking Monitor 알림: "새로운 이슈 — PaymentService NullPointerException"

2. Error Tracking Explorer에서 이슈 클릭
   → 발생 횟수: 지난 1시간 동안 342건
   → 영향 받은 사용자: 89명
   → 최초 발생: 10:23 (30분 전 배포 직후)
   → Suspected Cause: Code Exception

3. Exception Replay로 변수 값 확인
   → order.payment_method = null  ← 원인!
   → 새 결제 수단 추가 시 null 체크 누락

4. 스택 트레이스에서 "View in GitHub" 클릭
   → 해당 커밋의 코드 확인

5. 수정 배포 후 이슈 Resolved로 마킹
   → 같은 에러 재발 시 Regression으로 자동 재오픈

[!example] Error Tracking Explorer 화면 구성

  • 이슈 목록: 핑거프린트별 그룹, 발생 횟수, 영향 사용자 수, 최초/최근 발생 시각
  • 이슈 상세: 스택 트레이스, Exception Replay (변수 값), 관련 트레이스/로그 링크
  • 필터: 서비스, 환경, 에러 타입, 상태(New/Regression) 등

참고 자료

관련 노트