Telemetry
Telemetry (OpenTelemetry)
AutoGen은 OpenTelemetry를 네이티브로 지원해요. 애플리케이션에서 텔레메트리 데이터를 수집해 원하는 텔레메트리 백엔드로 보낼 수 있죠.
현재 계측된 컴포넌트는 다음과 같아요.
- Runtime (
SingleThreadedAgentRuntime와GrpcWorkerAgentRuntime) - Tool (
BaseTool) — 도구용 GenAI 시맨틱 컨벤션의execute_tool스팬 - AgentChat Agents (
BaseChatAgent) — 에이전트용 GenAI 시맨틱 컨벤션의create_agent·invoke_agent스팬
에이전트 런타임 텔레메트리를 끄려면 런타임 생성자에서
trace_provider를opentelemetry.trace.NoOpTracerProvider로 설정하면 돼요.런타임 생성자에 접근할 수 없으면(예:
ComponentConfig를 쓸 때) 환경 변수AUTOGEN_DISABLE_RUNTIME_TRACING을true로 설정해 에이전트 런타임 텔레메트리를 끌 수도 있어요.
애플리케이션 계측 (Instrumenting your application)
애플리케이션을 계측하려면 SDK와 exporter가 필요해요. 애플리케이션이 이미 OpenTelemetry로 계측돼 있다면 이미 갖고 있을 수도 있어요.
깨끗한 계측 (Clean instrumentation)
애플리케이션에 OpenTelemetry가 설정돼 있지 않다면, 다음 단계로 계측할 수 있어요.
pip install opentelemetry-sdk
OpenTelemetry 컬렉터에 따라 grpc 또는 http로 텔레메트리를 내보낼 수 있어요.
# Pick one of the following
pip install opentelemetry-exporter-otlp-proto-http
pip install opentelemetry-exporter-otlp-proto-grpc
다음으로 tracer provider를 얻어야 해요.
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
def configure_oltp_tracing(endpoint: str = None) -> trace.TracerProvider:
# Configure Tracing
tracer_provider = TracerProvider(resource=Resource({"service.name": "my-service"}))
processor = BatchSpanProcessor(OTLPSpanExporter())
tracer_provider.add_span_processor(processor)
trace.set_tracer_provider(tracer_provider)
return tracer_provider
이제 런타임을 만들 때 trace_provider를 전달할 수 있어요.
# for single threaded runtime
single_threaded_runtime = SingleThreadedAgentRuntime(tracer_provider=tracer_provider)
# or for worker runtime
worker_runtime = GrpcWorkerAgentRuntime(tracer_provider=tracer_provider)
이것으로 끝이에요! 애플리케이션에 OpenTelemetry 계측이 완료됐고, 텔레메트리 백엔드에서 텔레메트리 데이터를 확인할 수 있어요.
기존 계측 (Existing instrumentation)
애플리케이션에 OpenTelemetry가 이미 설정돼 있다면, 런타임을 만들 때 tracer provider를 전달하면 돼요.
from opentelemetry import trace
# Get the tracer provider from your application
tracer_provider = trace.get_tracer_provider()
# for single threaded runtime
single_threaded_runtime = SingleThreadedAgentRuntime(tracer_provider=tracer_provider)
# or for worker runtime
worker_runtime = GrpcWorkerAgentRuntime(tracer_provider=tracer_provider)
예시 (Examples)
AutoGen으로 OpenTelemetry를 설정하는 완전한 예시는 Tracing and Observability 문서를 참고하세요.