메인 콘텐츠로 건너뛰기
Weave는 전용 엔드포인트를 통해 OpenTelemetry 호환 트레이스 데이터를 임포트할 수 있도록 지원합니다. 이 엔드포인트를 사용하면 OTLP(OpenTelemetry Protocol) 형식의 트레이스 데이터를 Weave 프로젝트로 직접 전송할 수 있습니다. 기존 OTel 기반 관측성 파이프라인을 대체하지 않으면서, 애플리케이션을 OpenTelemetry 표준으로 계측하고 해당 트레이스를 다른 Weave 데이터와 함께 표시하려는 경우 이 인테그레이션을 사용하세요. 이 페이지에서는 엔드포인트 세부 정보, 인증, Python 및 TypeScript의 엔드투엔드 예시, OpenTelemetry Collector를 통해 트레이스를 전달하는 방법, 트레이스를 Weave 스레드로 구성하는 방법, 그리고 Weave가 들어오는 span에 적용하는 속성 매핑을 설명합니다.

엔드포인트 세부 정보

  • Path: /otel/v1/traces
  • Method: POST
  • Content-Type: application/x-protobuf
  • Base 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 헤더를 사용하고, span을 올바른 entity와 프로젝트로 라우팅하기 위해 TracerProvider의 리소스 속성을 사용합니다. wandb-api-key 헤더에 W&B API 키를 전달한 후, TracerProvider 클래스에서 다음 키를 OpenTelemetry 리소스 속성으로 지정합니다:
  • wandb.entity: W&B 팀 이름 또는 사용자 이름입니다.
  • 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 dashboard에서 획득할 수 있습니다.

OpenInference 계측

OpenInference는 LLM 호출을 OpenTelemetry span으로 캡처하는 Arize AI의 오픈 소스 계측 라이브러리입니다. 이 예제에서는 OpenAI 계측을 사용하는 방법을 보여줍니다. 사용할 수 있는 계측은 이보다 훨씬 더 많으며, 공식 저장소에서 확인할 수 있습니다. 먼저, 필요한 의존성을 설치하세요:
성능 권장 사항: Weave로 트레이스를 전송할 때는 항상 SimpleSpanProcessor 대신 BatchSpanProcessor를 사용하세요. SimpleSpanProcessor는 span을 동기식으로 내보내므로 다른 워크로드의 성능에 영향을 줄 수 있습니다. 이 예제들에서는 BatchSpanProcessor를 사용합니다. 이 프로세서는 span을 비동기적으로 효율적으로 일괄 처리하므로 프로덕션 환경에서 권장됩니다.
다음 코드를 예를 들어 openinference_example.py와 같은 Python 파일에 붙여 넣으세요:
코드를 실행하세요:

OpenLLMetry 계측

OpenLLMetry는 Traceloop에서 제공하는 오픈 소스 관측성 라이브러리로, 널리 사용되는 LLM 공급자와 프레임워크를 위한 OpenTelemetry 계측을 제공합니다. 다음 예제에서는 OpenAI 계측을 사용하는 방법을 보여줍니다. 추가 예제는 OpenLLMetry 저장소에서 확인할 수 있습니다. 먼저 필요한 의존성을 설치합니다:
다음 코드를 openllmetry_example.py와 같은 Python 파일에 붙여넣으세요. 앞선 예시와 같은 코드이지만, OpenAIInstrumentoropeninference.instrumentation.openai 대신 opentelemetry.instrumentation.openai에서 임포트한다는 점만 다릅니다:
코드를 실행하세요:

계측 없이

계측 패키지 대신 OTel을 직접 사용하려면 그렇게 해도 됩니다. 이 접근 방식을 사용하면 각 span에 설정할 속성을 완전히 제어할 수 있습니다. 스팬 속성은 https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-spans/에 설명된 OpenTelemetry 시맨틱 규약에 따라 해석됩니다. 먼저 필요한 의존성을 설치합니다:
다음 코드를 opentelemetry_example.py와 같은 Python 파일에 붙여 넣으세요:
코드를 실행하세요:
Weave는 트레이스를 해석할 때 어떤 규약을 사용할지 확인하기 위해 span 속성 접두사 gen_aiopeninference를 사용합니다. 두 키가 모두 감지되지 않으면 모든 span 속성이 트레이스 뷰에 표시됩니다. 트레이스를 선택하면 사이드 패널에서 전체 span을 볼 수 있습니다.

OpenTelemetry Collector 사용하기

이전 예시에서는 애플리케이션에서 Weave로 트레이스를 직접 전송합니다. 프로덕션 환경에서는 애플리케이션과 Weave 사이의 중간 계층으로 OpenTelemetry Collector를 사용할 수 있습니다. Collector는 앱에서 트레이스를 수신한 다음 하나 이상의 백엔드로 전달합니다. 이 패턴을 사용하면 인증, 배치 처리, 라우팅 로직을 애플리케이션 코드 외부에서 중앙화할 수 있으며, 단일 파이프라인에서 여러 관측성 백엔드로 트레이스를 분산 전송할 수 있습니다.

collector 설정하기

이 섹션에서는 Docker에서 로컬 OpenTelemetry Collector를 실행하고, 애플리케이션이 해당 collector로 트레이스를 보내도록 구성하는 과정을 설명합니다. 다음 예제에서는 다음을 수행하는 방법을 보여줍니다:
  • OTLP 트레이스를 수신하고, 이를 일괄 처리한 뒤 Weave로 전달하는 로컬 서버(collector)를 배포하는 Docker 설정 파일을 설정합니다.
  • Docker를 사용해 로컬에서 collector를 실행합니다.
  • 도커 컨테이너에서 실행 중인 collector로 트레이스를 전달하는 기본 OpenAI Call을 전송합니다.
collector를 사용하려면 먼저 collector가 OTLP 트레이스를 수신하고 이를 Weave로 내보내도록 구성하는 collector-config.yaml 파일을 만드세요:
collector-config.yaml
이 설정 파일은 다음을 수행합니다.
  • 포트 4318(HTTP)에서 OTLP 트레이스를 수신합니다.
  • wandb-api-key 헤더를 사용해 Weave의 OTLP 엔드포인트로 트레이스를 내보내며, 엔드포인트 URL은 WANDB_OTLP_ENDPOINT에서, API 키는 WANDB_API_KEY에서 읽어옵니다.
  • resource 프로세서를 사용해 wandb.entitywandb.project를 리소스 속성으로 설정하고, 값은 DEFAULT_WANDB_ENTITYDEFAULT_WANDB_PROJECT에서 읽어옵니다. insert action은 애플리케이션 코드에서 이러한 속성을 이미 설정하지 않은 경우에만 속성을 주입합니다.
  • 네트워크 오버헤드를 줄이기 위해 exporter에 내장된 sending_queue를 배치 처리와 함께 활성화합니다.
collector 설정을 완료한 후, 다음 Docker command에서 API 및 entity 값을 업데이트한 뒤 실행합니다:
collector가 실행되면 OTEL_EXPORTER_OTLP_ENDPOINT 환경 변수를 설정해 애플리케이션이 해당 엔드포인트로 트레이스를 내보내도록 구성하세요. OTel SDK는 이 변수를 자동으로 읽으므로 exporter에 엔드포인트를 전달할 필요가 없습니다. 애플리케이션의 TracerProvider에서 wandb.entity 또는 wandb.project를 리소스 속성으로 설정하면 collector 설정에 정의된 기본값보다 우선합니다.
OpenAIInstrumentor는 OpenAI Call을 래핑하고 트레이스를 생성한 뒤 collector로 내보냅니다. collector는 인증과 Weave로의 라우팅을 처리합니다. 스크립트를 실행한 후에는 Weave UI에서 트레이스를 확인할 수 있습니다. 트레이스를 추가 백엔드로 전송하려면 exporter를 더 추가하고 service.pipelines.traces.exporters 목록에 포함하세요. 예를 들어 동일한 Collector 인스턴스에서 Weave와 Jaeger 둘 다로 내보낼 수 있습니다.

OTel 트레이스를 스레드로 정리하기

Weave 스레드를 사용하면 관련 트레이스를 그룹화하여 멀티턴 대화나 사용자 세션을 단일 단위로 분석할 수 있습니다. 특정 span 속성을 추가해 OpenTelemetry 트레이스를 스레드로 정리한 다음, Weave의 Thread UI를 사용해 멀티턴 대화나 사용자 세션과 같은 관련 오퍼레이션을 분석할 수 있습니다. 스레드 그룹화를 사용하려면 OTel span에 다음 속성을 추가하세요:
  • wandb.thread_id: span을 특정 스레드로 그룹화합니다.
  • wandb.is_turn: span을 대화 턴으로 표시합니다(스레드 view에서 행으로 표시됨).
다음 예제는 OTel 트레이스를 Weave 스레드로 정리하는 방법을 보여줍니다. wandb.thread_id를 사용해 관련 오퍼레이션을 그룹화하고, wandb.is_turn을 사용해 스레드 view에서 행으로 표시되는 상위 수준 오퍼레이션을 표시합니다.
이 예제를 실행하려면 다음 설정을 사용하세요:
이러한 트레이스를 전송한 후에는 Weave UI의 Threads 탭에서 확인할 수 있습니다. 여기서 트레이스는 thread_id별로 그룹화되며, 각 턴은 별도의 행으로 표시됩니다。

속성 매핑

Weave는 다양한 계측 프레임워크의 OpenTelemetry 스팬 속성을 내부 데이터 모델에 매핑합니다. 이 매핑 덕분에 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 tracking 속성 (mlflow.spanInputs, mlflow.spanOutputs).
  • Traceloop: OpenLLMetry 계측 속성 (traceloop.entity.*, traceloop.span.kind).
  • Google Vertex AI: Vertex AI agent 속성 (gcp.vertex.agent.*).
  • OpenLit: OpenLit 관측성 속성 (gen_ai.content.completion).
  • Langfuse: Langfuse 트레이싱 속성 (langfuse.startTime, langfuse.endTime).

속성 레퍼런스

제한 사항

Weave UI는 Chat 뷰에서 OTel 트레이스 도구 call을 렌더링하는 기능을 지원하지 않습니다. 대신 원시 JSON으로 표시됩니다.