View a markdown version of this page

Instrumentación de código de inicio - AWS X-Ray

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Instrumentación de código de inicio

nota

X-Ray SDK/Daemon Aviso de mantenimiento: el 25 de febrero de 2026, AWS X-Ray SDKs/Daemon entrará en modo de mantenimiento, donde AWS se limitarán las versiones de X-Ray SDK y Daemon para abordar únicamente los problemas de seguridad. Para obtener más información sobre la cronología del soporte, consulte Cronología de X-Ray SDK y Daemon Support. Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte Migración de una X-Ray instrumentación a otra. OpenTelemetry

El X-Ray SDK para Java crea automáticamente segmentos para las solicitudes entrantes. Siempre que haya una solicitud en el ámbito, puede utilizar clientes instrumentados y registrar subsegmentos sin problema. Sin embargo, si intentas utilizar un cliente instrumentado en el código de inicio, obtendrás un SegmentNotFoundException.

El código de inicio se ejecuta fuera del request/response flujo estándar de una aplicación web, por lo que es necesario crear segmentos manualmente para instrumentalizarlo. Scorekeep muestra la instrumentación de código de inicio en sus archivos WebConfig. Scorekeep llama a una base de datos SQL y Amazon SNS durante el startup.

Diagrama que muestra los clientes que se conectan y que se conectan a una base de datos SQL y a SNS. Scorekeep-init

La clase WebConfig predeterminada crea una suscripción de Amazon SNS para notificaciones. Para proporcionar un segmento en el que el X-Ray SDK pueda escribir cuando se utilice el cliente Amazon SNS, Scorekeep llama a beginSegment y endSegment a la grabadora global.

ejemplo src/main/java/scorekeep/WebConfig.java — Instrumentado AWS Cliente SDK en código de inicio
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();

En RdsWebConfig, que Scorekeep utiliza cuando hay una base de datos de Amazon RDS conectada, la configuración también crea un segmento para el cliente SQL que utiliza Hibernate cuando aplica el esquema de base de datos durante el startup.

ejemplo src/main/java/scorekeep/RdsWebConfig.java — Cliente de base de datos SQL instrumentado en el código de inicio
@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 se ejecuta de forma automática y utiliza un cliente SQL. Dado que el cliente está instrumentado, Scorekeep debe anular la implementación predeterminada y proporcionar un segmento para que lo utilice el SDK cuando se llama al cliente.