View a markdown version of this page

Amazon SQS et AWS X-Ray - AWS X-Ray

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.

Amazon SQS et AWS X-Ray

AWS X-Ray s'intègre à Amazon Simple Queue Service (Amazon SQS) pour suivre les messages transmis via une file d'attente Amazon SQS. Si un service suit les demandes à l'aide du X-Ray SDK, Amazon SQS peut envoyer l'en-tête de suivi et continuer à propager la trace d'origine de l'expéditeur au consommateur avec un identifiant de suivi cohérent. La continuité du suivi permet aux utilisateurs de suivre, d'analyser et de déboguer les services en aval d'un bout à l'autre.

AWS X-Ray prend en charge le suivi des applications pilotées par des événements à l'aide d'Amazon SQS et. AWS Lambda Utilisez la CloudWatch console pour afficher une vue connectée de chaque demande lorsqu'elle est mise en file d'attente avec Amazon SQS et traitée par une fonction Lambda en aval. Les traces des producteurs de messages en amont sont automatiquement liées aux traces des nœuds consommateurs Lambda en aval, créant ainsi une vue de bout en bout de l'application. Pour plus d'informations, consultez la section Suivi des applications pilotées par des événements.

Tracez la carte depuis Lambda via la file d'attente Amazon SQS.

Amazon SQS prend en charge les instruments d'en-tête de suivi suivants :

  • En-tête HTTP par défaut : le X-Ray SDK remplit automatiquement l'en-tête de trace en tant qu'en-tête HTTP lorsque vous appelez Amazon SQS via le SDK. AWS L'en-tête de suivi par défaut est transporté par X-Amzn-Trace-Id et correspond à tous les messages inclus dans une demande SendMessage ou SendMessageBatch. Pour en savoir plus sur l'en-tête HTTP par défaut, consultez En-tête de suivi.

  • AWSTraceHeaderAttribut système  : AWSTraceHeader il s'agit d'un attribut de système de messagerie réservé par Amazon SQS pour transporter l'en-tête de X-Ray suivi des messages dans la file d'attente. AWSTraceHeaderest disponible même lorsque l'instrumentation automatique via le X-Ray SDK ne l'est pas, par exemple lors de la création d'un SDK de traçage pour une nouvelle langue. Lorsque les deux instrumentations d'en-tête sont définies, l'attribut système de message remplace l'en-tête de suivi HTTP.

Lorsqu'il est exécuté sur Amazon EC2, Amazon SQS prend en charge le traitement d'un message à la fois. Cela s'applique lors de l'exécution sur un hôte local et lors de l'utilisation de services de conteneurs AWS Fargate, tels qu'Amazon ECS ou AWS App Mesh.

L'en-tête de trace est exclu à la fois de la taille des messages Amazon SQS et des quotas d'attributs de message. L'activation du X-Ray suivi ne dépassera pas vos quotas Amazon SQS. Pour en savoir plus sur les AWS quotas, consultez Amazon SQS Quotas.

Envoi de l'en-tête de suivi HTTP

Les composants expéditeurs d'Amazon SQS peuvent envoyer l'en-tête de trace automatiquement via l'SendMessageappel SendMessageBatch ou. Lorsque les clients du AWS SDK sont instrumentés, ils peuvent être automatiquement suivis dans toutes les langues prises en charge par le X-Ray SDK. Les tracés Services AWS et les ressources auxquelles vous accédez au sein de ces services (par exemple, un compartiment Amazon S3 ou une file d'attente Amazon SQS) apparaissent sous forme de nœuds en aval sur la carte de trace de la X-Ray console.

Pour savoir comment suivre les appels du AWS SDK dans la langue de votre choix, consultez les rubriques suivantes dans les kits SDK pris en charge :

Récupération de l'en-tête de suivi et récupération du contexte de suivi

Si vous utilisez un consommateur Lambda en aval, la propagation du contexte de trace est automatique. Pour continuer la propagation du contexte avec d'autres consommateurs Amazon SQS, vous devez configurer manuellement le transfert vers le composant récepteur.

La récupération du contexte de suivi comporte trois étapes principales :

  • Recevoir le message de la file d'attente pour l'attribut AWSTraceHeader en appelant l'API ReceiveMessage.

  • Récupérer l'en-tête de suivi à partir de l'attribut.

  • Récupérer l'ID de suivi à partir de l'en-tête. Vous pouvez également ajouter d'autres métriques au segment.

Voici un exemple d'implémentation écrit avec le X-Ray SDK pour Java.

Exemple: Récupération de l'en-tête de suivi et récupération du contexte de suivi
// Receive the message from the queue, specifying the "AWSTraceHeader" ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest() .withQueueUrl(QUEUE_URL) .withAttributeNames("AWSTraceHeader"); List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages(); if (!messages.isEmpty()) { Message message = messages.get(0); // Retrieve the trace header from the AWSTraceHeader message system attribute String traceHeaderStr = message.getAttributes().get("AWSTraceHeader"); if (traceHeaderStr != null) { TraceHeader traceHeader = TraceHeader.fromString(traceHeaderStr); // Recover the trace context from the trace header Segment segment = AWSXRay.getCurrentSegment(); segment.setTraceId(traceHeader.getRootTraceId()); segment.setParentId(traceHeader.getParentId()); segment.setSampled(traceHeader.getSampled().equals(TraceHeader.SampleDecision.SAMPLED)); } }