Open Telemetry#

AutoGen bietet native Unterstützung für Open Telemetry. Dies ermöglicht es Ihnen, Telemetriedaten von Ihrer Anwendung zu sammeln und an ein von Ihnen gewähltes Telemetrie-Backend zu senden.

Dies sind die Komponenten, die derzeit instrumentiert sind

Hinweis

Um die Telemetrie der Agentenlaufzeit zu deaktivieren, können Sie den trace_provider im Laufzeitkonstruktor auf opentelemetry.trace.NoOpTracerProvider setzen.

Zusätzlich können Sie die Umgebungsvariable AUTOGEN_DISABLE_RUNTIME_TRACING auf true setzen, um die Telemetrie der Agentenlaufzeit zu deaktivieren, wenn Sie keinen Zugriff auf den Laufzeitkonstruktor haben. Zum Beispiel, wenn Sie ComponentConfig verwenden.

Instrumentieren Ihrer Anwendung#

Um Ihre Anwendung zu instrumentieren, benötigen Sie ein SDK und einen Exporter. Sie haben diese möglicherweise bereits, wenn Ihre Anwendung bereits mit Open Telemetry instrumentiert ist.

Saubere Instrumentierung#

Wenn Sie Open Telemetry nicht in Ihrer Anwendung eingerichtet haben, können Sie diese Schritte befolgen, um Ihre Anwendung zu instrumentieren.

pip install opentelemetry-sdk

Abhängig von Ihrem Open Telemetry Collector können Sie gRPC oder HTTP verwenden, um Ihre Telemetrie zu exportieren.

# Pick one of the following

pip install opentelemetry-exporter-otlp-proto-http
pip install opentelemetry-exporter-otlp-proto-grpc

Als nächstes benötigen wir einen 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

Jetzt können Sie den `trace_provider` beim Erstellen Ihrer Laufzeit übergeben

# for single threaded runtime
single_threaded_runtime = SingleThreadedAgentRuntime(tracer_provider=tracer_provider)
# or for worker runtime
worker_runtime = GrpcWorkerAgentRuntime(tracer_provider=tracer_provider)

Und das ist alles! Ihre Anwendung ist jetzt mit Open Telemetry instrumentiert. Sie können Ihre Telemetriedaten jetzt in Ihrem Telemetrie-Backend anzeigen.

Vorhandene Instrumentierung#

Wenn Sie Open Telemetry bereits in Ihrer Anwendung eingerichtet haben, können Sie den Tracer-Provider beim Erstellen der Laufzeit an diese übergeben

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)

Beispiele#

Siehe Tracing und Observability für ein vollständiges Beispiel, wie Open Telemetry mit AutoGen eingerichtet wird.