이 엔드포인트의 데이터는 Traces 및 Threads 뷰에 표시됩니다. 멀티턴 에이전트의 OTel span을 Agents 뷰로 보내려면 agents 엔드포인트를 사용하세요. 자세한 내용은 Agents 뷰로 OpenTelemetry span 보내기를 참조하세요.
엔드포인트 세부 정보
- 경로:
/otel/v1/traces - Method:
POST - Content-Type:
application/x-protobuf - 기본 URL: OTel 트레이스 엔드포인트의 기본 URL은 W&B 배포 유형에 따라 다릅니다.
- Multi-tenant Cloud:
https://trace.wandb.ai/otel/v1/traces - Dedicated Cloud 및 Self-Managed 인스턴스:
https://<your-subdomain>.wandb.io/traces/otel/v1/traces
<your-subdomain>을 조직의 고유한 W&B 도메인(예: acme.wandb.io)으로 바꾸세요.
인증 및 라우팅
Weave는wandb-api-key 헤더로 요청을 인증하고, TracerProvider의 리소스 속성을 사용해 span을 올바른 entity와 프로젝트로 라우팅합니다. wandb-api-key 헤더에 W&B API 키를 전달한 다음, TracerProvider 클래스에서 다음 키를 OpenTelemetry Resource 속성으로 지정하세요.
wandb.entity: CoreWeave Forge 팀 또는 사용자 이름입니다.wandb.project: 트레이스를 보낼 프로젝트 이름입니다.
예시
다음 예시는 Python과 TypeScript를 사용해 OpenTelemetry 트레이스를 Weave로 전송하는 방법을 보여줍니다. 예시마다 접근 방식이 다르며, OpenInference 계측 라이브러리를 사용하는 방법, OpenLLMetry 계측을 사용하는 방법, 계측 패키지 없이 OpenTelemetry SDK를 직접 사용하는 방법을 각각 다룹니다. 아래 코드 샘플을 실행하기 전에 다음 필드를 설정하세요.WANDB_API_KEY: User Settings에서 조회할 수 있습니다.- entity: 액세스 권한이 있는 팀/entity의 프로젝트에만 트레이스를 로깅할 수 있습니다. entity 이름을 확인하려면 W&B 대시보드로 이동하여 왼쪽 사이드바의 Teams 필드를 확인하세요.
- 프로젝트 이름: 원하는 이름을 지정하세요.
OPENAI_API_KEY: OpenAI 대시보드에서 획득할 수 있습니다.
OpenInference 계측
OpenInference는 Arize AI에서 제공하는 오픈 소스 계측 라이브러리로, LLM Call을 OpenTelemetry span으로 캡처합니다. 이 예제에서는 OpenAI 계측을 사용하는 방법을 보여줍니다. 다른 계측은 공식 저장소에서 확인할 수 있습니다. 먼저 필요한 의존성을 설치하세요.- Python
- TypeScript
- Python
- TypeScript
다음 코드를 코드를 실행하세요.
openinference_example.py 같은 Python 파일에 붙여 넣으세요.OpenLLMetry 계측
OpenLLMetry는 Traceloop의 오픈 소스 관측성 라이브러리로, 널리 사용되는 LLM 공급자와 프레임워크에 OpenTelemetry 계측을 제공합니다. 다음 예시에서는 OpenLLMetry의 OpenAI 계측을 사용하는 방법을 보여줍니다. 더 많은 예시는 OpenLLMetry 저장소에서 확인할 수 있습니다. 먼저 필요한 의존성을 설치하세요.- Python
- TypeScript
- Python
- TypeScript
다음 코드를 코드를 실행하세요.
openllmetry_example.py 같은 Python 파일에 붙여 넣으세요. 앞의 예시와 동일한 코드이지만, OpenAIInstrumentor를 openinference.instrumentation.openai가 아닌 opentelemetry.instrumentation.openai에서 임포트한다는 점만 다릅니다.계측 없이 사용하기
계측 패키지 대신 OTel을 직접 사용할 수도 있습니다. 이 방식을 사용하면 각 span에 어떤 속성을 설정할지 전체적으로 제어할 수 있습니다. Weave는 https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-spans/에 설명된 OpenTelemetry 시맨틱 규칙에 따라 span 속성을 파싱합니다. 먼저 필요한 의존성을 설치하세요.- Python
- TypeScript
- Python
- TypeScript
다음 코드를 코드를 실행하세요.
opentelemetry_example.py 같은 Python 파일에 붙여 넣으세요.gen_ai와 openinference를 기준으로, 트레이스를 해석할 때 적용할 규칙이 있는지, 있다면 어떤 규칙을 적용할지 확인합니다. 두 키가 모두 감지되지 않으면 트레이스 뷰에 모든 span 속성이 표시됩니다. 트레이스를 선택하면 측면 패널에서 전체 span을 확인할 수 있습니다.
OpenTelemetry Collector 사용하기
앞의 예시에서는 애플리케이션에서 Weave로 트레이스를 직접 내보냈습니다. 프로덕션 환경에서는 애플리케이션과 Weave 사이에 OpenTelemetry Collector를 중개자로 둘 수 있습니다. collector는 앱에서 트레이스를 받아 하나 이상의 백엔드로 전달합니다. 이 패턴을 사용하면 인증, 배치 처리, 라우팅 로직을 애플리케이션 코드 밖에서 한곳에 모아 관리할 수 있으며, 하나의 파이프라인에서 여러 관측성 백엔드로 트레이스를 분산 전송할 수 있습니다.collector 설정
이 섹션에서는 Docker에서 로컬 OpenTelemetry Collector를 실행하고, 애플리케이션이 이 collector로 트레이스를 전송하도록 설정하는 방법을 안내합니다. 다음 예시에서는 아래 작업을 수행하는 방법을 보여 줍니다.- OTLP 트레이스를 수신해 배치로 묶은 뒤 Weave로 전달하는 로컬 서버(collector)를 배포하도록 Docker 설정 파일을 작성합니다.
- Docker를 사용해 collector를 로컬에서 실행합니다.
- OpenAI에 기본 Call을 보내고, 도커 컨테이너에서 실행 중인 collector로 트레이스를 전달합니다.
collector-config.yaml 파일을 생성하세요. 이 파일은 collector가 OTLP 트레이스를 수신해 Weave로 내보내도록 설정합니다.
collector-config.yaml
- 포트
4318(HTTP)에서 OTLP 트레이스를 수신합니다. wandb-api-key헤더를 사용하여 Weave의 OTLP 엔드포인트로 트레이스를 내보냅니다. 엔드포인트 URL은WANDB_OTLP_ENDPOINT에서, API 키는WANDB_API_KEY에서 읽어옵니다.resource프로세서를 사용하여wandb.entity와wandb.project를 리소스 속성으로 설정하며, 값은DEFAULT_WANDB_ENTITY와DEFAULT_WANDB_PROJECT에서 읽어옵니다.insert액션은 애플리케이션 코드에서 이 속성들을 아직 설정하지 않은 경우에만 주입합니다.- 익스포터에 기본 제공되는
sending_queue와 배치 처리를 활성화하여 네트워크 오버헤드를 줄입니다.
OTEL_EXPORTER_OTLP_ENDPOINT 환경 변수를 설정하여 애플리케이션이 collector로 트레이스를 내보내도록 구성하세요. OTel SDK가 이 변수를 자동으로 읽으므로 익스포터에 엔드포인트를 따로 전달할 필요가 없습니다.
애플리케이션의 TracerProvider에서 wandb.entity 또는 wandb.project를 리소스 속성으로 설정하면, 해당 값이 collector 설정에 정의된 기본값보다 우선 적용됩니다.
OpenAIInstrumentor는 OpenAI Call을 래핑하여 트레이스를 생성하고, 이를 collector로 내보냅니다. 인증 및 Weave로의 라우팅은 collector가 처리합니다.
스크립트를 실행하면 Weights & Biases UI에서 트레이스를 확인할 수 있습니다.
트레이스를 다른 백엔드로도 보내려면 익스포터를 추가하고 service.pipelines.traces.exporters 목록에 포함하세요. 예를 들어, 하나의 Collector 인스턴스에서 Weave와 Jaeger로 동시에 내보낼 수 있습니다.
OTel 트레이스를 스레드로 구성하기
Weave 스레드를 사용하면 관련 트레이스를 그룹화하여 멀티턴 대화나 사용자 세션을 하나의 단위로 분석할 수 있습니다. 특정 span 속성을 추가해 OpenTelemetry 트레이스를 스레드로 구성한 다음, Weave의 Thread UI에서 멀티턴 대화나 사용자 세션 같은 관련 오퍼레이션을 분석하세요. 스레드 그룹화를 사용하려면 OTel span에 다음 속성을 추가하세요.wandb.thread_id: span을 특정 스레드로 그룹화합니다.wandb.is_turn: span을 대화 턴으로 표시합니다(스레드 뷰에 행으로 나타남).
wandb.thread_id로 관련 오퍼레이션을 그룹화하고, wandb.is_turn으로 스레드 뷰에 행으로 나타나는 상위 수준 오퍼레이션을 표시합니다.
초기 설정
초기 설정
예시를 실행하려면 다음 설정을 사용하세요.
- Python
- TypeScript
기본 단일 턴 스레드 트레이스하기
기본 단일 턴 스레드 트레이스하기
- Python
- TypeScript
하나의 스레드 ID를 공유하는 멀티턴 대화 트레이스하기
하나의 스레드 ID를 공유하는 멀티턴 대화 트레이스하기
- Python
- TypeScript
깊게 중첩된 오퍼레이션을 트레이스하고 가장 바깥쪽 span만 턴으로 표시하기
깊게 중첩된 오퍼레이션을 트레이스하고 가장 바깥쪽 span만 턴으로 표시하기
- Python
- TypeScript
스레드에 속하지만 턴이 아닌 백그라운드 오퍼레이션 트레이스하기
스레드에 속하지만 턴이 아닌 백그라운드 오퍼레이션 트레이스하기
- Python
- TypeScript
thread_id별로 그룹화되며, 각 턴은 별도의 행으로 표시됩니다.
속성 매핑
Weave는 다양한 계측 프레임워크의 OpenTelemetry span 속성을 내부 데이터 모델에 매핑합니다. 따라서 기존 계측에서 사용하던 속성의 이름을 바꾸거나 변환하지 않아도 Weave에서 풍부한 뷰를 확인할 수 있습니다. 여러 속성 이름이 같은 필드에 매핑되면 Weave는 우선순위에 따라 적용하므로, 여러 프레임워크를 같은 트레이스 안에서 함께 사용할 수 있습니다.지원되는 프레임워크
Weave는 다음 관측성 프레임워크 및 SDK의 속성 규칙을 지원합니다.- OpenTelemetry GenAI: 생성형 AI용 표준 시맨틱 규칙(
gen_ai.*) - OpenInference: Arize AI의 계측 라이브러리(
input.value,output.value,llm.*,openinference.*) - Vercel AI SDK: Vercel AI SDK 속성(
ai.prompt,ai.response,ai.model.*,ai.usage.*) - MLflow: MLflow 추적 속성(
mlflow.spanInputs,mlflow.spanOutputs) - Traceloop: OpenLLMetry 계측(
traceloop.entity.*,traceloop.span.kind) - Google Vertex AI: Vertex AI 에이전트 속성(
gcp.vertex.agent.*) - OpenLit: OpenLit 관측성 속성(
gen_ai.content.completion) - Logfire / Pydantic AI: Logfire의 Pydantic AI 계측(
gen_ai.input.messages,gen_ai.output.messages,pydantic_ai.all_messages,final_result) - Langfuse: Langfuse 트레이싱 속성(
langfuse.startTime,langfuse.endTime)