Telemetry

Telemetry (OpenTelemetry)

AutoGen은 OpenTelemetry네이티브로 지원해요. 애플리케이션에서 텔레메트리 데이터를 수집해 원하는 텔레메트리 백엔드로 보낼 수 있죠.

현재 계측된 컴포넌트는 다음과 같아요.

  • Runtime (SingleThreadedAgentRuntimeGrpcWorkerAgentRuntime)
  • Tool (BaseTool) — 도구용 GenAI 시맨틱 컨벤션의 execute_tool 스팬
  • AgentChat Agents (BaseChatAgent) — 에이전트용 GenAI 시맨틱 컨벤션의 create_agent·invoke_agent 스팬

에이전트 런타임 텔레메트리를 끄려면 런타임 생성자에서 trace_provideropentelemetry.trace.NoOpTracerProvider로 설정하면 돼요.

런타임 생성자에 접근할 수 없으면(예: ComponentConfig를 쓸 때) 환경 변수 AUTOGEN_DISABLE_RUNTIME_TRACINGtrue로 설정해 에이전트 런타임 텔레메트리를 끌 수도 있어요.

애플리케이션 계측 (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를 얻어야 해요.

출처: 공식 문서 - Open Telemetry

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 문서를 참고하세요.

더 알아보기 (Learn more)