View a markdown version of this page

Instrumentation du code de démarrage - 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.

Instrumentation du code de démarrage

Note

X-Ray SDK/Daemon Avis de maintenance — Le 25 février 2026, ils AWS X-Ray SDKs/Daemon passeront en mode maintenance, où les versions du X-Ray SDK et de Daemon AWS seront limitées uniquement pour résoudre les problèmes de sécurité. Pour plus d'informations sur le calendrier de support, consultezChronologie du support pour le SDK et Daemon X-Ray. Nous vous recommandons de migrer vers OpenTelemetry. Pour plus d'informations sur la migration vers OpenTelemetry, consultez la section Migration de l' X-Ray instrumentation vers OpenTelemetry l'instrumentation.

Le X-Ray SDK for 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.

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.

Schéma montrant les clients se connectant à Scorekeep-init, qui se connectent à la base de données SQL et au SNS.

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

Exemple src/main/java/scorekeep/WebConfig.java — Instrumenté AWS Client SDK 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();

DansRdsWebConfig, 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.

Exemple src/main/java/scorekeep/RdsWebConfig.java — 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é.