Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Migrer vers OpenTelemetry Python
Ce guide vous aide à migrer les applications Python du SDK X-Ray vers l' OpenTelemetry instrumentation. Il couvre les approches d'instrumentation automatique et manuelle, avec des exemples de code pour des scénarios courants.
Solutions d'instrumentation automatique à code zéro
Avec le SDK X-Ray, vous deviez modifier le code de votre application pour suivre les demandes. OpenTelemetry propose des solutions d'instrumentation automatique sans code pour suivre les demandes. Avec OpenTelemetry, vous avez la possibilité d'utiliser des solutions d'auto-instrumentation à code zéro pour suivre les demandes.
Code zéro avec instrumentations automatiques OpenTelemetry basées sur la base
-
Utilisation de la AWS distribution pour l'instrumentation automatique OpenTelemetry (ADOT) pour Python — Pour l'instrumentation automatique pour les applications Python, voir Traçage et métriques avec la AWS distribution pour OpenTelemetry l'instrumentation
automatique de Python. (Facultatif) Vous pouvez également activer les signaux CloudWatch d'application lorsque vous instrumentez automatiquement vos applications à l' AWS aide de l'instrumentation automatique ADOT Python pour surveiller l'état actuel des applications et suivre les performances des applications à long terme par rapport à vos objectifs commerciaux. Application Signals vous offre une vue unifiée et orientée application de vos services, dépendances et applications, et vous aide à surveiller et à trier l’état des applications.
-
Utilisation de l'instrumentation automatique à code zéro en OpenTelemetry Python — Pour l'instrumentation automatique avec OpenTelemetry Python, voir Instrumentation en code zéro en Python
.
Instrumentez manuellement vos applications
Vous pouvez instrumenter manuellement vos applications à l'aide de la pip
commande.
Initialisation de la configuration de suivi
Avec l'auto-instrumentation ADOT pour Python
Vous pouvez utiliser l'instrumentation automatique ADOT pour Python afin de configurer automatiquement vos OpenTelemetry applications Python. En utilisant l'instrumentation automatique ADOT, vous n'avez pas besoin de modifier manuellement le code pour suivre les demandes entrantes ou pour suivre les bibliothèques telles que le AWS SDK ou les clients HTTP. Pour plus d'informations, consultez Tracing and Metrics with the AWS Distro for OpenTelemetry Python Auto-Instrumentation
L'auto-instrumentation ADOT pour Python prend en charge :
-
Échantillonnage à distance X-Ray via la variable d'environnement
export OTEL_TRACES_SAMPLER=xray
-
Propagation du contexte X-Ray Trace (activée par défaut)
-
Détection des ressources (la détection des ressources pour les environnements Amazon EC2, Amazon ECS et Amazon EKS est activée par défaut)
-
Les instrumentations de bibliothèque automatiques pour toutes les OpenTelemetry instrumentations prises en charge sont activées par défaut. Vous pouvez le désactiver de manière sélective via la variable d'
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS
environnement. (tous sont activés par défaut) -
Création manuelle de Spans
Des plug-ins du service X-Ray aux fournisseurs de OpenTelemetry AWS ressources
Le SDK X-Ray fournit des plug-ins que vous pouvez ajouter pour capturer les informations spécifiques xray_recorder
à la plate-forme à partir du service hébergé tel qu'Amazon EC2, Amazon ECS et Elastic Beanstalk. Il est similaire aux fournisseurs de ressources en OpenTelemetry ce sens qu'il capture les informations sous forme d'attributs de ressources. Plusieurs fournisseurs de ressources sont disponibles pour différentes AWS plateformes.
-
Commencez par installer le package d' AWS extension,
pip install opentelemetry-sdk-extension-aws
-
Configurez le détecteur de ressources souhaité. L'exemple suivant montre comment configurer le fournisseur de EC2 ressources Amazon dans le OpenTelemetry SDK
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)
Suivi des demandes entrantes
AWS Instrumentation du SDK
Instrumentation des appels HTTP sortants par le biais de requêtes
Support d'instrumentation pour d'autres bibliothèques
Vous trouverez la liste complète des instrumentations de bibliothèque prises en charge pour OpenTelemetry Python sous Bibliothèques, frameworks, serveurs d'applications pris en charge et JVMs
Vous pouvez également effectuer une recherche OpenTelemetry dans le registre pour savoir si l'instrumentation est OpenTelemetry compatible. Consultez le registre
Création manuelle de données de trace
Vous pouvez créer des segments et des sous-segments en utilisant le xray_recorder
dans votre application Python. Pour plus d'informations, consultez Instrumentation manuelle du code Python. Vous pouvez également ajouter manuellement des annotations et des métadonnées aux données de trace.
Création de spans avec le SDK OpenTelemetry
Utilisez l'start_as_current_span
API pour démarrer un intervalle et configurez-le pour créer des intervalles. Pour des exemples de création de travées, voir Création de travéesSERVER
type sont converties en segments X-Ray, tandis que les autres sont converties en sous-segments de X-Ray.
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
Ajouter des annotations et des métadonnées aux traces avec OpenTelemetry le SDK
Le SDK X-Ray Python fournit une solution séparée APIs permettant d'ajouter put_metadata
des annotations et des métadonnées à une trace. put_annotation
Dans le OpenTelemetry SDK, les annotations et les métadonnées sont simplement des attributs sur une plage, ajoutés via l'set_attribute
API.
Les attributs Span que vous souhaitez utiliser comme annotations sur une trace sont ajoutés sous la clé réservée aws.xray.annotations
dont la valeur est une liste de paires clé-valeur d'annotations. Tous les autres attributs span deviennent des métadonnées sur le segment ou le sous-segment converti.
De plus, si vous utilisez le collecteur ADOT, vous pouvez configurer les attributs de span à convertir en annotations X-Ray en les spécifiant indexed_attributes
dans la configuration du collecteur.
L'exemple ci-dessous montre comment ajouter des annotations et des métadonnées à une trace à l'aide du OpenTelemetry SDK.
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")
Instrumentation Lambda
Pour surveiller vos fonctions Lambda sur X-Ray, vous avez activé X-Ray et ajouté les autorisations appropriées au rôle d'invocation des fonctions. De plus, si vous suivez les requêtes en aval de votre fonction, vous instrumenterez le code avec le SDK X-Ray Python.
OpenTelemetry Pour X-Ray, il est recommandé d'utiliser la couche lambda des signaux CloudWatch d'application lorsque les signaux d'application sont désactivés. Cela instrumentera automatiquement votre fonction et générera des intervalles pour l'invocation de la fonction et pour toute demande en aval émanant de votre fonction. Outre le suivi, si vous souhaitez utiliser les signaux d'application pour surveiller l'état de votre fonction, consultez Activer vos applications sur Lambda.
-
Trouvez l'ARN de couche Lambda requis pour votre fonction dans AWS Lambda Layer for OpenTelemetry ARNs et ajoutez-le.
-
Définissez les variables d'environnement suivantes pour votre fonction.
-
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
— Cela charge l'auto-instrumentation pour la fonction -
OTEL_AWS_APPLICATION_SIGNALS_ENABLED=false
— Cela désactivera la surveillance des signaux d'application
-
Création manuelle de travées avec l'instrumentation Lambda
En outre, vous pouvez générer des intervalles personnalisés au sein de votre fonction pour suivre le travail. Vous pouvez le faire en utilisant uniquement le opentelemetry-api
package conjointement avec l'instrumentation automatique de la couche Lambda d'Application Signals.
-
Incluez le
opentelemetry-api
en tant que dépendance dans votre fonction -
L'extrait de code suivant est un exemple permettant de générer des étendues personnalisées
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 }