Génération de sous-segments personnalisés avec le kit SDK X-Ray pour Java - 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.

Génération de sous-segments personnalisés avec le kit SDK X-Ray pour Java

Les sous-segments étendent une tracesegmentavec des détails sur le travail effectué pour répondre à une demande. Chaque fois que vous effectuez un appel avec un client instrumenté, le kit SDK X-Ray enregistre les informations générées dans un sous-segment. Vous pouvez créer des sous-segments supplémentaires pour regrouper d'autres sous-segments, pour mesurer les performances d'une section de code ou pour enregistrer des annotations et des métadonnées.

Pour gérer des sous-segments, utilisez les méthodes beginSubsegment et endSubsegment.

Exemple GameModel.java - Sous-segment personnalisé
import com.amazonaws.xray.AWSXRay; ... public void saveGame(Game game) throws SessionNotFoundException { // wrap in subsegment Subsegment subsegment = AWSXRay.beginSubsegment("Save Game"); try { // check session String sessionId = game.getSession(); if (sessionModel.loadSession(sessionId) == null ) { throw new SessionNotFoundException(sessionId); } mapper.save(game); } catch (Exception e) { subsegment.addException(e); throw e; } finally { AWSXRay.endSubsegment(); } }

Dans cet exemple, le code du sous-segment charge la session du jeu à partir de DynamoDB avec une méthode sur le modèle de session, et utilise l'outilAWS SDK for Javade DynamoDB Mapper pour sauver la partie. Le fait d'envelopper ce code dans un sous-segment permet aux appels DynamoDB de devenir les enfants duSave GameSous-segment dans la vue de suivi de la console.

Si le code de votre sous-segment lève des exceptions cochées, enveloppez-le dans un bloc try et appelez AWSXRay.endSubsegment() dans un bloc finally pour veiller à ce que le sous-segment soit toujours fermé. Si un sous-segment n'est pas fermé, le segment parent ne peut pas être terminé et ne sera pas envoyé à X-Ray.

Si le code ne génère pas les exceptions cochées, vous pouvez le transmettre àAWSXRay.CreateSubsegmenten tant que fonction Lambda

Exemple Sous-segment de la fonction Lambda
import com.amazonaws.xray.AWSXRay; AWSXRay.createSubsegment("getMovies", (subsegment) -> { // function code });

Lorsque vous créez un sous-segment dans un segment ou un autre sous-segment, le kit SDK X-Ray pour Java génère un ID et enregistre l'heure de début et de fin.

Exemple Sous-segment avec des métadonnées
"subsegments": [{ "id": "6f1605cd8a07cb70", "start_time": 1.480305974194E9, "end_time": 1.4803059742E9, "name": "Custom subsegment for UserModel.saveUser function", "metadata": { "debug": { "test": "Metadata string from UserModel.saveUser" } },

Pour la programmation asynchrone et multithread, vous devez passer manuellement le sous-segment auendSubsegment()pour s'assurer qu'il est correctement fermé car le contexte X-Ray peut être modifié pendant l'exécution asynchrone. Si un sous-segment asynchrone est fermé après la fermeture de son segment parent, cette méthode transmet automatiquement le segment entier vers le démon X-Ray.

Exemple Sous-segment asynchrone
@GetMapping("/api") public ResponseEntity<?> api() { CompletableFuture.runAsync(() -> { Subsegment subsegment = AWSXRay.beginSubsegment("Async Work"); try { Thread.sleep(3000); } catch (InterruptedException e) { subsegment.addException(e); throw e; } finally { AWSXRay.endSubsegment(subsegment); } }); return ResponseEntity.ok().build(); }