15장. OpenTelemetry로 공급자 밖의 증거를 만든다
공급자 콘솔만으로는 전체 경로를 볼 수 없다
모델 공급자 트레이스는 모델 호출을 자세히 보여 줄 수 있지만 사내 정책 DB, 승인 큐, 지급 시스템까지 하나의 경로로 묶지 못할 수 있다. OpenTelemetry는 애플리케이션·데이터베이스·HTTP·생성형 AI 신호를 공통 트레이스 문맥으로 연결하는 중립 계층이 된다.
전형적인 경로는 다음과 같다.
ClaimOps SDK → OTLP → OpenTelemetry Collector
├→ 개발용 콘솔
├→ 트레이스 저장소
├→ 메트릭 저장소
└→ 승인된 보안 아카이브
Collector는 수신, 처리, 내보내기를 분리한다. 민감 속성 제거, 배치, 샘플링, 라우팅을 애플리케이션마다 다시 구현하지 않고 중앙 정책으로 관리할 수 있다. 다만 Collector 설정도 코드 리뷰와 테스트가 필요한 보안 경계다.
의미 규약을 그대로 복사하지 않는다
OpenTelemetry 의미 규약 1.43.0은 공통 속성 이름과 의미를 제공하고 생성형 AI 규약은 별도 저장소로 이동 중이다. 실습에서는 gen_ai.operation.name처럼 안정적인 의미를 참고하되 모든 도구 인수와 결과를 자동 수집하지 않는다. 속성의 표준화와 수집 필요성은 별개의 결정이다.
권장 네이밍은 다음처럼 계층을 드러낸다.
claimops.workflow.review
claimops.input.validate
claimops.policy.retrieve
claimops.model.structure
claimops.decision
claimops.tool.refund.prepare
스팬 이름에 고객 ID나 긴 문장을 넣지 않는다. 그런 값은 검색이 승인된 속성으로 제한하거나 안전한 참조로 둔다.
샘플링 설계
정상 저위험 요청은 일부만 저장할 수 있지만 오류, 위험 승인, UNKNOWN 도구 상태, 고지연 요청은 보존해야 한다. 결과를 보고 결정하는 tail sampling은 Collector에서 수행할 수 있다. 그러나 Collector가 결정을 내릴 때까지 버퍼가 필요하므로 메모리와 지연을 계산해야 한다.
완료 기준
- 공급자 트레이스와 애플리케이션 트레이스의 경계를 설명할 수 있다.
- Collector에서 제거·배치·샘플링할 속성을 정했다.
- 스팬 이름에 높은 카디널리티 값을 넣지 않았다.