Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Zu OpenTelemetry Python migrieren
Dieses Handbuch hilft Ihnen bei der Migration von Python-Anwendungen vom X-Ray SDK zur OpenTelemetry Instrumentierung. Es behandelt sowohl automatische als auch manuelle Instrumentierungsansätze mit Codebeispielen für gängige Szenarien.
Sections
Automatische Instrumentierungslösungen ohne Code
Mit X-Ray SDK mussten Sie Ihren Anwendungscode ändern, um Anfragen zu verfolgen. OpenTelemetry bietet automatische Instrumentierungslösungen ohne Code zur Rückverfolgung von Anfragen. Mit haben Sie die Möglichkeit OpenTelemetry, automatische Instrumentierungslösungen ohne Code zu verwenden, um Anfragen zu verfolgen.
Nullcode mit basierten automatischen Instrumentierungen OpenTelemetry
-
Verwenden der automatischen Instrumentierung von AWS Distro for OpenTelemetry (ADOT) für Python — Informationen zur automatischen Instrumentierung für Python-Anwendungen finden Sie unter Tracing and Metrics with the AWS Distro
for Python Auto-Instrumentation. OpenTelemetry (Optional) Sie können CloudWatch Application Signals auch bei der automatischen Instrumentierung Ihrer Anwendungen AWS mit der automatischen ADOT-Python-Instrumentierung aktivieren, um den aktuellen Anwendungsstatus zu überwachen und die langfristige Anwendungsleistung anhand Ihrer Geschäftsziele zu verfolgen. Application Signals bietet Ihnen einen einheitlichen, anwendungsorientierten Überblick über Ihre Anwendungen, Services und Abhängigkeiten und unterstützt Sie bei der Überwachung und Diagnose des Zustands Ihrer Anwendungen.
-
Verwendung der automatischen OpenTelemetry Python-Zero-Code-Instrumentierung — Informationen zur automatischen Instrumentierung mit OpenTelemetry Python finden Sie unter Python-Zero-Code-Instrumentierung
.
Instrumentieren Sie Ihre Anwendungen manuell
Sie können Ihre Anwendungen mithilfe des pip
Befehls manuell instrumentieren.
Initialisierung des Tracing-Setups
Mit ADOT Auto-Instrumentation für Python
Sie können die automatische ADOT-Instrumentierung für Python verwenden, um Ihre Python-Anwendungen automatisch zu konfigurieren OpenTelemetry . Durch die automatische ADOT-Instrumentierung müssen Sie keine manuellen Codeänderungen vornehmen, um eingehende Anfragen zu verfolgen oder Bibliotheken wie das AWS SDK oder die HTTP-Clients zu verfolgen. Weitere Informationen finden Sie unter Tracing and Metrics with the AWS Distro for OpenTelemetry Python
Die automatische ADOT-Instrumentierung für Python unterstützt:
-
Röntgenfernabtastung durch die Umgebungsvariable
export OTEL_TRACES_SAMPLER=xray
-
Übertragung des X-Ray-Trace-Kontextes (standardmäßig aktiviert)
-
Ressourcenerkennung (Ressourcenerkennung für Amazon- EC2, Amazon ECS- und Amazon EKS-Umgebungen ist standardmäßig aktiviert)
-
Automatische Bibliotheksinstrumentierungen für alle unterstützten OpenTelemetry Instrumentierungen sind standardmäßig aktiviert. Sie können sie selektiv über die
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS
Umgebungsvariable deaktivieren. (alle sind standardmäßig aktiviert) -
Manuelles Erstellen von Spans
Von X-Ray-Service-Plug-ins bis hin zu OpenTelemetry AWS Ressourcenanbietern
Das X-Ray-SDK bietet Plug-ins, die Sie hinzufügen könnenxray_recorder
, um plattformspezifische Informationen aus dem gehosteten Service wie Amazon EC2, Amazon ECS und Elastic Beanstalk zu erfassen. Es ist den Resource Providers insofern ähnlich OpenTelemetry , als es die Informationen als Ressourcenattribute erfasst. Es sind mehrere Ressourcenanbieter für verschiedene AWS Plattformen verfügbar.
-
Beginnen Sie mit der Installation des AWS Erweiterungspakets,
pip install opentelemetry-sdk-extension-aws
-
Konfigurieren Sie den gewünschten Ressourcendetektor. Das folgende Beispiel zeigt, wie der EC2 Amazon-Ressourcenanbieter im OpenTelemetry SDK konfiguriert wird
from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.extension.aws.resource.ec2 import ( AwsEc2ResourceDetector, ) from opentelemetry.sdk.resources import get_aggregated_resources provider = TracerProvider( active_span_processor=span_processor, resource=get_aggregated_resources([ AwsEc2ResourceDetector(), ])) trace.set_tracer_provider(provider)
Nachverfolgung eingehender Anfragen
AWS SDK-Instrumentierung
Instrumentierung ausgehender HTTP-Aufrufe über Anfragen
Instrumentierungsunterstützung für andere Bibliotheken
Die vollständige Liste der unterstützten Bibliotheksinstrumentationen für OpenTelemetry Python finden Sie unter Unterstützte Bibliotheken, Frameworks, Anwendungsserver und JVMs
Alternativ können Sie in der OpenTelemetry Registry suchen, um herauszufinden, ob Instrumentierung OpenTelemetry unterstützt wird. Suchen Sie in der Registry
Manuelles Erstellen von Trace-Daten
Sie können Segmente und Untersegmente mithilfe von xray_recorder
in Ihrer Python-Anwendung erstellen. Weitere Informationen finden Sie unter Manuelles Instrumentieren von Python-Code. Sie können den Trace-Daten auch manuell Anmerkungen und Metadaten hinzufügen.
Spans mit SDK erstellen OpenTelemetry
Verwenden Sie die start_as_current_span
API, um einen Bereich zu starten und ihn für die Erstellung von Spans festzulegen. Beispiele zum Erstellen von Spans finden Sie unter Spans erstellenSERVER
Typbereiche werden in Röntgensegmente umgewandelt, während andere in Röntgenuntersegmente umgewandelt werden.
from opentelemetry import trace from opentelemetry.trace import SpanKind import time tracer = trace.get_tracer("my.tracer.name") # Create a new span to track some work with tracer.start_as_current_span("parent", kind=SpanKind.SERVER) as parent_span: time.sleep(1) # Create a nested span to track nested work with tracer.start_as_current_span("child", kind=SpanKind.CLIENT) as child_span: time.sleep(2) # the nested span is closed when it's out of scope # Now the parent span is the current span again time.sleep(1) # This span is also closed when it goes out of scope
Hinzufügen von Anmerkungen und Metadaten zu Traces mit SDK OpenTelemetry
Das X-Ray-Python-SDK bietet separate APIs put_metadata
Funktionen zum Hinzufügen von Anmerkungen und Metadaten zu einem Trace. put_annotation
Im OpenTelemetry SDK sind die Anmerkungen und Metadaten einfach Attribute in einem Bereich, die über die set_attribute
API hinzugefügt werden.
Span-Attribute, bei denen es sich um Anmerkungen zu einem Trace handeln soll, werden unter dem reservierten Schlüssel hinzugefügt, aws.xray.annotations
dessen Wert eine Liste von Schlüssel-Wert-Annotationspaaren ist. Alle anderen Span-Attribute werden zu Metadaten für das konvertierte Segment oder Untersegment.
Wenn Sie den ADOT-Collector verwenden, können Sie außerdem konfigurieren, welche Span-Attribute in X-Ray-Anmerkungen konvertiert werden sollen, indem Sie das indexed_attributes
in der Collector-Konfiguration angeben.
Das folgende Beispiel zeigt, wie Sie mithilfe des SDK Anmerkungen und Metadaten zu einer Ablaufverfolgung hinzufügen. OpenTelemetry
with tracer.start_as_current_span("parent", kind=SpanKind.SERVER) as parent_span: parent_span.set_attribute("TransactionId", "qwerty12345") parent_span.set_attribute("AccountId", "1234567890") # This will convert the TransactionId and AccountId to be searchable X-Ray annotations parent_span.set_attribute("aws.xray.annotations", ["TransactionId", "AccountId"]) with tracer.start_as_current_span("child", kind=SpanKind.CLIENT) as child_span: # The MicroTransactionId will be converted to X-Ray metadata for the child subsegment child_span.set_attribute("MicroTransactionId", "micro12345")
Lambda-Instrumentierung
Um Ihre Lambda-Funktionen auf X-Ray zu überwachen, aktivieren Sie X-Ray und fügen der Funktionsaufrufrolle entsprechende Berechtigungen hinzu. Wenn Sie Downstream-Anfragen von Ihrer Funktion verfolgen, würden Sie den Code außerdem mit dem X-Ray-Python-SDK instrumentieren.
OpenTelemetry Für X-Ray wird empfohlen, die CloudWatch Application Signals Lambda-Schicht bei ausgeschalteten Application Signals zu verwenden. Dadurch wird Ihre Funktion automatisch instrumentiert und Spans für den Funktionsaufruf und alle nachgelagerten Anfragen Ihrer Funktion generiert. Wenn Sie neben der Ablaufverfolgung auch Anwendungssignale verwenden möchten, um den Zustand Ihrer Funktion zu überwachen, finden Sie weitere Informationen unter Aktivieren Ihrer Anwendungen auf Lambda.
-
Suchen Sie den erforderlichen Lambda-Layer-ARN für Ihre Funktion aus AWS Lambda Layer for OpenTelemetry ARNs und fügen Sie ihn hinzu.
-
Stellen Sie die folgenden Umgebungsvariablen für Ihre Funktion ein.
-
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
— Dadurch wird die automatische Instrumentierung für die Funktion geladen -
OTEL_AWS_APPLICATION_SIGNALS_ENABLED=false
— Dadurch wird die Überwachung von Anwendungssignalen deaktiviert
-
Manuelles Erstellen von Spans mit Lambda-Instrumentierung
Darüber hinaus können Sie innerhalb Ihrer Funktion benutzerdefinierte Zeitspannen generieren, um die Arbeit zu verfolgen. Sie können dies tun, indem Sie nur das opentelemetry-api
Paket in Verbindung mit der automatischen Lambda-Layer-Instrumentierung von Application Signals verwenden.
-
Nehmen Sie das
opentelemetry-api
als Abhängigkeit in Ihre Funktion auf -
Der folgende Codeausschnitt ist ein Beispiel für die Generierung benutzerdefinierter Spans
from opentelemetry import trace # Get the tracer (auto‑configured by the Application Signals layer) tracer = trace.get_tracer(__name__) def handler(event, context): # This span is a child of the layer's root span with tracer.start_as_current_span("my-custom-span") as span: span.set_attribute("key1", "value1") span.add_event("custom-event", {"detail": "something happened"}) # Any logic you want to trace result = some_internal_logic() return { "statusCode": 200, "body": result }