

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.

# AWS X-Ray exemple d'application
<a name="xray-scorekeep"></a>

**Note**  
Avis de SDK/Daemon maintenance de X-Ray — Le 25 février 2026, le AWS X-Ray SDKs/Daemon passera en mode maintenance, où les versions du SDK et du Daemon de X-Ray AWS seront limitées uniquement pour résoudre les problèmes de sécurité. Pour plus d'informations sur le calendrier de support, consultez[Chronologie du support pour le SDK et Daemon X-Ray](xray-sdk-daemon-timeline.md). Nous vous recommandons de migrer vers OpenTelemetry. Pour plus d'informations sur la migration vers OpenTelemetry, voir [Migration de l'instrumentation X-Ray vers OpenTelemetry l'instrumentation](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html).

L'application AWS X-Ray [eb-java-scorekeep](https://github.com/awslabs/eb-java-scorekeep/tree/xray)Sample, disponible sur GitHub, montre l'utilisation du SDK AWS X-Ray pour instrumenter les appels HTTP entrants, les clients du SDK DynamoDB et les clients HTTP. L'exemple d'application permet CloudFormation de créer des tables DynamoDB, de compiler du code Java sur instance et d'exécuter le daemon X-Ray sans aucune configuration supplémentaire.

Consultez le [didacticiel Scorekeep](scorekeep-tutorial.md) pour commencer à installer et à utiliser un exemple d'application instrumenté, en utilisant le ou le AWS Management Console . AWS CLI

![\[Scorekeep utilise le SDK AWS X-Ray pour instrumenter les appels HTTP entrants, les clients du SDK DynamoDB et les clients HTTP\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-flow.png)


L'exemple inclut une application Web frontale, l'API qu'elle appelle et les tables DynamoDB qu'elle utilise pour stocker des données. L'instrumentation de base avec des [filtres](xray-sdk-java-filters.md), [des plugins](xray-sdk-java-configuration.md) et des [clients AWS SDK instrumentés](xray-sdk-java-awssdkclients.md) est présentée dans la branche du `xray-gettingstarted` projet. Il s'agit de la branche que vous déployez dans le [didacticiel de mise en route](scorekeep-tutorial.md). Dans la mesure où cette branche inclut uniquement les éléments de base, vous pouvez la comparer à la branche `master` pour comprendre rapidement les éléments de base.

![\[Service map showing client interaction with Scorekeep container and related Services AWS.\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-gettingstarted-servicemap-before-ECS.png)


L'exemple d'application montre l'instrumentation de base dans ces fichiers :
+ **Filtre de requête HTTP** — [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/WebConfig.java](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/WebConfig.java)
+ **AWS Instrumentation client du SDK** — [https://github.com/awslabs/eb-java-scorekeep/tree/xray/build.gradle](https://github.com/awslabs/eb-java-scorekeep/tree/xray/build.gradle)

La `xray` branche de l'application inclut l'utilisation d'[annotations [HTTPClient](xray-sdk-java-httpclients.md)](xray-sdk-java-segment.md), de [requêtes SQL](xray-sdk-java-sqlclients.md), de [sous-segments personnalisés](xray-sdk-java-subsegments.md), d'une [AWS Lambda](xray-services-lambda.md)fonction instrumentée, ainsi que de codes et de scripts d'[initialisation instrumentés](scorekeep-startup.md).

Pour permettre la connexion et l' AWS SDK pour JavaScript utilisation des utilisateurs dans le navigateur, la `xray-cognito` succursale ajoute Amazon Cognito afin de prendre en charge l'authentification et l'autorisation des utilisateurs. Avec les informations d'identification extraites d'Amazon Cognito, l'application Web envoie également des données de suivi à X-Ray pour enregistrer les informations relatives aux demandes du point de vue du client. Le client du navigateur apparaît sous la forme de son propre nœud sur la carte de trace et enregistre des informations supplémentaires, notamment l'URL de la page que l'utilisateur consulte et son identifiant.

Enfin, la `xray-worker` branche ajoute une fonction Lambda Python instrumentée qui s'exécute indépendamment et traite les éléments d'une file d'attente Amazon SQS. Scorekeep ajoute un élément à la file d'attente chaque fois qu'un jeu se termine. Le travailleur Lambda, déclenché par des CloudWatch événements, extrait les éléments de la file d'attente toutes les quelques minutes et les traite pour stocker les enregistrements de jeu dans Amazon S3 à des fins d'analyse.

**Topics**
+ [Commencer à utiliser l'exemple d'application Scorekeep](scorekeep-tutorial.md)
+ [Instrumentation manuelle des clients du AWS SDK](scorekeep-sdkclients.md)
+ [Création de sous-segments supplémentaires](scorekeep-subsegments.md)
+ [Enregistrement des annotations, des métadonnées et de l'utilisateur IDs](scorekeep-annotations.md)
+ [Instrumentation des appels HTTP sortants](scorekeep-httpclient.md)
+ [Instrumentation d'appels vers une base de données PostgreSQL](scorekeep-postgresql.md)
+ [Fonctions d'instrumentation AWS Lambda](scorekeep-lambda.md)
+ [Instrumentation du code de démarrage](scorekeep-startup.md)
+ [Instrumentation de scripts](scorekeep-scripts.md)
+ [Instrumentation d'un client d'application web](scorekeep-client.md)
+ [Utilisation de clients instrumentés dans les threads de travail](scorekeep-workerthreads.md)

# Commencer à utiliser l'exemple d'application Scorekeep
<a name="scorekeep-tutorial"></a>

**Note**  
Avis de SDK/Daemon maintenance de X-Ray — Le 25 février 2026, le AWS X-Ray SDKs/Daemon passera en mode maintenance, où les versions du SDK et du Daemon de X-Ray AWS seront limitées uniquement pour résoudre les problèmes de sécurité. Pour plus d'informations sur le calendrier de support, consultez[Chronologie du support pour le SDK et Daemon X-Ray](xray-sdk-daemon-timeline.md). Nous vous recommandons de migrer vers OpenTelemetry. Pour plus d'informations sur la migration vers OpenTelemetry, consultez la section [Migration de l'instrumentation X-Ray vers OpenTelemetry l'instrumentation](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html).

Ce didacticiel utilise la `xray-gettingstarted` branche de l'[exemple d'application Scorekeep](xray-scorekeep.md), qui permet de CloudFormation créer et de configurer les ressources qui exécutent l'exemple d'application et le daemon X-Ray sur Amazon ECS. L'application utilise le framework Spring pour implémenter une API Web JSON et AWS SDK pour Java pour conserver les données dans Amazon DynamoDB. Un filtre de servlet intégré à l'application gère toutes les demandes entrantes traitées par l'application, et un gestionnaire de demandes sur le client du AWS SDK gère les appels en aval à DynamoDB.

Vous pouvez suivre ce didacticiel en utilisant le AWS Management Console ou le AWS CLI.

**Topics**
+ [Conditions préalables](#xray-gettingstarted-prereqs)
+ [Installez l'application Scorekeep à l'aide de CloudFormation](#xray-gettingstarted-deploy)
+ [Génération de données de suivi](#xray-gettingstarted-generate-traces)
+ [Consultez la carte de suivi dans le AWS Management Console](#xray-gettingstarted-console)
+ [Configuration des notifications Amazon SNS](#xray-gettingstarted-notifications)
+ [Exploration de l'exemple d'application](#xray-gettingstarted-sample)
+ [Facultatif : stratégie de moindre privilège](#xray-gettingstarted-security)
+ [Nettoyage](#xray-gettingstarted-cleanup)
+ [Étapes suivantes](#xray-gettingstarted-nextsteps)

## Conditions préalables
<a name="xray-gettingstarted-prereqs"></a>

Ce didacticiel permet CloudFormation de créer et de configurer les ressources qui exécutent l'exemple d'application et le daemon X-Ray. Les prérequis suivants sont requis pour installer et exécuter le didacticiel : 

1. Si vous utilisez un utilisateur IAM avec des autorisations limitées, ajoutez les politiques utilisateur suivantes dans la console [IAM](https://console.aws.amazon.com/iam) : 
   + `AWSCloudFormationFullAccess`— pour accéder et utiliser CloudFormation
   + `AmazonS3FullAccess`— pour télécharger un fichier modèle à CloudFormation l'aide du AWS Management Console
   + `IAMFullAccess`— pour créer les rôles d'instance Amazon ECS et Amazon EC2
   + `AmazonEC2FullAccess`— pour créer les ressources Amazon EC2
   + `AmazonDynamoDBFullAccess`— pour créer les tables DynamoDB
   + `AmazonECS_FullAccess`— pour créer des ressources Amazon ECS
   + `AmazonSNSFullAccess`— pour créer la rubrique Amazon SNS
   + `AWSXrayReadOnlyAccess`— pour obtenir l'autorisation de consulter la carte de suivi et les traces dans la console X-Ray

1. Pour exécuter le didacticiel à l'aide de AWS CLI, [installez la version 2.7.9 ou ultérieure de la CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) et [configurez la CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) avec l'utilisateur de l'étape précédente. Assurez-vous que la région est configurée lors de la configuration AWS CLI avec l'utilisateur. Si aucune région n'est configurée, vous devrez l'ajouter `--region AWS-REGION` à chaque commande de la CLI. 

1. Assurez-vous que [Git](https://github.com/git-guides/install-git) est installé afin de cloner l'exemple de dépôt d'applications. 

1. Utilisez l'exemple de code suivant pour cloner la `xray-gettingstarted` branche du référentiel Scorekeep : 

   ```
   git clone https://github.com/aws-samples/eb-java-scorekeep.git xray-scorekeep -b xray-gettingstarted
   ```

## Installez l'application Scorekeep à l'aide de CloudFormation
<a name="xray-gettingstarted-deploy"></a>

------
#### [ AWS Management Console ]

**Installez l'exemple d'application à l'aide du AWS Management Console**

1. Ouvrez la [console CloudFormation](https://console.aws.amazon.com/cloudformation/).

1. Choisissez **Créer une pile**, puis choisissez **Avec de nouvelles ressources** dans le menu déroulant.

1. Dans la section **Spécifier un modèle**, sélectionnez **Charger un modèle de fichier**.

1. Sélectionnez **Choisir un fichier**, accédez au `xray-scorekeep/cloudformation` dossier créé lorsque vous avez cloné le dépôt git, puis choisissez le `cf-resources.yaml` fichier.

1. Choisissez **Next (Suivant)** pour continuer.

1. Entrez `scorekeep` dans la zone de texte **Nom de la pile**, puis choisissez **Suivant** au bas de la page pour continuer. Notez que le reste de ce didacticiel suppose que la pile est nommée`scorekeep`.

1. Faites défiler la page des **options de configuration de la pile** vers le bas et choisissez **Suivant** pour continuer.

1. Faites défiler la page de **révision** vers le bas, cochez la case indiquant que des ressources IAM CloudFormation peuvent être créées avec des noms personnalisés, puis choisissez **Create** stack.

1. La CloudFormation pile est en cours de création. L'état de la pile `CREATE_IN_PROGRESS` durera environ cinq minutes avant de passer à`CREATE_COMPLETE`. L'état sera actualisé régulièrement, ou vous pouvez actualiser la page.

------
#### [ AWS CLI ]

**Installez l'exemple d'application à l'aide du AWS CLI**

1. Accédez au `cloudformation` dossier du `xray-scorekeep` référentiel que vous avez cloné plus tôt dans le didacticiel :

   ```
   cd xray-scorekeep/cloudformation/
   ```

1. Entrez la AWS CLI commande suivante pour créer la CloudFormation pile :

   ```
   aws cloudformation create-stack --stack-name scorekeep --capabilities "CAPABILITY_NAMED_IAM" --template-body file://cf-resources.yaml
   ```

1. Attendez que l'état de la CloudFormation pile soit `CREATE_COMPLETE` rétabli, ce qui prendra environ cinq minutes. Utilisez la AWS CLI commande suivante pour vérifier l'état :

   ```
   aws cloudformation describe-stacks --stack-name scorekeep --query "Stacks[0].StackStatus"
   ```

------

## Génération de données de suivi
<a name="xray-gettingstarted-generate-traces"></a>

L'exemple d'application inclut une application web frontale. Utilisez l'application Web pour générer du trafic vers l'API et envoyer des données de suivi à X-Ray. Tout d'abord, récupérez l'URL de l'application Web à l'aide du AWS Management Console ou du AWS CLI :

------
#### [ AWS Management Console ]

**Trouvez l'URL de l'application à l'aide du AWS Management Console**

1. Ouvrez la [console CloudFormation](https://console.aws.amazon.com/cloudformation/).

1. Choisissez la `scorekeep` pile dans la liste.

1. Choisissez l'onglet **Sorties** sur la page de `scorekeep` pile, puis choisissez le lien `LoadBalancerUrl` URL pour ouvrir l'application Web.

------
#### [ AWS CLI ]

**Trouvez l'URL de l'application à l'aide du AWS CLI**

1. Utilisez la commande suivante pour afficher l'URL de l'application Web :

   ```
   aws cloudformation describe-stacks --stack-name scorekeep --query "Stacks[0].Outputs[0].OutputValue"
   ```

1. Copiez cette URL et ouvrez-la dans un navigateur pour afficher l'application Web Scorekeep.

------

**Utiliser l'application Web pour générer des données de suivi**

1. Choisissez **Create** pour créer un utilisateur et une session.

1. Saisissez un **nom de jeu**, définissez les **règles** sur **Tic Tac Toe**, puis choisissez **Create** pour créer un jeu.

1. Choisissez **Play** pour lancer le jeu.

1. Choisissez une case pour jouer et modifier l'état du jeu.

Chacune de ces étapes génère des requêtes HTTP adressées à l'API et des appels en aval à DynamoDB pour lire et écrire les données relatives à l'utilisateur, à la session, au jeu, au déplacement et à l'état.

## Consultez la carte de suivi dans le AWS Management Console
<a name="xray-gettingstarted-console"></a>

Vous pouvez consulter la carte de suivi et les traces générées par l'exemple d'application dans X-Ray et CloudWatch les consoles.

------
#### [ X-Ray console ]

**Utiliser la console X-Ray**

1. Ouvrez la page de traçage de la [console X-Ray](https://console.aws.amazon.com/xray/home#/service-map).

1. La console affiche une représentation du graphe de service généré par X-Ray à partir des données de suivi envoyées par l'application. Assurez-vous d'ajuster la période de la carte de trace si nécessaire, afin de vous assurer qu'elle affichera toutes les traces depuis le premier démarrage de l'application Web.  
![\[Période de la carte X-Ray Trace\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/xray-console-time-period-15-minutes.png)

La carte de trace montre le client de l'application Web, l'API exécutée dans Amazon ECS et chaque table DynamoDB utilisée par l'application. Chaque demande à l'application, jusqu'à un nombre maximal de demandes configurables par seconde, est suivi lorsqu'il atteint l'API, génère des demandes aux services en aval, et se termine.

Vous pouvez choisir n'importe quel nœud dans le graphique de services pour afficher les suivis des demandes ayant généré du trafic vers ce nœud. Actuellement, le nœud Amazon SNS est jaune. Explorez ce nœud pour savoir pourquoi.

![\[Page cartographique de suivi de la console X-Ray\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-gettingstarted-servicemap-before-ECS.png)


**Pour trouver la cause de l'erreur**

1. Choisissez le nœud nommé **SNS**. Le panneau des détails du nœud s'affiche.

1. Choisissez **View traces (Afficher les suivis)** pour accéder à l'écran **Trace overview (Présentation des suivis)**.

1. Choisissez le suivi depuis la **Trace list (Liste des suivis)**. Ce suivi n'est pas associé à une méthode ou une URL, car il a été enregistré au démarrage et non en réponse à une demande entrante.  
![\[Sélection d'un suivi à partir de la liste des suivis\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-gettingstarted-tracelist-sns.png)

1. Cliquez sur l'icône d'état d'erreur dans le segment Amazon SNS au bas de la page, pour ouvrir la page **Exceptions** du sous-segment SNS.  
![\[Choisissez l'icône d'état d'erreur pour ouvrir la page des exceptions pour le sous-segment Amazon SNS\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-gettingstarted-timeline-sns-ecs.png)

1. Le SDK X-Ray capture automatiquement les exceptions émises par les clients du AWS SDK instrumentés et enregistre la trace de la pile.  
![\[Onglet Exceptions affichant les exceptions capturées et le suivi de la pile enregistré\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-gettingstarted-exception.png)

------
#### [ CloudWatch console ]

**Utiliser la CloudWatch console**

1. Ouvrez la page de [carte de trace X-Ray](https://console.aws.amazon.com/cloudwatch/home#xray:service-map/map) de la CloudWatch console.

1. La console affiche une représentation du graphe de service généré par X-Ray à partir des données de suivi envoyées par l'application. Assurez-vous d'ajuster la période de la carte de trace si nécessaire, afin de vous assurer qu'elle affichera toutes les traces depuis le premier démarrage de l'application Web.  
![\[CloudWatch tracer la période de la carte\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/cw-console-service-map-time-period-15-minutes.png)

La carte de trace montre le client de l'application Web, l'API exécutée dans Amazon EC2 et chaque table DynamoDB utilisée par l'application. Chaque demande à l'application, jusqu'à un nombre maximal de demandes configurables par seconde, est suivi lorsqu'il atteint l'API, génère des demandes aux services en aval, et se termine.

Vous pouvez choisir n'importe quel nœud dans le graphique de services pour afficher les suivis des demandes ayant généré du trafic vers ce nœud. Actuellement, le nœud Amazon SNS est orange. Explorez ce nœud pour savoir pourquoi.

![\[Page cartographique de suivi de la console X-Ray\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-gettingstarted-cw-servicemap-before-ECS.png)


**Pour trouver la cause de l'erreur**

1. Choisissez le nœud nommé **SNS**. Le panneau de détails du nœud SNS s'affiche sous la carte.

1. Choisissez **Afficher les traces** pour accéder à la page **Traces**.

1. Ajoutez le bas de la page, choisissez la trace dans la liste des **traces**. Ce suivi n'est pas associé à une méthode ou une URL, car il a été enregistré au démarrage et non en réponse à une demande entrante.  
![\[Sélection d'un suivi à partir de la liste des suivis\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-gettingstarted-cw-tracelist-sns-ecs.png)

1. Choisissez le sous-segment Amazon SNS en bas de la chronologie des segments, puis cliquez sur l'onglet **Exceptions correspondant au sous-segment SNS pour afficher les détails des exceptions**.  
![\[Afficher l'onglet Exceptions pour le sous-segment Amazon SNS\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-gettingstarted-cw-timeline-sns-ecs.png)

------

La cause indique que l'adresse e-mail fournie dans un appel vers `createSubscription` effectué dans la classe `WebConfig` n'était pas valide. Dans la section suivante, nous allons résoudre ce problème.

## Configuration des notifications Amazon SNS
<a name="xray-gettingstarted-notifications"></a>

Scorekeep utilise Amazon SNS pour envoyer des notifications lorsque les utilisateurs terminent un jeu. Lorsque l'application démarre, elle essaie de créer un abonnement pour une adresse e-mail définie dans un paramètre de CloudFormation pile. Cet appel échoue actuellement. Configurez un e-mail de notification pour activer les notifications et résoudre les défaillances mises en évidence sur la carte de suivi.

------
#### [ AWS Management Console ]

**Pour configurer les notifications Amazon SNS à l'aide du AWS Management Console**

1. Ouvrez la [console CloudFormation](https://console.aws.amazon.com/cloudformation/).

1. Cliquez sur le bouton radio situé à côté du nom de la `scorekeep` pile dans la liste, puis sélectionnez **Mettre à jour**.

1. Assurez-vous que **l'option Utiliser le modèle actuel** est sélectionnée, puis cliquez sur **Suivant** sur la page **Mettre à jour la pile**.

1. Recherchez le paramètre **Email** dans la liste et remplacez la valeur par défaut par une adresse e-mail valide.  
![\[Mettre à jour la configuration des e-mails\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-cf-email-update.png)

1. Faites défiler la page vers le bas, puis choisissez **Next** (Suivant).

1. Faites défiler la page de **révision** vers le bas, cochez la case indiquant que des ressources IAM CloudFormation peuvent être créées avec des noms personnalisés, puis choisissez **Update** stack.

1. La CloudFormation pile est en cours de mise à jour. L'état de la pile `UPDATE_IN_PROGRESS` durera environ cinq minutes avant de passer à`UPDATE_COMPLETE`. L'état sera actualisé régulièrement, ou vous pouvez actualiser la page.

------
#### [ AWS CLI ]

**Pour configurer les notifications Amazon SNS à l'aide du AWS CLI**

1. Accédez au `xray-scorekeep/cloudformation/` dossier que vous avez créé précédemment et ouvrez le `cf-resources.yaml` fichier dans un éditeur de texte.

1. Recherchez la `Default` valeur dans le paramètre **Email** et remplacez-la par *UPDATE\$1ME* une adresse e-mail valide.

   ```
   Parameters:
     Email:
       Type: String
       Default: UPDATE_ME # <- change to a valid abc@def.xyz email address
   ```

1. Dans le `cloudformation` dossier, mettez à jour la CloudFormation pile à l'aide de la AWS CLI commande suivante : 

   ```
   aws cloudformation update-stack --stack-name scorekeep --capabilities "CAPABILITY_NAMED_IAM" --template-body file://cf-resources.yaml
   ```

1. Attendez que l'état de la CloudFormation pile soit `UPDATE_COMPLETE` rétabli, ce qui prendra quelques minutes. Utilisez la AWS CLI commande suivante pour vérifier l'état :

   ```
   aws cloudformation describe-stacks --stack-name scorekeep --query "Stacks[0].StackStatus"
   ```

------

Lorsque la mise à jour est terminée, Scorekeep redémarre et crée un abonnement à la rubrique SNS. Vérifiez votre adresse e-mail et confirmez l'abonnement pour voir les mises à jour lorsque vous terminez un jeu. Ouvrez la carte de suivi pour vérifier que les appels à SNS n'échouent plus.

## Exploration de l'exemple d'application
<a name="xray-gettingstarted-sample"></a>

L'exemple d'application est une API Web HTTP en Java configurée pour utiliser le SDK X-Ray pour Java. Lorsque vous déployez l'application avec le CloudFormation modèle, elle crée les tables DynamoDB, le cluster Amazon ECS et les autres services nécessaires pour exécuter Scorekeep sur ECS. Un fichier de définition de tâche pour ECS est créé via CloudFormation. Ce fichier définit les images de conteneur utilisées par tâche dans un cluster ECS. Ces images sont obtenues auprès de l'ECR public officiel de X-Ray. L'image du conteneur de l'API scorekeep contient l'API compilée avec Gradle. L'image de conteneur du conteneur frontal Scorekeep sert le frontend à l'aide du serveur proxy nginx. Ce serveur achemine les demandes vers des chemins commençant par /api vers l'API.

Pour instrumenter les demandes HTTP, l'application ajoute le `TracingFilter` fourni par le kit de développement logiciel.

**Example src/main/java/scorekeep/WebConfig.java - filtre de servlet**  

```
import javax.servlet.Filter;
import [com.amazonaws.xray.javax.servlet.AWSXRayServletFilter](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/javax/servlet/AWSXRayServletFilter.html);
...

@Configuration
public class WebConfig {

  @Bean
  public Filter TracingFilter() {
    return new AWSXRayServletFilter("Scorekeep");
  }
...
```

Ce filtre envoie des données de suivi sur toutes les demandes entrantes servies par l'application, y compris l'URL de demande, la méthode, le statut de réponse, l'heure de début et de fin.

L'application effectue également des appels en aval à DynamoDB à l'aide du. AWS SDK pour Java Pour instrumenter ces appels, l'application utilise simplement les sous-modules AWS liés au SDK comme dépendances, et le SDK X-Ray pour Java instrumente automatiquement tous les clients du SDK. AWS 

L'application utilise `Docker` pour créer le code source sur instance avec le fichier `Gradle Docker Image` et le `Scorekeep API Dockerfile` fichier pour exécuter le fichier JAR exécutable généré par Gradle. `ENTRYPOINT` 

**Example utilisation de Docker pour créer via Gradle Docker Image**  

```
docker run --rm -v /PATH/TO/SCOREKEEP_REPO/home/gradle/project -w /home/gradle/project gradle:4.3 gradle build
```

**Example POINT D'ENTRÉE Dockerfile**  

```
ENTRYPOINT [ "sh", "-c", "java -Dserver.port=5000 -jar scorekeep-api-1.0.0.jar" ]
```

Le fichier `build.gradle` télécharge les sous-modules du kit de développement logiciel à partir de Maven pendant la compilation en les déclarant comme des dépendances.

**Example build.gradle - dépendances**  

```
...
dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile('org.springframework.boot:spring-boot-starter-test')
    compile('com.amazonaws:aws-java-sdk-dynamodb')
    compile("com.amazonaws:aws-xray-recorder-sdk-core")
    compile("com.amazonaws:aws-xray-recorder-sdk-aws-sdk")
    compile("com.amazonaws:aws-xray-recorder-sdk-aws-sdk-instrumentor")
    ...
}
dependencyManagement {
    imports {
        mavenBom("com.amazonaws:aws-java-sdk-bom:1.11.67")
        mavenBom("com.amazonaws:aws-xray-recorder-sdk-bom:2.11.0")
    }
}
```

Les sous-modules principaux, AWS SDK et AWS SDK Instrumentor sont tout ce qui est nécessaire pour instrumenter automatiquement tous les appels en aval effectués avec le SDK. AWS 

Pour relayer les données de segment brutes vers l'API X-Ray, le daemon X-Ray doit écouter le trafic sur le port UDP 2000. *Pour ce faire, l'application fait exécuter le daemon X-Ray dans un conteneur qui est déployé parallèlement à l'application Scorekeep sur ECS en tant que conteneur annexe.* Consultez la rubrique consacrée au [daemon X-Ray](xray-daemon.md) pour plus d'informations.

**Example Définition du conteneur X-Ray Daemon dans une définition de tâche ECS**  

```
...
Resources:
  ScorekeepTaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties: 
      ContainerDefinitions: 
      ...
      
      - Cpu: '256'
        Essential: true
        Image: amazon/aws-xray-daemon
        MemoryReservation: '128'
        Name: xray-daemon
        PortMappings: 
          - ContainerPort: '2000'
            HostPort: '2000'
            Protocol: udp
      ...
```

Le SDK X-Ray pour Java fournit une classe `AWSXRay` nommée qui fournit l'enregistreur global, `TracingHandler` que vous pouvez utiliser pour instrumenter votre code. Vous pouvez configurer l'enregistreur mondial pour personnaliser le `AWSXRayServletFilter` qui crée des segments pour les appels HTTP entrants. L'exemple inclut un bloc statique dans la classe `WebConfig` qui configure l'enregistreur mondial avec des plug-ins et des règles d'échantillonnage.

**Example src/main/java/scorekeep/WebConfig.java - enregistreur**  

```
import com.amazonaws.xray.AWSXRay;
import com.amazonaws.xray.AWSXRayRecorderBuilder;
import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter;
import com.amazonaws.xray.plugins.ECSPlugin;
import com.amazonaws.xray.plugins.EC2Plugin;
import com.amazonaws.xray.strategy.sampling.LocalizedSamplingStrategy;
...

@Configuration
public class WebConfig {
  ...
  
  static {
    AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder.standard().withPlugin(new ECSPlugin()).withPlugin(new EC2Plugin());

    URL ruleFile = WebConfig.class.getResource("/sampling-rules.json");
    builder.withSamplingStrategy(new LocalizedSamplingStrategy(ruleFile));

    AWSXRay.setGlobalRecorder(builder.build());
    ...
    
  }
}
```

Cet exemple utilise le générateur pour charger des règles d'échantillonnage à partir d'un fichier nommé `sampling-rules.json`. Les règles d'échantillonnage déterminent le taux auquel le kit SDK enregistre des segments pour les demandes entrantes. 

**Example src/main/java/resources/sampling-rules.json**  

```
{
  "version": 1,
  "rules": [
    {
      "description": "Resource creation.",
      "service_name": "*",
      "http_method": "POST",
      "url_path": "/api/*",
      "fixed_target": 1,
      "rate": 1.0
    },
    {
      "description": "Session polling.",
      "service_name": "*",
      "http_method": "GET",
      "url_path": "/api/session/*",
      "fixed_target": 0,
      "rate": 0.05
    },
    {
      "description": "Game polling.",
      "service_name": "*",
      "http_method": "GET",
      "url_path": "/api/game/*/*",
      "fixed_target": 0,
      "rate": 0.05
    },
    {
      "description": "State polling.",
      "service_name": "*",
      "http_method": "GET",
      "url_path": "/api/state/*/*/*",
      "fixed_target": 0,
      "rate": 0.05
    }
  ],
  "default": {
    "fixed_target": 1,
    "rate": 0.1
  }
}
```

Le fichier de règles d'échantillonnage définit quatre règles personnalisées et une règle par défaut. Pour chaque demande entrante, le kit SDK évalue les règles personnalisées dans l'ordre dans lequel elles sont définies. Le kit de développement logiciel (SDK) applique la première règle qui correspond à la méthode, au chemin et au nom de service de la demande. Pour Scorekeep, la première règle intercepte toutes les demandes POST (appels de création de ressource) en appliquant un objectif fixé à une demande par seconde et un taux de 1,0 ou 100 % des demandes une fois l'objectif fixé atteint.

Les trois autres règles personnalisées appliquent un taux de 5 %, sans aucun objectif fixé concernant les lectures de session, de jeu et d'état (demandes GET). Il s'ensuit une réduction du nombre de suivis pour les appels périodiques émis automatiquement par le service frontal à quelques secondes d'intervalle pour vérifier que le contenu est à jour. Pour toutes les autres demandes, le fichier définit un taux par défaut d'une demande par seconde et un taux de 10 %.

L'exemple d'application indique également comment utiliser des fonctionnalités avancées, telles que l'instrumentation manuelle d'un client de kit de développement logiciel, la création de sous-segments supplémentaires et des appels HTTP sortants. Pour de plus amples informations, veuillez consulter [AWS X-Ray exemple d'application](xray-scorekeep.md).

## Facultatif : stratégie de moindre privilège
<a name="xray-gettingstarted-security"></a>

 Les conteneurs Scorekeep ECS accèdent aux ressources en utilisant des politiques d'accès complet, telles que `AmazonSNSFullAccess` et. `AmazonDynamoDBFullAccess` L'utilisation de politiques d'accès complet n'est pas la meilleure pratique pour les applications de production. L'exemple suivant met à jour la politique DynamoDB IAM afin d'améliorer la sécurité de l'application. Pour en savoir plus sur les meilleures pratiques de sécurité dans les politiques IAM, consultez la section [Gestion des identités et des accès pour AWS X-Ray](security-iam.md).

**Example Modèle cf-resources.yaml Définition du rôle ECSTask**  

```
ECSTaskRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"		 	 	 
        Statement: 
          - 
            Effect: "Allow"
            Principal: 
              Service: 
                - "ecs-tasks.amazonaws.com"
            Action: 
              - "sts:AssumeRole"
      ManagedPolicyArns:
        - "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess"
        - "arn:aws:iam::aws:policy/AmazonSNSFullAccess"
        - "arn:aws:iam::aws:policy/AWSXrayFullAccess"
      RoleName: "scorekeepRole"
```

Pour mettre à jour votre politique, vous devez d'abord identifier l'ARN de vos ressources DynamoDB. Vous utilisez ensuite l'ARN dans une politique IAM personnalisée. Enfin, vous devez appliquer cette politique à votre profil d'instance.

**Pour identifier l'ARN de votre ressource DynamoDB :**

1. Ouvrez la [console DynamoDB](https://console.aws.amazon.com/dynamodbv2).

1. Choisissez **Tables** dans la barre de navigation de gauche.

1. Choisissez l'une des options `scorekeep-*` pour afficher la page détaillée du tableau.

1. Dans l'onglet **Vue d'ensemble**, choisissez **Informations supplémentaires** pour développer la section et afficher le nom de la ressource Amazon (ARN). Copiez cette valeur.

1. Insérez l'ARN dans la politique IAM suivante, en remplaçant les `AWS_ACCOUNT_ID` valeurs `AWS_REGION` et par votre région et votre identifiant de compte spécifiques. Cette nouvelle politique n'autorise que les actions spécifiées, au lieu de la `AmazonDynamoDBFullAccess` politique qui autorise n'importe quelle action.  
**Example**  

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ScorekeepDynamoDB",
               "Effect": "Allow",
               "Action": [
                   "dynamodb:PutItem",
                   "dynamodb:UpdateItem",
                   "dynamodb:DeleteItem",
                   "dynamodb:GetItem",
                   "dynamodb:Scan",
                   "dynamodb:Query"
               ],
               "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/scorekeep-*"
           }
       ]
   }
   ```

------

   Les tables créées par l'application suivent une convention de dénomination cohérente. Vous pouvez utiliser ce `scorekeep-*` format pour indiquer tous les tableaux Scorekeep.

**Modifiez votre politique IAM**

1. Ouvrez le [rôle de tâche Scorekeep (ScorekeepRole) depuis la console IAM](https://console.aws.amazon.com/iamv2/home#/roles/details/scorekeepRole).

1. Cochez la case située à côté de la `AmazonDynamoDBFullAccess` politique, puis choisissez **Supprimer** pour supprimer cette politique. 

1. Choisissez **Ajouter des autorisations**, puis **Joindre des politiques**, et enfin **Créer une politique**.

1. Choisissez l'onglet **JSON** et collez la politique créée ci-dessus.

1. Choisissez **Next : Tags** au bas de la page.

1. Choisissez **Suivant : Révision** au bas de la page.

1. Pour **Nom**, attribuez un nom à la politique.

1. Choisissez **Créer une politique** au bas de la page. 

1. Attachez la politique nouvellement créée au `scorekeepRole` rôle. L'entrée en vigueur de la politique ci-jointe peut prendre quelques minutes.

Si vous avez attaché la nouvelle politique au `scorekeepRole` rôle, vous devez la détacher avant de supprimer la CloudFormation pile, car cette politique attachée empêchera la suppression de la pile. La politique peut être automatiquement détachée en la supprimant.

**Supprimer votre politique IAM personnalisée**

1. Ouvrez la [console IAM](https://console.aws.amazon.com/iam).

1. Choisissez **Politiques** dans la barre de navigation de gauche.

1. Recherchez le nom de stratégie personnalisée que vous avez créé plus tôt dans cette section, puis cliquez sur le bouton radio à côté du nom de la stratégie pour le mettre en évidence.

1. Choisissez le menu déroulant **Actions**, puis sélectionnez **Supprimer**.

1. Tapez le nom de la politique personnalisée, puis choisissez **Supprimer** pour confirmer la suppression. Cela détachera automatiquement la politique du `scorekeepRole` rôle.

## Nettoyage
<a name="xray-gettingstarted-cleanup"></a>

Pour supprimer les ressources de l'application Scorekeep, procédez comme suit :

**Note**  
Si vous avez créé et joint des politiques personnalisées à l'aide de la section précédente de ce didacticiel, vous devez supprimer la politique de la pile `scorekeepRole` avant de supprimer la CloudFormation pile.

------
#### [ AWS Management Console ]

**Supprimez l'exemple d'application à l'aide du AWS Management Console**

1. Ouvrez la [console CloudFormation](https://console.aws.amazon.com/cloudformation/).

1. Cliquez sur le bouton radio situé à côté du nom de la `scorekeep` pile dans la liste, puis sélectionnez **Supprimer**.

1. La CloudFormation pile est en train d'être supprimée. L'état de la pile `DELETE_IN_PROGRESS` durera quelques minutes jusqu'à ce que toutes les ressources soient supprimées. L'état sera actualisé régulièrement, ou vous pouvez actualiser la page.

------
#### [ AWS CLI ]

**Supprimez l'exemple d'application à l'aide du AWS CLI**

1. Entrez la AWS CLI commande suivante pour supprimer la CloudFormation pile :

   ```
   aws cloudformation delete-stack --stack-name scorekeep
   ```

1. Attendez que la CloudFormation pile n'existe plus, ce qui prendra environ cinq minutes. Utilisez la AWS CLI commande suivante pour vérifier l'état :

   ```
   aws cloudformation describe-stacks --stack-name scorekeep --query "Stacks[0].StackStatus"
   ```

------

## Étapes suivantes
<a name="xray-gettingstarted-nextsteps"></a>

Apprenez-en plus sur X-Ray dans le chapitre suivant,[AWS X-Ray concepts](xray-concepts.md).

Pour instrumenter votre propre application, apprenez-en plus sur le SDK X-Ray pour Java ou sur l'un des autres logiciels de X-Ray SDKs :
+ **SDK X-Ray pour Java —** [AWS X-Ray SDK pour Java](xray-sdk-java.md)
+ **Kit de développement X-Ray pour Node.js —** [AWS Kit de développement X-Ray pour Node.js](xray-sdk-nodejs.md)
+ **Kit de développement X-Ray pour .NET —** [AWS X-Ray SDK pour .NET](xray-sdk-dotnet.md)

Pour exécuter le daemon X-Ray en local ou en mode actif AWS, consultez[AWS X-Ray daemon](xray-daemon.md).

Pour contribuer à l'exemple d'application sur GitHub, voir [eb-java-scorekeep](https://github.com/awslabs/eb-java-scorekeep/tree/xray-gettingstarted).

# Instrumentation manuelle des clients du AWS SDK
<a name="scorekeep-sdkclients"></a>

**Note**  
Avis de SDK/Daemon maintenance de X-Ray — Le 25 février 2026, le AWS X-Ray SDKs/Daemon passera en mode maintenance, où les versions du SDK et du Daemon de X-Ray AWS seront limitées uniquement pour résoudre les problèmes de sécurité. Pour plus d'informations sur le calendrier de support, consultez[Chronologie du support pour le SDK et Daemon X-Ray](xray-sdk-daemon-timeline.md). Nous vous recommandons de migrer vers OpenTelemetry. Pour plus d'informations sur la migration vers OpenTelemetry, voir [Migration de l'instrumentation X-Ray vers OpenTelemetry l'instrumentation](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html).

Le SDK X-Ray pour Java instrumente automatiquement AWS tous les clients du SDK lorsque [vous incluez AWS le sous-module SDK Instrumentor](xray-sdk-java.md#xray-sdk-java-dependencies) dans vos dépendances de build.

Vous pouvez désactiver l'instrumentation automatique du client en supprimant le sous-module Instrumentor. Ainsi, vous pourrez instrumenter certains clients manuellement tout en ignorant les autres, ou utiliser différents gestionnaires de suivi sur différents clients.

Pour illustrer la prise en charge de l'instrumentation de clients AWS SDK spécifiques, l'application transmet un gestionnaire de suivi en `AmazonDynamoDBClientBuilder` tant que gestionnaire de demandes dans le modèle utilisateur, jeu et session. Cette modification de code indique au SDK d'instrumenter tous les appels à DynamoDB à l'aide de ces clients.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/SessionModel.java](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/SessionModel.java)— Instrumentation client manuelle du AWS SDK**  

```
import [com.amazonaws.xray.AWSXRay](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRay.html);
import [com.amazonaws.xray.handlers.TracingHandler](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/handlers/TracingHandler.html);

public class SessionModel {
  private AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
        .withRegion(Constants.REGION)
        .withRequestHandlers(new TracingHandler(AWSXRay.getGlobalRecorder()))
        .build();
  private DynamoDBMapper mapper = new DynamoDBMapper(client);
```

Si vous supprimez le sous-module AWS SDK Instrumentor des dépendances du projet, seuls les clients du AWS SDK instrumentés manuellement apparaissent dans la carte de trace.

# Création de sous-segments supplémentaires
<a name="scorekeep-subsegments"></a>

**Note**  
Avis de SDK/Daemon maintenance de X-Ray — Le 25 février 2026, le AWS X-Ray SDKs/Daemon passera en mode maintenance, où les versions du SDK et du Daemon de X-Ray AWS seront limitées uniquement pour résoudre les problèmes de sécurité. Pour plus d'informations sur le calendrier de support, consultez[Chronologie du support pour le SDK et Daemon X-Ray](xray-sdk-daemon-timeline.md). Nous vous recommandons de migrer vers OpenTelemetry. Pour plus d'informations sur la migration vers OpenTelemetry, voir [Migration de l'instrumentation X-Ray vers OpenTelemetry l'instrumentation](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html).

Dans la classe des modèles d'utilisateur, l'application crée manuellement les sous-segments pour regrouper tous les appels en aval effectués au sein de la fonction `saveUser` et ajoute les métadonnées.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/UserModel.java](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/UserModel.java) - Sous-segments personnalisés**  

```
import [com.amazonaws.xray.AWSXRay](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRay.html);
import [com.amazonaws.xray.entities.Subsegment](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Subsegment.html);
...
    public void saveUser(User user) {
    // Wrap in subsegment
    Subsegment subsegment = AWSXRay.beginSubsegment("## UserModel.saveUser");
    try {
      mapper.save(user);
    } catch (Exception e) {
      subsegment.addException(e);
      throw e;
    } finally {
      AWSXRay.endSubsegment();
    }
  }
```

# Enregistrement des annotations, des métadonnées et de l'utilisateur IDs
<a name="scorekeep-annotations"></a>

**Note**  
Avis de SDK/Daemon maintenance de X-Ray — Le 25 février 2026, le AWS X-Ray SDKs/Daemon passera en mode maintenance, où les versions du SDK et du Daemon de X-Ray AWS seront limitées uniquement pour résoudre les problèmes de sécurité. Pour plus d'informations sur le calendrier de support, consultez[Chronologie du support pour le SDK et Daemon X-Ray](xray-sdk-daemon-timeline.md). Nous vous recommandons de migrer vers OpenTelemetry. Pour plus d'informations sur la migration vers OpenTelemetry, voir [Migration de l'instrumentation X-Ray vers OpenTelemetry l'instrumentation](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html).

Dans la classe de modèle de jeu, l'application enregistre les `Game` objets dans un bloc de [métadonnées](xray-sdk-java-segment.md#xray-sdk-java-segment-metadata) chaque fois qu'elle enregistre un jeu dans DynamoDB. Séparément, l'application enregistre le jeu IDs dans [des annotations destinées](xray-sdk-java-segment.md#xray-sdk-java-segment-annotations) à être utilisées avec des [expressions de filtre](xray-console-filters.md).

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/GameModel.java](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/GameModel.java)— Annotations et métadonnées**  

```
import [com.amazonaws.xray.AWSXRay](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRay.html);
import [com.amazonaws.xray.entities.Segment](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Segment.html);
import [com.amazonaws.xray.entities.Subsegment](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Subsegment.html);
...
  public void saveGame(Game game) throws SessionNotFoundException {
    // wrap in subsegment
    Subsegment subsegment = AWSXRay.beginSubsegment("## GameModel.saveGame");
    try {
      // check session
      String sessionId = game.getSession();
      if (sessionModel.loadSession(sessionId) == null ) {
        throw new SessionNotFoundException(sessionId);
      }
      Segment segment = AWSXRay.getCurrentSegment();
      subsegment.putMetadata("resources", "game", game);
      segment.putAnnotation("gameid", game.getId());
      mapper.save(game);
    } catch (Exception e) {
      subsegment.addException(e);
      throw e;
    } finally {
      AWSXRay.endSubsegment();
    }
  }
```

Dans le contrôleur de déplacement, l'application enregistre [l'utilisateur IDs](xray-sdk-java-segment.md#xray-sdk-java-segment-userid) avec`setUser`. IDsLes utilisateurs sont enregistrés dans un champ distinct sur les segments et sont indexés pour être utilisés dans le cadre de la recherche.

**Example [src/main/java/scorekeep/MoveController.java](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/MoveController.java) — ID utilisateur**  

```
import [com.amazonaws.xray.AWSXRay](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRay.html);
...
  @RequestMapping(value="/{userId}", method=RequestMethod.POST)
  public Move newMove(@PathVariable String sessionId, @PathVariable String gameId, @PathVariable String userId, @RequestBody String move) throws SessionNotFoundException, GameNotFoundException, StateNotFoundException, RulesException {
    AWSXRay.getCurrentSegment().setUser(userId);
    return moveFactory.newMove(sessionId, gameId, userId, move);
  }
```

# Instrumentation des appels HTTP sortants
<a name="scorekeep-httpclient"></a>

**Note**  
Avis de SDK/Daemon maintenance de X-Ray — Le 25 février 2026, le AWS X-Ray SDKs/Daemon passera en mode maintenance, où les versions du SDK et du Daemon de X-Ray AWS seront limitées uniquement pour résoudre les problèmes de sécurité. Pour plus d'informations sur le calendrier de support, consultez[Chronologie du support pour le SDK et Daemon X-Ray](xray-sdk-daemon-timeline.md). Nous vous recommandons de migrer vers OpenTelemetry. Pour plus d'informations sur la migration vers OpenTelemetry, voir [Migration de l'instrumentation X-Ray vers OpenTelemetry l'instrumentation](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html).

La classe user factory montre comment l'application utilise la version du SDK X-Ray pour Java pour `HTTPClientBuilder` instrumenter les appels HTTP sortants.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/UserFactory.java](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/UserFactory.java)— HTTPClient instrumentation**  

```
import [com.amazonaws.xray.proxies.apache.http.HttpClientBuilder](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/proxies/apache/http/HttpClientBuilder.html);

  public String randomName() throws IOException {
    CloseableHttpClient httpclient = HttpClientBuilder.create().build();
    HttpGet httpGet = new HttpGet("http://uinames.com/api/");
    CloseableHttpResponse response = httpclient.execute(httpGet);
    try {
      HttpEntity entity = response.getEntity();
      InputStream inputStream = entity.getContent();
      ObjectMapper mapper = new ObjectMapper();
      Map<String, String> jsonMap = mapper.readValue(inputStream, Map.class);
      String name = jsonMap.get("name");
      EntityUtils.consume(entity);
      return name;
    } finally {
      response.close();
    }
  }
```

Si vous utilisez actuellement `org.apache.http.impl.client.HttpClientBuilder`, vous pouvez simplement remplacer l'instruction d'importation par cette classe avec une pour `com.amazonaws.xray.proxies.apache.http.HttpClientBuilder`.

# Instrumentation d'appels vers une base de données PostgreSQL
<a name="scorekeep-postgresql"></a>

**Note**  
Avis de SDK/Daemon maintenance de X-Ray — Le 25 février 2026, le AWS X-Ray SDKs/Daemon passera en mode maintenance, où les versions du SDK et du Daemon de X-Ray AWS seront limitées uniquement pour résoudre les problèmes de sécurité. Pour plus d'informations sur le calendrier de support, consultez[Chronologie du support pour le SDK et Daemon X-Ray](xray-sdk-daemon-timeline.md). Nous vous recommandons de migrer vers OpenTelemetry. Pour plus d'informations sur la migration vers OpenTelemetry, voir [Migration de l'instrumentation X-Ray vers OpenTelemetry l'instrumentation](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html).

Le `application-pgsql.properties` fichier ajoute l'intercepteur de traçage X-Ray PostgreSQL à la source de données créée dans. [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/RdsWebConfig.java](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/RdsWebConfig.java)

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/resources/application-pgsql.properties](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/resources/application-pgsql.properties)— Instrumentation de base de données PostgreSQL**  

```
spring.datasource.continue-on-error=true
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.jdbc-interceptors=com.amazonaws.xray.sql.postgres.TracingInterceptor
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL94Dialect
```

**Note**  
Consultez [Configuration des bases de données avec Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.db.html) dans le *Manuel du développeur AWS Elastic Beanstalk * pour obtenir des détails sur l'ajout d'une base de données PostgreSQL à l'environnement de l'application.

La page de démonstration de X-Ray de la `xray` branche inclut une démonstration qui utilise la source de données instrumentée pour générer des traces contenant des informations sur les requêtes SQL qu'elle génère. Accédez au chemin `/#/xray` dans l'application en cours d'exécution ou choisissez **Powered by AWS X-Ray** dans la barre de navigation pour afficher la page de démonstration.

![\[AWS X-Ray integration demo page showing game session tracing and SQL query tracing options.\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-demo.png)


Choisissez **Trace SQL queries** pour simuler les sessions de jeu et stocker les résultats dans la base de données attachée. Choisissez ensuite **View traces in AWS X-Ray** pour afficher une liste filtrée des traces qui suivent l'`/api/history`itinéraire de l'API.

Choisissez l'un des suivis de la liste pour afficher la chronologie, requête SQL incluse.

![\[Timeline view of a trace showing method, response, duration, and age for a GET request.\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-trace-sql.png)


# Fonctions d'instrumentation AWS Lambda
<a name="scorekeep-lambda"></a>

**Note**  
Avis de SDK/Daemon maintenance de X-Ray — Le 25 février 2026, le AWS X-Ray SDKs/Daemon passera en mode maintenance, où les versions du SDK et du Daemon de X-Ray AWS seront limitées uniquement pour résoudre les problèmes de sécurité. Pour plus d'informations sur le calendrier de support, consultez[Chronologie du support pour le SDK et Daemon X-Ray](xray-sdk-daemon-timeline.md). Nous vous recommandons de migrer vers OpenTelemetry. Pour plus d'informations sur la migration vers OpenTelemetry, voir [Migration de l'instrumentation X-Ray vers OpenTelemetry l'instrumentation](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html).

Scorekeep utilise deux AWS Lambda fonctions. La première est une fonction Node.js de la branche `lambda` qui génère des noms aléatoires pour les nouveaux utilisateurs. Lorsqu'un utilisateur crée une session sans indiquer de nom, l'application appelle une fonction nommée `random-name` avec le kit AWS SDK pour Java. Le SDK X-Ray pour Java enregistre les informations relatives à l'appel à Lambda dans un sous-segment comme tout autre appel effectué avec un client du SDK instrumenté. AWS 

**Note**  
L'exécution de la fonction `random-name` Lambda nécessite la création de ressources supplémentaires en dehors de l'environnement Elastic Beanstalk. Consultez le fichier readme pour plus d'informations et d'instructions : Intégration [AWS Lambda](https://github.com/awslabs/eb-java-scorekeep/tree/xray/README.md#aws-lambda-integration).

La deuxième fonction, `scorekeep-worker`, est une fonction Python qui s'exécute indépendamment de l'API du Scorekeep. Lorsqu'un jeu se termine, l'API enregistre l'ID de session et l'ID de jeu dans une file d'attente SQS. La fonction de travail lit les éléments de la file d'attente et appelle l'API Scorekeep pour créer des enregistrements complets de chaque session de jeu à stocker dans Amazon S3.

Scorekeep inclut des CloudFormation modèles et des scripts pour créer les deux fonctions. Comme vous devez associer le SDK X-Ray au code de fonction, les modèles créent les fonctions sans aucun code. Lorsque vous déployez Scorekeep, un fichier de configuration inclus dans le dossier `.ebextensions` crée un bundle source qui inclut le kit SDK et met à jour le code de fonction et la configuration avec l' AWS Command Line Interface.

**Topics**
+ [Nom aléatoire](#scorekeep-lambda-randomname)
+ [Nœuds](#scorekeep-lambda-worker)

## Nom aléatoire
<a name="scorekeep-lambda-randomname"></a>

Scorekeep appelle la fonction de nom aléatoire lorsqu'un utilisateur lance une session de jeu sans s'être connecté ni avoir spécifié de nom d'utilisateur. Lorsque Lambda traite l'appel à`random-name`, il lit l'[en-tête de suivi](xray-concepts.md#xray-concepts-tracingheader), qui contient l'ID de trace et la décision d'échantillonnage rédigés par le SDK X-Ray pour Java.

Pour chaque requête échantillonnée, Lambda exécute le daemon X-Ray et écrit deux segments. Le premier segment enregistre les informations relatives à l'appel à Lambda qui appelle la fonction. Ce segment contient les mêmes informations que le sous-segment enregistré par Scorekeep, mais du point de vue Lambda. Le deuxième segment représente la tâche effectuée par la fonction elle-même.

Lambda transmet le segment de fonction au SDK X-Ray via le contexte de la fonction. Lorsque vous instrumentez une fonction Lambda, vous n'utilisez pas le SDK pour [créer un segment pour](xray-sdk-nodejs-middleware.md) les demandes entrantes. Lambda fournit le segment, et vous utilisez le SDK pour instrumenter les clients et écrire des sous-segments.

![\[Carte de traçage montrant comment Scorekeep appelle une fonction Lambda pour obtenir des noms aléatoires pour les nouveaux utilisateurs\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-servicemap-lambda-node.png)


La fonction `random-name` est implémentée dans Node.js. Il utilise le SDK pour Node.js pour JavaScript envoyer des notifications avec Amazon SNS, et le SDK X-Ray pour Node.js pour AWS instrumenter le client du SDK. Pour écrire des annotations, la fonction crée un sous-segment personnalisé avec `AWSXRay.captureFunc`, et écrit des annotations dans la fonction instrumentée. Dans Lambda, vous ne pouvez pas écrire d'annotations directement dans le segment de fonction, mais uniquement dans un sous-segment que vous créez.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/function/index.js](https://github.com/awslabs/eb-java-scorekeep/tree/xray/function/index.js) -- Fonction Lambda de nom aléatoire**  

```
var AWSXRay = require('aws-xray-sdk-core');
var AWS = AWSXRay.captureAWS(require('aws-sdk'));

AWS.config.update({region: process.env.AWS_REGION});
var Chance = require('chance');

var myFunction = function(event, context, callback) {
  var sns = new AWS.SNS();
  var chance = new Chance();
  var userid = event.userid;
  var name = chance.first();

  AWSXRay.captureFunc('annotations', function(subsegment){
    subsegment.addAnnotation('Name', name);
    subsegment.addAnnotation('UserID', event.userid);
  });

  // Notify
  var params = {
    Message: 'Created randon name "' + name + '"" for user "' + userid + '".',
    Subject: 'New user: ' + name,
    TopicArn: process.env.TOPIC_ARN
  };
  sns.publish(params, function(err, data) {
    if (err) {
      console.log(err, err.stack);
      callback(err);
    }
    else {
      console.log(data);
      callback(null, {"name": name});
    }
  });
};

exports.handler = myFunction;
```

Cette fonction est créée automatiquement lorsque vous déployez l'exemple d'application pour Elastic Beanstalk. La `xray` branche inclut un script permettant de créer une fonction Lambda vide. Les fichiers de configuration contenus dans le `.ebextensions` dossier créent le package de fonctions `npm install` pendant le déploiement, puis mettent à jour la fonction Lambda avec la CLI AWS .

## Nœuds
<a name="scorekeep-lambda-worker"></a>

La fonction de travail instrumentée est fournie dans sa propre branche, `xray-worker`car elle ne peut s'exécuter que si vous créez d'abord la fonction de travail et les ressources connexes. Consultez [le fichier readme de la branche](https://github.com/awslabs/eb-java-scorekeep/tree/xray-worker/README.md) pour obtenir des instructions.

La fonction est déclenchée par un événement Amazon CloudWatch Events groupé toutes les 5 minutes. Lorsqu'elle s'exécute, la fonction extrait un élément d'une file d'attente Amazon SQS gérée par Scorekeep. Chaque message contient des informations sur un jeu terminé.

Le travail extrait l'enregistrement et les documents du jeu des autres tables auxquelles cet enregistrement fait référence. Par exemple, l'enregistrement de jeu dans DynamoDB inclut une liste des mouvements exécutés pendant le jeu. La liste ne contient pas les mouvements eux-mêmes, mais plutôt IDs les mouvements enregistrés dans une table séparée.

Les sessions et les états sont également stockés en tant que références. Cela évite que les entrées conservées dans la table du jeu soient trop volumineuses, mais nécessite des appels supplémentaires pour obtenir toutes les informations sur le jeu. Le travailleur déréférence toutes ces entrées et construit un enregistrement complet du jeu sous forme de document unique dans Amazon S3. Lorsque vous souhaitez effectuer des analyses sur les données, vous pouvez exécuter des requêtes directement dans Amazon S3 avec Amazon Athena sans effectuer de migrations de données fastidieuses pour extraire vos données de DynamoDB.

![\[Carte de trace montrant comment la fonction de travail de suivi des scores utilise Amazon SQS, Amazon S3 et l'API de suivi des scores.\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-servicemap-lambdaworker-node.png)


Le suivi actif est activé dans la configuration de la fonction de travail, dans AWS Lambda. Contrairement à la fonction de nom aléatoire, le travailleur ne reçoit pas de demande d'une application instrumentée et AWS Lambda ne reçoit donc pas d'en-tête de suivi. Avec le traçage actif, Lambda crée l'ID de trace et prend les décisions d'échantillonnage.

Le SDK X-Ray pour Python se trouve juste à quelques lignes en haut de la fonction qui importe le SDK et exécute sa `patch_all` fonction pour le corriger AWS SDK pour Python (Boto) et HTTclients qu'il utilise pour appeler Amazon SQS et Amazon S3. Lorsque le travail exécute l'API Scorekeep, le SDK ajoute l'[en-tête de suivi](xray-concepts.md#xray-concepts-tracingheader) à la demande pour suivre les appels via l'API.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray-worker/_lambda/scorekeep-worker/scorekeep-worker.py](https://github.com/awslabs/eb-java-scorekeep/tree/xray-worker/_lambda/scorekeep-worker/scorekeep-worker.py) - Fonction Lambda de travail**  

```
import os
import boto3
import json
import requests
import time
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all

patch_all()
queue_url = os.environ['WORKER_QUEUE']

def lambda_handler(event, context):
    # Create SQS client
    sqs = boto3.client('sqs')
    s3client = boto3.client('s3')

    # Receive message from SQS queue
    response = sqs.receive_message(
        QueueUrl=queue_url,
        AttributeNames=[
            'SentTimestamp'
        ],
        MaxNumberOfMessages=1,
        MessageAttributeNames=[
            'All'
        ],
        VisibilityTimeout=0,
        WaitTimeSeconds=0
    )
   ...
```

# Instrumentation du code de démarrage
<a name="scorekeep-startup"></a>

**Note**  
Avis de SDK/Daemon maintenance de X-Ray — Le 25 février 2026, le AWS X-Ray SDKs/Daemon passera en mode maintenance, où les versions du SDK et du Daemon de X-Ray AWS seront limitées uniquement pour résoudre les problèmes de sécurité. Pour plus d'informations sur le calendrier de support, consultez[Chronologie du support pour le SDK et Daemon X-Ray](xray-sdk-daemon-timeline.md). Nous vous recommandons de migrer vers OpenTelemetry. Pour plus d'informations sur la migration vers OpenTelemetry, consultez la section [Migration de l'instrumentation X-Ray vers OpenTelemetry l'instrumentation](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html).

Le SDK X-Ray pour Java crée automatiquement des segments pour les demandes entrantes. En ce qui concerne les demandes, vous pouvez utiliser des clients instrumentés et enregistrer les sous-segments sans problème. Cependant, si vous essayez d'utiliser un client instrumenté dans le code de démarrage, vous obtiendrez un [SegmentNotFoundException](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/exceptions/SegmentNotFoundException.html).

Le code de démarrage s'exécute en dehors du request/response flux standard d'une application Web. Vous devez donc créer des segments manuellement pour l'instrumenter. Scorekeep présente l'instrumentation du code de démarrage dans ses fichier `WebConfig`. Scorekeep appelle une base de données SQL et Amazon SNS au démarrage.

![\[Diagram showing client requests to Scorekeeper-init, which connects to SQL database and SNS.\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-servicemap-init.png)


La `WebConfig` classe par défaut crée un abonnement Amazon SNS pour les notifications. Pour fournir un segment dans lequel le SDK X-Ray peut écrire lorsque le client Amazon SNS est utilisé, Scorekeep `beginSegment` appelle `endSegment` et sur l'enregistreur global.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/WebConfig.java#L49](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/WebConfig.java#L49)— Client AWS SDK instrumenté dans le code de démarrage**  

```
AWSXRay.beginSegment("Scorekeep-init");
if ( System.getenv("NOTIFICATION_EMAIL") != null ){
  try { Sns.createSubscription(); }
  catch (Exception e ) {
    logger.warn("Failed to create subscription for email "+  System.getenv("NOTIFICATION_EMAIL"));
  }
}
AWSXRay.endSegment();
```

Dans`RdsWebConfig`, que Scorekeep utilise lorsqu'une base de données Amazon RDS est connectée, la configuration crée également un segment pour le client SQL qu'Hibernate utilise lorsqu'il applique le schéma de base de données au démarrage.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/RdsWebConfig.java#L83](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/RdsWebConfig.java#L83)— Client de base de données SQL instrumenté dans le code de démarrage**  

```
@PostConstruct
public void schemaExport() {
  EntityManagerFactoryImpl entityManagerFactoryImpl = (EntityManagerFactoryImpl) localContainerEntityManagerFactoryBean.getNativeEntityManagerFactory();
  SessionFactoryImplementor sessionFactoryImplementor = entityManagerFactoryImpl.getSessionFactory();
  StandardServiceRegistry standardServiceRegistry = sessionFactoryImplementor.getSessionFactoryOptions().getServiceRegistry();
  MetadataSources metadataSources = new MetadataSources(new BootstrapServiceRegistryBuilder().build());
  metadataSources.addAnnotatedClass(GameHistory.class);
  MetadataImplementor metadataImplementor = (MetadataImplementor) metadataSources.buildMetadata(standardServiceRegistry);
  SchemaExport schemaExport = new SchemaExport(standardServiceRegistry, metadataImplementor);

  AWSXRay.beginSegment("Scorekeep-init");
  schemaExport.create(true, true);
  AWSXRay.endSegment();
}
```

`SchemaExport` s'exécute automatiquement et utilise un client SQL. Dans la mesure où le client est instrumenté, Scorekeep doit remplacer la mise en œuvre par défaut et fournir un segment qui est utilisé par le kit de développement logiciel lorsque le client est appelé.

# Instrumentation de scripts
<a name="scorekeep-scripts"></a>

**Note**  
Avis de SDK/Daemon maintenance de X-Ray — Le 25 février 2026, le AWS X-Ray SDKs/Daemon passera en mode maintenance, où les versions du SDK et du Daemon de X-Ray AWS seront limitées uniquement pour résoudre les problèmes de sécurité. Pour plus d'informations sur le calendrier de support, consultez[Chronologie du support pour le SDK et Daemon X-Ray](xray-sdk-daemon-timeline.md). Nous vous recommandons de migrer vers OpenTelemetry. Pour plus d'informations sur la migration vers OpenTelemetry, consultez la section [Migration de l'instrumentation X-Ray vers OpenTelemetry l'instrumentation](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html).

Vous pouvez également instrumenter le code qui ne fait pas partie de l'application. Lorsque le daemon X-Ray est en cours d'exécution, il transmet tous les segments qu'il reçoit à X-Ray, même s'ils ne sont pas générés par le SDK de X-Ray. Scorekeep utilise ses propres scripts pour instrumenter la build qui compile l'application pendant le déploiement.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/build.sh](https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/build.sh)— Script de construction instrumenté**  

```
SEGMENT=$(python bin/xray_start.py)
gradle build --quiet --stacktrace &> /var/log/gradle.log; GRADLE_RETURN=$?
if (( GRADLE_RETURN != 0 )); then 
  echo "Gradle failed with exit status $GRADLE_RETURN" >&2
  python bin/xray_error.py "$SEGMENT" "$(cat /var/log/gradle.log)"
  exit 1
fi
python bin/xray_success.py "$SEGMENT"
```

[https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/xray_start.py](https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/xray_start.py), [https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/xray_error.py](https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/xray_error.py) et [https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/xray_success.py](https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/xray_success.py) sont de simples scripts Python qui construisent des objets de segment, les convertissent en documents JSON et les envoient au démon via UDP. Si la compilation de Gradle échoue, vous pouvez trouver le message d'erreur en cliquant sur le **nœud scorekeep-build dans la carte** de suivi de la console X-Ray.

![\[Diagram showing client connection to Scorekeep-build with average time of 14.6s and 0.07/min.\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-servicemap-builderror.png)


![\[Timeline view showing Scorekeep-build process with 14.6 second duration and warning icon.\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-timeline-builderror.png)


![\[Error message showing build failure due to missing ElasticBeanstalkPlugin symbol in RdsWebConfig class.\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-exception-builderror.png)


# Instrumentation d'un client d'application web
<a name="scorekeep-client"></a>

**Note**  
Avis de SDK/Daemon maintenance de X-Ray — Le 25 février 2026, le AWS X-Ray SDKs/Daemon passera en mode maintenance, où les versions du SDK et du Daemon de X-Ray AWS seront limitées uniquement pour résoudre les problèmes de sécurité. Pour plus d'informations sur le calendrier de support, consultez[Chronologie du support pour le SDK et Daemon X-Ray](xray-sdk-daemon-timeline.md). Nous vous recommandons de migrer vers OpenTelemetry. Pour plus d'informations sur la migration vers OpenTelemetry, consultez la section [Migration de l'instrumentation X-Ray vers OpenTelemetry l'instrumentation](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html).

Dans la [https://github.com/awslabs/eb-java-scorekeep/tree/xray-cognito](https://github.com/awslabs/eb-java-scorekeep/tree/xray-cognito)succursale, Scorekeep utilise Amazon Cognito pour permettre aux utilisateurs de créer un compte et de s'y connecter afin de récupérer leurs informations utilisateur depuis un groupe d'utilisateurs Amazon Cognito. Lorsqu'un utilisateur se connecte, Scorekeep utilise un pool d'identités Amazon Cognito pour obtenir des informations d'identification AWS temporaires à utiliser avec le. AWS SDK pour JavaScript

Le pool d'identités est configuré pour que les utilisateurs connectés puissent écrire des données de suivi sur AWS X-Ray. L'application web utilise ces informations d'identification pour enregistrer l'ID de l'utilisateur connecté, le chemin du navigateur et la vue des appels du client vers l'API Scorekeep.

La plupart des opérations sont effectuées dans une classe de service nommée `xray`. Cette classe de service fournit des méthodes permettant de générer les identifiants requis, de créer des segments en cours, de finaliser des segments et d'envoyer des documents de segment à l'API X-Ray.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray-cognito/public/app/xray.js](https://github.com/awslabs/eb-java-scorekeep/tree/xray-cognito/public/app/xray.js)— Enregistrez et téléchargez des segments**  

```
...
  service.beginSegment = function() {
    var segment = {};
    var traceId = '1-' + service.getHexTime() + '-' + service.getHexId(24);

    var id = service.getHexId(16);
    var startTime = service.getEpochTime();

    segment.trace_id = traceId;
    segment.id = id;
    segment.start_time = startTime;
    segment.name = 'Scorekeep-client';
    segment.in_progress = true;
    segment.user =  sessionStorage['userid'];
    segment.http = {
      request: {
        url: window.location.href
      }
    };

    var documents = [];
    documents[0] = JSON.stringify(segment);
    service.putDocuments(documents);
    return segment;
  }

  service.endSegment = function(segment) {
    var endTime = service.getEpochTime();
    segment.end_time = endTime;
    segment.in_progress = false;
    var documents = [];
    documents[0] = JSON.stringify(segment);
    service.putDocuments(documents);
  }

  service.putDocuments = function(documents) {
    var xray = new AWS.XRay();
    var params = {
      TraceSegmentDocuments: documents
    };
    xray.putTraceSegments(params, function(err, data) {
      if (err) {
        console.log(err, err.stack);
      } else {
        console.log(data);
      }
    })
  }
```

Ces méthodes sont appelées dans les fonctions d'en-tête et `transformResponse` dans les services de ressource utilisés par l'application web pour appeler l'API Scorekeep. Pour inclure le segment client dans la même trace que le segment généré par l'API, l'application Web doit inclure l'ID de trace et l'ID de segment dans un [en-tête de suivi](xray-concepts.md#xray-concepts-tracingheader) (`X-Amzn-Trace-Id`) que le SDK X-Ray peut lire. Lorsque l'application Java instrumentée reçoit une demande avec cet en-tête, le SDK X-Ray pour Java utilise le même identifiant de trace et fait du segment du client de l'application Web le parent de son segment. 

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray-cognito/public/app/services.js](https://github.com/awslabs/eb-java-scorekeep/tree/xray-cognito/public/app/services.js)— Enregistrement de segments pour les appels de ressources angulaires et écriture d'en-têtes de suivi**  

```
var module = angular.module('scorekeep');
module.factory('SessionService', function($resource, api, XRay) {
  return $resource(api + 'session/:id', { id: '@_id' }, {
    segment: {},
    get: {
      method: 'GET',
      headers: {
        'X-Amzn-Trace-Id': function(config) {
          segment = XRay.beginSegment();
          return XRay.getTraceHeader(segment);
        }
      },
      transformResponse: function(data) {
        XRay.endSegment(segment);
        return angular.fromJson(data);
      },
    },
...
```

La carte de trace obtenue inclut un nœud pour le client de l'application Web.

![\[\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-servicemap-client.png)


Les suivis qui contiennent des segments provenant de l'application web affichent l'URL que l'utilisateur voit dans le navigateur (chemins commençant par `/#/`). Sans l'instrumentation du client, vous obtenez uniquement l'URL de la ressource d'API que l'application web appelle (chemins commençant par `/api/`).

![\[\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-traces-client.png)


# Utilisation de clients instrumentés dans les threads de travail
<a name="scorekeep-workerthreads"></a>

**Note**  
Avis de SDK/Daemon maintenance de X-Ray — Le 25 février 2026, le AWS X-Ray SDKs/Daemon passera en mode maintenance, où les versions du SDK et du Daemon de X-Ray AWS seront limitées uniquement pour résoudre les problèmes de sécurité. Pour plus d'informations sur le calendrier de support, consultez[Chronologie du support pour le SDK et Daemon X-Ray](xray-sdk-daemon-timeline.md). Nous vous recommandons de migrer vers OpenTelemetry. Pour plus d'informations sur la migration vers OpenTelemetry, consultez la section [Migration de l'instrumentation X-Ray vers OpenTelemetry l'instrumentation](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html).

Scorekeep utilise un fil de discussion pour publier une notification sur Amazon SNS lorsqu'un utilisateur gagne une partie. La publication de la notification prend plus de temps que le reste des opérations de demande combinées et n'affecte pas le client ou l'utilisateur. Par conséquent, l'exécution de la tâche de manière asynchrone est un bon moyen d'améliorer le temps de réponse.

Cependant, le SDK X-Ray pour Java ne sait pas quel segment était actif lors de la création du thread. Par conséquent, lorsque vous essayez d'utiliser le AWS SDK pour Java client instrumenté dans le thread, cela lance un `SegmentNotFoundException` et fait planter le thread.

**Example Web-1.error.log**  

```
Exception in thread "Thread-2" com.amazonaws.xray.exceptions.SegmentNotFoundException: Failed to begin subsegment named 'AmazonSNS': segment cannot be found.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
...
```

Pour résoudre ce problème, l'application `GetTraceEntity` obtient une référence au segment dans le thread principal et `Entity.run()` exécute en toute sécurité le code du thread de travail avec accès au contexte du segment.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/MoveFactory.java#L70](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/MoveFactory.java#L70)— Transmission du contexte de trace à un thread de travail**  

```
import [com.amazonaws.xray.AWSXRay](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRay.html);
import [com.amazonaws.xray.AWSXRayRecorder](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRayRecorder.html);
import [com.amazonaws.xray.entities.Entity](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Entity.html);
import [com.amazonaws.xray.entities.Segment](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Segment.html);
import [com.amazonaws.xray.entities.Subsegment](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Subsegment.html);
...
      Entity segment = recorder.getTraceEntity();
      Thread comm = new Thread() {
        public void run() {
         segment.run(() -> {
            Subsegment subsegment = AWSXRay.beginSubsegment("## Send notification");
            Sns.sendNotification("Scorekeep game completed", "Winner: " + userId);
            AWSXRay.endSubsegment();
          }
        }
```

La demande étant désormais résolue avant l'appel à Amazon SNS, l'application crée un sous-segment distinct pour le thread. Cela empêche le SDK X-Ray de fermer le segment avant d'enregistrer la réponse d'Amazon SNS. Si aucun sous-segment n'est ouvert lorsque Scorekeep a résolu la demande, la réponse d'Amazon SNS risque d'être perdue.

![\[\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/scorekeep-workerthread.png)


Pour plus d'informations sur le multithreading, consultez [Transmission de contexte de segment entre threads dans une application multithreads](xray-sdk-java-multithreading.md).