STK-OBS-07 ml(FastAPI) OpenTelemetry 계측

작업 내용

ml(Python FastAPI, :8000)을 opentelemetry-instrumentation으로 계측한다. FastAPI·httpx/requests(외부·BE 호출)·실행 런타임 메트릭을 OTLP로 Collector에 전송한다.

  • opentelemetry-distro + opentelemetry-instrumentation-fastapi(+ httpx) 의존 추가, uv 환경에 반영.
  • OTEL_SERVICE_NAME=ml, Collector 엔드포인트, W3C propagator.
  • aggregator/backend에서 전파된 traceparent를 수신해 ml span이 같은 trace에 연결되는지 확인.
  • 시그널·추천 처리(외부 뉴스/Toss 호출, claude -p subprocess 구간)의 지연이 span으로 보이는지 확인.

롤백: 계측 의존 비활성(OTEL_SDK_DISABLED=true) 또는 instrumentation 미적용. 비즈니스 코드 무변경.

다이어그램

처리 흐름

sequenceDiagram
    participant AGG as aggregator
    participant ML as ml(FastAPI)
    participant EXT as 외부(뉴스/Toss)
    participant COL as Collector
    AGG->>ML: HTTP (traceparent)
    ML->>EXT: httpx (client span)
    ML-->>AGG: response
    ML->>COL: OTLP span + metric

모듈/계측 의존

flowchart LR
    DISTRO["opentelemetry-distro"]
    FAST["fastapi instrumentation"]
    HTTPX["httpx instrumentation"]
    DISTRO --> FAST
    DISTRO --> HTTPX
    DISTRO --> COL["→ Collector"]

테스트 케이스

  • ml /signals/{symbol} 요청이 trace로 생성되고 양 스택에 표시된다.
  • aggregator→ml 전파 trace가 동일 trace_id로 이어진다.
  • httpx 외부 호출(뉴스/Toss)이 자식 client span으로 잡힌다.
  • 요청 처리량·지연·에러율 메트릭이 수집된다.
  • Collector 미기동 시 ml API는 정상 응답한다(계측 실패 격리).