LabHub
배우기 러닝패스 코스

OTCA — 오픈텔레메트리 인증 어소시에이트 · SDK 증거 추적: 사라진 스팬 찾기 · 실습

스팬은 만들었는데 어디에서 사라졌나

LabHub 에서 이어서 보기

목표

실제 OpenTelemetry Python SDK 코드를 고쳐, 스팬이 사라진 경계가 생성·샘플링·
종료·전송 중 어디인지 관측으로 구분합니다. 연결 함수 7개와 종합 보고서를 만듭니다.

왜 중요한가

trace ID가 있고 flush가 True여도 원하는 스팬이 수신됐다는 뜻은 아닙니다.
이 실습은 실제 SDK 1.44.0과 공식 OTLP/HTTP 익스포터를 사용합니다. 익스포터는
실습 컨테이너 안의 루프백 수신기에 protobuf를 전송합니다. 수신기는 일부 실행에서
의도적으로 HTTP 400을 반환합니다. 이는 오류를 재현하기 위한 조건입니다.

Collector·Jaeger·외부 저장소는 사용하지 않습니다. 실험 수신기의 수락을 검증하며
영속 저장이나 운영 배포의 성공으로 넓혀 해석하지 않습니다. SDK와 의존성은 전용
환경에 미리 설치되어 있어 API 키나 네트워크 설치가 필요하지 않습니다.

준비와 실행

작업 디렉터리는 /root/otca-sdk입니다. starters에는 문법은 맞지만 동작이 틀린
파일 8개가 있습니다. 각 단계의 파일 형식 예시도 같은 시작 코드입니다. 해당 파일을
작업 디렉터리로 복사해 고치세요. 예를 들어 첫 파일은 다음처럼 시작합니다.

cd /root/otca-sdkcp starters/wiring.py wiring.py/opt/otel-lab/bin/python /opt/app/otca_sdk/runner.py run 1

run 뒤 숫자를 바꾸면 해당 단계의 실제 SDK 관측과 실패 조건을 볼 수 있습니다.
SDK 내부 클래스나 채점기를 수정하지 말고 주어진 함수의 코드를 고치세요.
채점은 사본을 실행하며 현재 답안 파일을 바꾸지 않습니다. 같은 의미의 코드도
실제 동작이 맞으면 통과합니다. 일반 채점은 최대 8초, 종합 코드는 전체 50초
예산으로 제한하며 무한 루프와 출력 폭주를 실패로 처리합니다.

단계

1. /root/otca-sdk/wiring.py — wiring.py의 configure(provider, exporter)를 고쳐 주어진 provider에서 끝난 checkout 스팬이 exporter에 도착하게 하세요. 전역 provider를 바꾸지 않습니다.
2. /root/otca-sdk/decisions.py — decisions.py의 sampler(mode)는 SDK Sampler를 반환합니다. drop은 DROP, record는 RECORD_ONLY, sample은 RECORD_AND_SAMPLE의 동작을 만족하게 하세요.
3. /root/otca-sdk/parents.py — parents.py의 parent_sampler()를 고쳐 부모 없는 root는 버리고 원격·로컬 자식은 부모 sampled 결정을 따르게 하세요. 부모의 trace ID와 span ID 연결을 유지합니다.
4. /root/otca-sdk/errors.py — errors.py의 record_failure(span, error)는 이미 잡힌 주문 검증 예외를 전달받습니다. 원래 예외의 exception 이벤트를 남기고 스팬 상태도 ERROR로 지정하세요.
5. /root/otca-sdk/lifecycle.py — lifecycle.py의 finish(span, provider)를 고쳐 스팬을 끝내고 그 뒤 force_flush를 호출해 반환값을 반환하세요. 함수가 돌아오기 전에 실험 수신기가 checkout 스팬 하나를 수락해야 합니다.
6. /root/otca-sdk/delivery.py — delivery.py의 delivered(observation)는 불리언을 반환합니다. flush, exporter_results, accepted_spans를 함께 보아 HTTP 200 수락만 True, HTTP 400 거절과 미종료 스팬은 False로 판정하세요.
7. /root/otca-sdk/identity.py — identity.py의 resource(service_name)는 SDK Resource를 반환합니다. 입력받은 서비스 이름을 service.name 자원 속성으로 설정하세요. checkout-api와 returns-api 두 경우의 실제 수신 스팬을 확인합니다.
8. /root/otca-sdk/report.json — report.json의 여덟 불리언 가설을 이론과 실제 관측에 맞게 판정하세요. 문자열이나 숫자가 아닌 JSON 불리언을 쓰며, 앞 일곱 단계의 코드도 모두 동작해야 합니다.

참고

단계 8개

  1. 스팬을 익스포터까지 잇기
  2. 기록과 샘플링을 분리하기
  3. 부모 정책의 적용 범위 고치기
  4. 잡힌 예외를 오류로 분류하기
  5. 열린 스팬 끝내고 내보내기
  6. 반환값만 믿던 판정 고치기
  7. 서비스와 현재 요청 연결하기
  8. 사라진 경계를 종합 판정하기