View a markdown version of this page

Instrumentieren von Startup-Code - AWS X-Ray

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Instrumentieren von Startup-Code

Anmerkung

X-Ray SDK/Daemon Wartungshinweis — Am 25. Februar 2026 wechselt der AWS X-Ray SDKs/Daemon in den Wartungsmodus, in dem X-Ray SDK- und Daemon-Versionen auf Sicherheitsprobleme beschränkt AWS werden. Weitere Informationen zum Zeitplan für den Support finden Sie unter. Zeitplan für die Support von X-Ray SDK und Daemon Wir empfehlen die Migration zu OpenTelemetry. Weitere Informationen zur Migration zu OpenTelemetry finden Sie unter Migration von X-Ray Instrumentation zu OpenTelemetry Instrumentation.

Das X-Ray SDK for Java erstellt automatisch Segmente für eingehende Anfragen. Wenn eine Anfrage im Leistungsumfang enthalten ist, können Sie instrumentierte Clients verwenden und Untersegmente ohne Probleme aufzeichnen. Wenn Sie jedoch versuchen, einen instrumentierten Client im Startcode zu verwenden, erhalten Sie einen SegmentNotFoundException.

Der Startcode wird außerhalb des request/response Standardablaufs einer Webanwendung ausgeführt, sodass Sie Segmente manuell erstellen müssen, um ihn zu instrumentieren. Scorekeep stellt die Instrumentierung von Startup-Code in den WebConfig-Dateien dar. Scorekeep ruft beim Start eine SQL-Datenbank und Amazon SNS auf.

Diagramm, das die Clients zeigt Scorekeep-init, mit denen eine Verbindung zur SQL-Datenbank und zu SNS hergestellt wird.

Die WebConfig Standardklasse erstellt ein Amazon SNS SNS-Abonnement für Benachrichtigungen. Um ein Segment bereitzustellen, in das das X-Ray SDK schreiben kann, wenn der Amazon SNS-Client verwendet wird, ruft Scorekeep endSegment auf beginSegment und auf dem Global Recorder auf.

Beispiel src/main/java/scorekeep/WebConfig.java — Instrumentiert AWS SDK-Client im Startcode
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();

InRdsWebConfig, das Scorekeep verwendet, wenn eine Amazon RDS-Datenbank verbunden ist, erstellt die Konfiguration auch ein Segment für den SQL-Client, den Hibernate verwendet, wenn es das Datenbankschema beim Start anwendet.

Beispiel src/main/java/scorekeep/RdsWebConfig.java — Instrumentierter SQL-Datenbank-Client im Startcode
@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 wird automatisch ausgeführt und verwendet einen SQL-Client. Da der Client instrumentiert ist, muss Scorekeep die Standardimplementierung überschreiben und ein Segment bereitstellen, das das SDK verwenden kann, wenn der Client aufgerufen wird.