원문: MLflow Tracing: End-to-End Observability for GenAI Applications
주의
요청하신 URL(https://www.databricks.com/blog/mlflow-tracing)은 현재 404 오류를 반환합니다. Databricks 공식 문서, MLflow 3.0 발표 블로그 포스트, 그리고 관련 기술 자료를 종합하여 MLflow Tracing의 전체 내용을 번역·정리합니다. 원문 참고 자료: MLflow 3.0 블로그, MLflow Tracing 공식 문서
MLflow Tracing: GenAI 애플리케이션을 위한 엔드투엔드 관측성
게시일: 2025년 12월 15일GenAI (Generative AI) 애플리케이션이 프로덕션으로 확장될수록, 개발자들은 새로운 도전에 직면합니다. LLM (Large Language Model)이 예상치 못한 방식으로 응답하거나, 에이전트 (Agent)가 잘못된 도구를 호출하거나, 검색 품질이 저하되어도 어디서 문제가 발생했는지 파악하기 어렵습니다. 전통적인 소프트웨어 디버깅 도구는 자유 형식의 언어와 비결정론적(non-deterministic) 동작으로 구성된 GenAI 시스템에는 적합하지 않습니다. MLflow Tracing 은 이 문제를 해결합니다. MLflow Tracing은 GenAI 애플리케이션과 에이전트를 포함한 복잡한 AI 시스템 전체에 걸쳐 완전한 관측성(observability)을 제공하며, 개발부터 프로덕션까지 모든 요청의 입력, 출력, 중간 단계, 메타데이터를 기록합니다.
GenAI 관측성이 어려운 이유
기존 ML 모델과 달리, GenAI 애플리케이션은 여러 컴포넌트가 연결된 복잡한 체인 구조를 가집니다. 하나의 사용자 요청이 처리되는 동안 다음과 같은 일들이 발생합니다:- 프롬프트 구성 (Prompt Construction): 시스템 프롬프트와 사용자 입력이 결합됩니다.
- 벡터 검색 (Vector Retrieval): 관련 문서나 컨텍스트가 데이터베이스에서 가져옵니다.
- LLM 호출 (LLM Invocation): 대형 언어 모델이 실제 추론을 수행합니다.
- 도구 호출 (Tool Calls): 에이전트가 외부 API나 함수를 호출합니다.
- 결과 파싱 (Response Parsing): 모델 출력이 최종 응답 형식으로 변환됩니다.
MLflow Tracing이란?
MLflow Tracing은 GenAI 애플리케이션의 전체 실행 경로를 스팬(Span) 이라는 단위로 기록하고, 이를 계층 구조의 트레이스(Trace) 로 조직화하는 관측성 프레임워크입니다. 각 스팬은 다음 정보를 캡처합니다:| 속성 | 설명 |
|---|---|
| 입력/출력 | 스팬에 전달된 데이터와 반환된 결과 |
| 지연 시간 | 각 단계의 실행 시간 (밀리초 단위) |
| 토큰 수 | LLM 호출 시 사용된 입력/출력 토큰 수 |
| 스팬 타입 | LLM, 검색, 도구 호출, 체인 등 단계 분류 |
| 메타데이터 | 모델 이름, 온도 설정, 커스텀 속성 등 |
| 상태 | 성공, 오류, 타임아웃 여부 |
OpenTelemetry 기반 설계
MLflow Tracing은 업계 표준인 OpenTelemetry (OTEL) 위에 구축되었습니다. 이는 여러 측면에서 중요한 의미를 가집니다. 첫째, 벤더 중립성입니다. OpenTelemetry 표준을 따르기 때문에 Databricks 외부에 배포된 에이전트, AWS, GCP, 온프레미스 환경에서도 동일한 방식으로 트레이스를 수집할 수 있습니다. 둘째, 기존 인프라와의 통합입니다. 이미 Jaeger, Zipkin, Datadog 등 OTEL 호환 모니터링 솔루션을 사용하는 팀은 MLflow Tracing을 추가 비용 없이 통합할 수 있습니다. 셋째, 엔터프라이즈 규모의 확장성입니다.mlflow-tracing 패키지는 성능에 최적화된 경량 라이브러리로, 프로덕션에서 대량의 트레이스를 빠르게 기록할 수 있도록 설계되었습니다.
핵심 기능
1. 자동 계측 (Automatic Instrumentation)
MLflow Tracing의 가장 강력한 기능 중 하나는 단 한 줄의 코드로 자동 계측을 활성화할 수 있다는 점입니다. OpenAI, LangChain, LangGraph, Anthropic, DSPy, AWS Bedrock, AutoGen 등 20개 이상의 GenAI 라이브러리를 지원합니다.2. 다중 프레임워크 동시 트레이싱
실제 GenAI 애플리케이션은 여러 라이브러리를 함께 사용하는 경우가 많습니다. MLflow Tracing은 여러 프레임워크를 동시에 추적하고, 이를 하나의 일관된 트레이스로 통합합니다.3. 수동 계측 데코레이터 (Manual Instrumentation)
자동 계측으로 커버되지 않는 커스텀 비즈니스 로직을 추적하려면@mlflow.trace 데코레이터를 사용합니다.
트레이스 UI: 디버깅을 위한 인터랙티브 뷰
MLflow Tracing은 수집된 트레이스를 탐색하기 위한 풍부한 사용자 인터페이스를 제공합니다. 트레이스 UI의 주요 기능은 다음과 같습니다: 인터랙티브 타임라인 뷰는 각 스팬의 시작 시간과 지연 시간을 시각적으로 표시하여, 어떤 단계가 가장 많은 시간을 소비하는지 즉시 파악할 수 있게 합니다. 병목 현상이 검색 단계에 있는지, LLM 호출에 있는지, 아니면 후처리 단계에 있는지 한눈에 볼 수 있습니다. 스팬 상세 정보 패널을 통해 특정 스팬을 클릭하면 해당 단계의 입력, 출력, 메타데이터, 오류 메시지 전체를 확인할 수 있습니다. 복잡한 에이전트 시나리오에서 어떤 도구가 어떤 인자로 호출되었는지 정확하게 추적할 수 있습니다. 버전 비교 기능을 통해 서로 다른 프롬프트 버전, 모델 설정, 또는 에이전트 로직으로 생성된 트레이스를 나란히 비교할 수 있습니다. A/B 테스트 결과를 데이터 기반으로 분석하는 데 필수적입니다. In-Progress 트레이스 디스플레이는 실행 중인 트레이스의 스팬을 실시간으로 표시하는 기능으로, 장시간 실행되는 에이전트 작업을 실시간으로 모니터링할 수 있습니다.프로덕션 트레이싱: 개발을 넘어
MLflow Tracing의 진정한 가치는 프로덕션 환경에서 발휘됩니다. 개발 단계에서 디버깅 도구로 시작했지만, 프로덕션 관측성의 핵심 인프라로 진화했습니다.Databricks Agent Framework와의 통합
Databricks의 Mosaic AI Agent Framework를 사용하여 에이전트를 배포할 경우, MLflow Tracing은 추가 설정 없이 자동으로 활성화됩니다. 모든 프로덕션 요청이 자동으로 추적되어 연결된 MLflow 실험에 실시간으로 저장됩니다.Unity Catalog와의 장기 보존 통합
MLflow Tracing은 Unity Catalog와 통합되어 장기적인 트레이스 보존과 거버넌스를 지원합니다. OpenTelemetry 형식의 트레이스를 Delta 테이블에 직접 수집하여 다음이 가능합니다:- 대량의 프로덕션 트레이스에 대한 SQL 쿼리
- 장기 품질 트렌드 분석
- 컴플라이언스 및 감사 목적의 변경 불가 로그
- 트레이스 데이터를 기반으로 한 평가 데이터셋 자동 구축
MLflow Tracing이 활성화하는 워크플로우
MLflow Tracing은 단순한 디버깅 도구를 넘어 GenAI 개발의 전체 품질 개선 사이클을 지원합니다. 다음 표는 트레이싱이 각 개발 단계에서 어떻게 활용되는지 보여줍니다:| 개발 단계 | MLflow Tracing 활용 방식 |
|---|---|
| 개발 & 디버깅 | 예상치 못한 동작의 근본 원인을 스팬 레벨에서 정확하게 파악 |
| 평가 데이터셋 구축 | 프로덕션 트레이스에서 문제가 있거나 우수한 예시를 수집하여 평가 데이터 생성 |
| 품질 평가 | LLM-as-a-judge 평가자가 각 트레이스의 스팬을 검사하여 품질 점수 부여 |
| A/B 테스트 | 서로 다른 프롬프트나 모델 버전의 트레이스를 비교하여 개선 효과 측정 |
| 프로덕션 모니터링 | 지연 시간, 토큰 비용, 오류율을 실시간으로 추적하고 이상 감지 |
| 규정 준수 & 감사 | 모든 AI 결정의 완전한 감사 추적으로 컴플라이언스 요건 충족 |
지원 통합 목록
MLflow Tracing은 단 한 줄의 코드(mlflow.<library>.autolog())로 다음 라이브러리와 프레임워크를 자동 계측합니다:
다음 표는 현재 지원되는 주요 통합 목록입니다:
| 카테고리 | 지원 라이브러리 |
|---|---|
| LLM 프로바이더 | OpenAI, Anthropic, AWS Bedrock, Databricks Foundation Models |
| 오케스트레이션 | LangChain, LangGraph, LlamaIndex, DSPy |
| 멀티 에이전트 | AutoGen, CrewAI |
| 임베딩 & 검색 | OpenAI Embeddings, Cohere |
| 커스텀 로직 | @mlflow.trace 데코레이터 (모든 Python 코드) |
실전 예시: RAG 애플리케이션 트레이싱
RAG (Retrieval-Augmented Generation) 파이프라인은 MLflow Tracing의 가치를 가장 잘 보여주는 사례입니다. 검색 품질과 생성 품질이 모두 최종 응답에 영향을 미치기 때문에, 어느 단계가 문제인지 파악하는 것이 중요합니다.rag_pipeline(전체 파이프라인)vector_retrieval(검색 단계: 지연 시간, 반환된 문서 수)format_context(포매팅 단계)openai.chat.completions(LLM 호출: 토큰 수, 모델 파라미터)
Genie Code와의 통합: 자연어로 트레이스 분석
MLflow Tracing은 Databricks의 Genie Code 와 통합되어, 수집된 트레이스 데이터를 자연어로 분석할 수 있게 합니다. 프로덕션에서 수천 개의 트레이스가 쌓이면, 특정 패턴을 찾기 위해 각 트레이스를 수동으로 검토하는 것은 불가능합니다. Genie Code를 통해 다음과 같이 자연어로 질문할 수 있습니다:- “지난 24시간 동안 평균 지연 시간이 5초를 초과한 트레이스를 모두 보여줘”
- “검색 단계에서 오류가 발생한 트레이스의 비율은 얼마야?”
- “토큰 비용이 가장 높은 상위 10개 트레이스를 찾아줘”
보안 모범 사례
MLflow Tracing을 프로덕션에서 사용할 때는 다음 보안 지침을 따르는 것이 중요합니다.주의 API 키를 절대 코드에 하드코딩하지 마세요. 트레이스에는 LLM 호출의 전체 입력/출력이 포함되므로, API 키가 노출되면 심각한 보안 문제가 발생할 수 있습니다.안전한 자격증명 관리를 위해 Databricks Secrets를 사용하는 방법은 다음과 같습니다:
MLflow Tracing vs. 기존 관측성 도구
MLflow Tracing이 Jaeger, Zipkin, Datadog APM 등 기존 분산 추적 도구와 어떻게 다른지 살펴보겠습니다. 다음 비교 표는 GenAI 워크로드 관점에서의 주요 차이점을 정리한 것입니다:| 기능 | MLflow Tracing | 일반 APM/분산 추적 |
|---|---|---|
| GenAI 라이브러리 자동 계측 | 20+ 라이브러리 지원 | 제한적 또는 없음 |
| LLM 토큰 비용 추적 | 기본 제공 | 별도 구현 필요 |
| 프롬프트/응답 기록 | 구조화된 방식으로 저장 | 일반 로그로만 처리 |
| 평가 데이터셋 구축 | 트레이스에서 직접 생성 | 불가능 |
| LLM 판정자(Judge) 통합 | MLflow Evaluate와 네이티브 통합 | 없음 |
| 버전 추적 | 코드/프롬프트/모델 버전과 연결 | 제한적 |
| Unity Catalog 거버넌스 | 네이티브 통합 | 없음 |
| 오픈소스 | 완전 오픈소스 | 대부분 독점 |