Skip to content

[관측성] OpenTelemetry 기반 traceId 전파 #50

Closed

Description

@RosieOh

🧑‍💻 오늘의 개발하면서 생긴 크고 작은 이슈사항을 기록해주세요

💚 어떤 기능인가요?

[ Observability ] OpenTelemetry 기반 추적을 도입해 traceId를 전 구간 전파합니다.
요청-서비스-외부호출 간 상관관계를 빠르게 분석할 수 있도록 로그/트레이스 연계를 강화합니다.

✅ To Dos

  • OTel SDK/Exporter 선택 및 기본 설정
  • HTTP/DB/외부 API span 전파 적용
  • 로그에 traceId/spanId 상관관계 반영
  • 샘플링 전략/비용 가이드 정의
  • 장애 분석 대시보드 초안 구성
  • 운영 가이드 문서화

Activity

  1. added theissue type on Aug 4, 2026
  2. RosieOh commented on Aug 10, 2026

    @RosieOh
    ContributorAuthor

    구현 완료. TraceIdFilter.

    MDC 는 이미 JSON 로그로 나가고 있었지만 traceId 를 넣는 곳이 @LogExecutionTime 안뿐이라, 인증 실패나 없는 경로처럼 컨트롤러에 닿기 전에 끝나는 요청에는 아무 값도 없었습니다. 실제로 이번에 500 원인을 찾을 때 타임스탬프로 로그를 뒤져야 했습니다.

    판단 이유
    보안 필터보다 먼저 실행 401·404 도 추적 대상
    들어온 X-Request-Id 이어받기 게이트웨이·LB 와 같은 요청으로 묶임
    응답 헤더 + 오류 본문 양쪽 사용자는 화면을 캡처해 보내는데 헤더는 캡처에 안 나옴
    외부 값 정제 개행이 섞이면 로그 한 줄을 위조할 수 있음
    종료 시 MDC 비움 톰캣 스레드 재사용 — 안 비우면 다음 요청에 남의 ID 가 붙음

    실기동 검증 (prod, MariaDB + Redis):

    확인 결과
    공개 요청 X-Request-Id: a1892a55
    401 응답 X-Request-Id: be88599f — 컨트롤러 전에 끝나도 추적됨
    게이트웨이 ID 이어받기 gw-test-42 그대로 유지
    404 본문 "traceId":"notfound-77"
    로그 검색 해당 ID 로 6줄이 한 요청으로 묶임

    OpenTelemetry 는 도입하지 않았습니다. 현재는 단일 서비스라 분산 추적의 이득이 없고, 계측 오버헤드와 콜렉터 운영 비용만 생깁니다. 서비스가 쪼개지는 시점에 이 필터의 헤더 이어받기를 그대로 W3C traceparent 로 바꾸면 됩니다. 테스트 7종으로 고정해 두었습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions