View a markdown version of this page

Generación de subsegmentos personalizados con el X-Ray SDK para Java - 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.

Generación de subsegmentos personalizados con el X-Ray SDK para Java

nota

X-Ray SDK/Daemon Aviso de mantenimiento: el 25 de febrero de 2026, AWS X-Ray SDKs/Daemon entrará en modo de mantenimiento, en el que 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

Los subsegmentos amplían el segmento de un rastro con detalles sobre el trabajo realizado para atender una solicitud. Cada vez que realiza una llamada con un cliente instrumentado, el X-Ray SDK registra la información generada en un subsegmento. Puede crear subsegmentos adicionales para agrupar otros subsegmentos, medir el rendimiento de una sección de código o registrar anotaciones y metadatos.

Para administrar los subsegmentos, utilice los métodos beginSubsegment y endSubsegment.

ejemplo GameModel.java - subsegmento personalizado
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(); } }

En este ejemplo, el código del subsegmento carga la sesión del juego desde DynamoDB con un método del modelo de sesión y utiliza el mapeador de DynamoDB para AWS SDK para Java guardar la partida. Cuando se encapsula este código en un subsegmento, las llamadas a DynamoDB se convierten en elementos secundarios del subsegmento Save Game en la vista de rastros en la consola.

Cronología que muestra el mantenimiento de puntuaciones y las operaciones con comprobaciones de duración y estado. DynamoDB

Si en el código en su subsegmentos aparecen excepciones comprobadas, envuélvalo en un bloque try y llame a AWSXRay.endSubsegment() en un bloque finally para garantizar que el subsegmento está siempre cerrado. Si un subsegmento no está cerrado, el segmento principal no se puede completar y no se enviará a. X-Ray

En los códigos donde no aparecen excepciones comprobadas, puede transferir el código a AWSXRay.CreateSubsegment como una función de Lambda.

ejemplo Función Lambda de subsegmento
import com.amazonaws.xray.AWSXRay; AWSXRay.createSubsegment("getMovies", (subsegment) -> { // function code });

Al crear un subsegmento dentro de un segmento u otro subsegmento, el X-Ray SDK para Java genera un ID para él y registra la hora de inicio y la hora de finalización.

ejemplo Subsegmentos con metadatos
"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" } },

Para la programación asíncrona y de subprocesos múltiples, debes pasar manualmente el subsegmento al endSubsegment() método para asegurarte de que se cierra correctamente, ya que el contexto puede modificarse durante la X-Ray ejecución asíncrona. Si un subsegmento asíncrono se cierra después de cerrar su segmento principal, este método transmitirá automáticamente todo el segmento al daemon. X-Ray

ejemplo Subsegmento asíncrono
@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(); }