@maru

OpenTelemetry와 OpenInference — AI 에이전트의 '조용한 실패' 잡아내기
LLM을 활용한 검색 증강 생성(RAG)이나 멀티 에이전트 워크플로는 API 호출이 성공하더라도 잘못된 문서를 조회하거나 환각을 일으켜 실패하는 이른바 '조용한 실패'를 빈번히 겪습니다. 기존 애플리케이션 성능 관리 도구는 네트워크 상태나 HTTP 응답 코드 같은 시스템 메트릭에만 의존하기 때문에 이러한 비즈니스 레이어의 오작동을 감지할 수 없습니다. AI 에이전트의 내부 실행 경로와 외부 도구 연동 과정을 투명하게 시각화하고 신뢰성을 평가하기 위해 왜 오픈텔레메트리와 오픈인퍼런스를 결합한 전용 옵저버빌리티 설계가 필요한지 알아봅니다.
OpenTelemetry GenAI 스펙의 한계와 OpenInference의 가치
기존 애플리케이션 성능 관리(APM) 도구는 인공지능(AI) 서비스의 정상적인 작동 여부를 올바르게 감지하기 어렵습니다. 에이전트 시스템에서는 API 서버가 정상 응답을 반환하더라도, 내부적으로 잘못된 문서를 조회하거나 환각을 통해 엉뚱한 결과물을 내놓는 이른바 '조용한 실패'가 자주 발생하기 때문입니다. 이러한 오작동을 신속히 잡아내려면 프롬프트 템플릿, 임베딩, 벡터 데이터베이스 쿼리, 리랭킹 결과 같은 각 하부 실행 단계의 중간 데이터를 정밀하게 기록해야 합니다.
하지만 오픈텔레메트리(OpenTelemetry) 공식 GenAI 시맨틱 컨벤션은 여전히 개발 단계에 머물러 있습니다. 2026년 6월과 7월에 관련 스펙이 별도 리포지토리로 독립하는 등 대대적인 개편을 거쳤으나, 프로덕션 환경에서 생성되는 심층 네스티드 스팬 스키마를 표현하기에는 구조적 제약이 큽니다. 이 때문에 복잡한 에이전트 워크플로나 RAG 시스템의 세부 동작을 표준 규격만으로 표현하는 데는 뚜렷한 기능적 공백이 존재합니다.
아리즈 AI(Arize AI)가 주도하는 오픈소스인 오픈인퍼런스(OpenInference)는 이러한 한계를 극복하는 최선의 확장 규격으로 자리 잡았습니다. LLM 호출과 검색, 도구 사용 등 에이전트 핵심 컴포넌트에 최적화된 시맨틱 스키마를 안정적으로 지원하여 복잡한 컨텍스트를 구조적으로 캡처합니다. 이렇게 수집된 오픈인퍼런스 데이터를 가벼운 변환 레이어를 거쳐 기업의 기존 APM 플랫폼 포맷으로 송출하는 하이브리드 파이프라인이 현업에서 가장 현실적이고 안정적인 모니터링 아키텍처로 주목받고 있습니다.
MCP v2의 분산 트레이싱: SEP-414 표준과 _meta 전파 기법
모델 컨텍스트 프로토콜(MCP)이 무상태 HTTP 아키텍처로 전면 개편되면서, 백엔드 서버와 외부에 독립된 도구 서버 사이의 통신 트레이스를 단절 없이 흐르게 하는 기술이 중요해졌습니다. 기존의 분산 트레이싱은 주로 HTTP 헤더에 의존하여 추적 정보를 전달해 왔습니다. 하지만 MCP 통신에서 널리 쓰이는 표준 입출력이나 로컬 파이프 환경에서는 이러한 헤더 기반 전파 방식이 작동하지 않아 트레이스가 끊기는 한계가 있었습니다.
이 문제를 해결하기 위해 도입된 SEP-414 규격은 전송 수단에 종속되지 않는 독립적인 컨텍스트 전파 방식을 정의합니다. SEP-414 표준에 따르면, JSON-RPC 요청 페이로드 내부의 _meta 객체 속에 W3C Trace Context 규격 정보인 traceparent, tracestate, baggage 등을 직접 삽입하여 전달합니다. 이로 인해 stdio 파이프든 HTTP 연결이든 상관없이 동일한 포맷으로 분산 트레이싱 컨텍스트를 안전하게 유지할 수 있습니다.
여기에 openinference-instrumentation-mcp 라이브러리를 함께 활용하면 이러한 메타데이터 삽입과 파싱 과정을 자동으로 처리할 수 있습니다. 에이전트 클라이언트가 도구를 호출하는 시점부터 MCP 서버가 이를 실제로 실행하고 응답하는 단계까지의 전체 흐름이 단일 워터폴 차트상에서 하나의 연속된 스팬으로 깔끔하게 시각화됩니다.
선언적 에이전트 모니터링: PydanticAI 최신 패키지 도입 사례
에이전트 내부의 동작 흐름이나 복잡한 도구 호출 과정을 추적하기 위해 비즈니스 로직 사이에 수동으로 스팬 기록 코드를 섞어 쓰는 방식은 개발 생산성을 저해합니다. 2026년 7월 30일에 정식 출시된 openinference-instrumentation-pydantic-ai v0.1.18 버전은 정적 타입 안전성을 제공하는 PydanticAI 기반 에이전트의 전체 실행 경로를 단 몇 줄의 선언적 설정으로 수집해 줍니다.
PydanticAI는 자체적으로 표준 오픈텔레메트리 트레이스를 방출하며, 이 최신 라이브러리가 제공하는 전용 프로세서가 이 메타데이터를 에이전트용 특화 스키마로 알아서 가공해 줍니다. 백그라운드 비동기 익스포터를 사용해 메인 비즈니스 처리 루프의 성능 지연을 원천 차단하면서도, 프롬프트 템플릿 변수, 입력 파라미터, 에이전트의 최종 출력 구조까지 원시 타입 구조 그대로 복원하여 모니터링할 수 있습니다.
import os
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from openinference.instrumentation.pydantic_ai import OpenInferenceSpanProcessor
from pydantic import BaseModel
from pydantic_ai import Agent
# 1. 오픈텔레메트리 트레이서 프로바이더 초기화
provider = TracerProvider()
trace.set_tracer_provider(provider)
# 2. PydanticAI 스팬을 OpenInference 포맷으로 가공하는 프로세서 등록
provider.add_span_processor(OpenInferenceSpanProcessor())
# 3. 비동기 익스포터를 통한 오픈소스 수집기 전송 설정
exporter = OTLPSpanExporter(endpoint="http://localhost:6006/v1/traces")
provider.add_span_processor(BatchSpanProcessor(exporter))
# 4. 타입 검증과 트레이싱이 자동 적용되는 에이전트 구성
class UserProfile(BaseModel):
preferred_theme: str
marketing_opt_in: bool
agent = Agent("openai:gpt-4o", result_type=UserProfile)
result = agent.run_sync("사용자 설정에서 어두운 테마 선호 여부와 마케팅 수신 거부를 추출해줘.")이 방식의 핵심적인 이점은 도구나 프롬프트 로직에 트레이싱 관련 보일러플레이트 코드가 전혀 침투하지 않는다는 점입니다. 데이터 검증 도중 발생하는 예외 상황이나 예상치 못한 구조의 데이터가 유입되는 순간에도 원본 에러 정보가 해당 트레이스 스팬에 자동으로 바인딩되므로, 복잡한 다단계 에이전트 동작도 명확하게 디버깅할 수 있습니다.
안정적인 프로덕션 모니터링을 위한 체크리스트
AI 에이전트가 고도화될수록 실시간 옵저버빌리티는 단순한 모니터링을 넘어 서비스 신뢰성을 담보하는 필수 인프라가 됩니다. 엔터프라이즈 APM 플랫폼과의 유연한 연동을 위해 수집 단계부터 OpenTelemetry Collector의 Transform Processor를 활용해 OpenInference 속성을 표준 스펙에 맞게 정규화하는 규칙을 마련해야 합니다. 또한 대규모 프로덕션 환경에서는 모든 데이터를 무조건 저장하기보다 핵심 에이전트 로직의 분기점이나 고비용 도구 호출 위주로 스마트 샘플링을 적용해 인프라 비용과 디버깅 효율성 사이의 최적의 균형을 유지할 것을 권장합니다.
참고 링크