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는 정상 응답한다(계측 실패 격리).