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 assure le suivi des demandes à l'aide du SDK X-Ray, Amazon SQS peut envoyer l'en-tête de suivi et continuer à propager le suivi 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 voir une vue connectée de chaque demande mise en file d'attente avec Amazon SQS et traitée par une fonction Lambda en aval. Les traces provenant des producteurs de messages en amont sont automatiquement liées aux traces provenant des nœuds consommateurs Lambda en aval, créant ainsi une end-to-end vue 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 l'instrumentation d'en-tête de suivi suivante :

  • En-tête HTTP par défaut — Le SDK X-Ray 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èmeAWSTraceHeader Il s'agit d'un attribut de système de messagerie réservé par Amazon SQS pour contenir l'en-tête X-Ray Trace avec les messages dans la file d'attente. AWSTraceHeaderpeut être utilisé même lorsque l'instrumentation automatique via le SDK X-Ray 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 sur site et lors de l'utilisation de services de conteneur 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 des messages. L'activation du suivi X-Ray 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 d'expéditeur d'Amazon SQS peuvent envoyer automatiquement l'en-tête de trace via l'appel SendMessageBatchou SendMessage. Lorsque les clients du AWS SDK sont instrumentés, ils peuvent être automatiquement suivis dans toutes les langues prises en charge par le SDK X-Ray. Les ressources tracées Services AWS et 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 console X-Ray.

Pour savoir comment suivre les appels du AWS SDK dans la langue de votre choix, consultez les rubriques suivantes dans les 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 poursuivre la propagation du contexte avec d'autres clients Amazon SQS, vous devez instrumenter 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 SDK X-Ray 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)); } }