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

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, 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'instrumentation X-Ray vers OpenTelemetry l'instrumentation.

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.

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.

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.

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

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é.