엔드포인트 세부 정보
- 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가 있습니다.
인증 및 라우팅
wandb-api-key 헤더를 사용하고, span을 올바른 entity와 프로젝트로 라우팅하기 위해 TracerProvider의 리소스 속성을 사용합니다.
wandb-api-key 헤더에 W&B API 키를 전달한 후, TracerProvider 클래스에서 다음 키를 OpenTelemetry 리소스 속성으로 지정합니다:
wandb.entity: W&B 팀 이름 또는 사용자 이름입니다.wandb.project: 트레이스를 보낼 프로젝트 이름입니다.
예시
WANDB_API_KEY: User Settings에서 확인할 수 있습니다.- Entity: 액세스 권한이 있는 팀/entity 아래의 프로젝트에만 트레이스를 로그할 수 있습니다. entity 이름을 찾으려면 W&B 대시보드로 이동한 다음 왼쪽 사이드바의 Teams 필드를 확인하세요.
- 프로젝트 이름: 원하는 이름을 선택하세요.
OPENAI_API_KEY: OpenAI dashboard에서 획득할 수 있습니다.
OpenInference 계측
- Python
- TypeScript
- Python
- TypeScript
다음 코드를 예를 들어 코드를 실행하세요:
openinference_example.py와 같은 Python 파일에 붙여 넣으세요:OpenLLMetry 계측
- Python
- TypeScript
- Python
- TypeScript
다음 코드를 코드를 실행하세요:
openllmetry_example.py와 같은 Python 파일에 붙여넣으세요. 앞선 예시와 같은 코드이지만, OpenAIInstrumentor는 openinference.instrumentation.openai 대신 opentelemetry.instrumentation.openai에서 임포트한다는 점만 다릅니다:계측 없이
- Python
- TypeScript
- Python
- TypeScript
다음 코드를 코드를 실행하세요:
opentelemetry_example.py와 같은 Python 파일에 붙여 넣으세요:gen_ai와 openinference를 사용합니다. 두 키가 모두 감지되지 않으면 모든 span 속성이 트레이스 뷰에 표시됩니다. 트레이스를 선택하면 사이드 패널에서 전체 span을 볼 수 있습니다.
OpenTelemetry Collector 사용하기
collector 설정하기
- OTLP 트레이스를 수신하고, 이를 일괄 처리한 뒤 Weave로 전달하는 로컬 서버(collector)를 배포하는 Docker 설정 파일을 설정합니다.
- Docker를 사용해 로컬에서 collector를 실행합니다.
- 도커 컨테이너에서 실행 중인 collector로 트레이스를 전달하는 기본 OpenAI Call을 전송합니다.
collector-config.yaml 파일을 만드세요:
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에서 읽어옵니다.insertaction은 애플리케이션 코드에서 이러한 속성을 이미 설정하지 않은 경우에만 속성을 주입합니다.- 네트워크 오버헤드를 줄이기 위해 exporter에 내장된
sending_queue를 배치 처리와 함께 활성화합니다.
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 트레이스를 스레드로 정리하기
wandb.thread_id: span을 특정 스레드로 그룹화합니다.wandb.is_turn: span을 대화 턴으로 표시합니다(스레드 view에서 행으로 표시됨).
wandb.thread_id를 사용해 관련 오퍼레이션을 그룹화하고, wandb.is_turn을 사용해 스레드 view에서 행으로 표시되는 상위 수준 오퍼레이션을 표시합니다.
초기 설정
초기 설정
이 예제를 실행하려면 다음 설정을 사용하세요:
- Python
- TypeScript
기본 단일 턴 스레드 트레이스하기
기본 단일 턴 스레드 트레이스하기
- Python
- TypeScript
동일한 스레드 ID를 공유하는 멀티턴 대화 트레이스하기
동일한 스레드 ID를 공유하는 멀티턴 대화 트레이스하기
- Python
- TypeScript
여러 단계로 깊게 중첩된 오퍼레이션을 트레이스하고 최외곽 스팬만 턴으로 표시
여러 단계로 깊게 중첩된 오퍼레이션을 트레이스하고 최외곽 스팬만 턴으로 표시
- Python
- TypeScript
스레드에 속하지만 턴은 아닌 백그라운드 오퍼레이션 트레이스
스레드에 속하지만 턴은 아닌 백그라운드 오퍼레이션 트레이스
- Python
- TypeScript
thread_id별로 그룹화되며, 각 턴은 별도의 행으로 표시됩니다。
속성 매핑
지원되는 프레임워크
- 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).