

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.

# AWS X-Ray ejemplo de aplicación
<a name="xray-scorekeep"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el 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](xray-sdk-daemon-timeline.md). Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte [Migración de una instrumentación de rayos X a una instrumentación](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

La aplicación de [eb-java-scorekeep](https://github.com/awslabs/eb-java-scorekeep/tree/xray)ejemplo AWS X-Ray, disponible en GitHub, muestra el uso del AWS X-Ray SDK para instrumentar las llamadas HTTP entrantes, los clientes del SDK de DynamoDB y los clientes HTTP. La aplicación de ejemplo se utiliza CloudFormation para crear tablas de DynamoDB, compilar código Java en una instancia y ejecutar el daemon X-Ray sin ninguna configuración adicional.

Consulte el [tutorial de Scorekeep](scorekeep-tutorial.md) para empezar a instalar y utilizar una aplicación de ejemplo instrumentada, utilizando el o el. Consola de administración de AWS AWS CLI

![\[Scorekeep usa el SDK de AWS X-Ray para instrumentar las llamadas HTTP entrantes, los clientes del SDK de DynamoDB y los clientes HTTP\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-flow.png)


La muestra incluye una aplicación web frontend, la API a la que llama y las tablas de DynamoDB que usa para almacenar los datos. La instrumentación básica con [filtros](xray-sdk-java-filters.md), [complementos](xray-sdk-java-configuration.md) y [clientes de AWS SDK instrumentados](xray-sdk-java-awssdkclients.md) se muestra en la rama del proyecto. `xray-gettingstarted` Esta es la ramificación que se implementa en el [tutorial Introducción](scorekeep-tutorial.md). Dado que esta ramificación solo incluye los aspectos básicos, puede diferenciarla rápidamente de la ramificación `master` para comprender rápidamente los aspectos básicos.

![\[Service map showing client interaction with Scorekeep container and related Servicios de AWS.\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-gettingstarted-servicemap-before-ECS.png)


La aplicación de ejemplo muestra una instrumentación básica en estos archivos:
+ **Filtro de solicitudes HTTP**: [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/WebConfig.java](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/WebConfig.java)
+ **AWS Instrumentación de cliente del SDK**: [https://github.com/awslabs/eb-java-scorekeep/tree/xray/build.gradle](https://github.com/awslabs/eb-java-scorekeep/tree/xray/build.gradle)

La `xray` rama de la aplicación incluye el uso de [anotaciones [HTTPClient](xray-sdk-java-httpclients.md)](xray-sdk-java-segment.md), [consultas SQL](xray-sdk-java-sqlclients.md), [subsegmentos personalizados](xray-sdk-java-subsegments.md), una [AWS Lambda](xray-services-lambda.md)función instrumentada y códigos y scripts de inicialización [instrumentados](scorekeep-startup.md).

Para permitir el inicio de sesión de los usuarios y AWS SDK para JavaScript su uso en el navegador, la `xray-cognito` sucursal añade Amazon Cognito para admitir la autenticación y la autorización de los usuarios. Con credenciales recuperadas desde Amazon Cognito, la aplicación web también envía datos de rastro a X-Ray para registrar la información de la solicitud desde el punto de vista del cliente. El cliente del navegador aparece como su propio nodo en el mapa de rastros y registra información adicional, incluida la URL de la página que el usuario está visualizando y el ID de usuario.

Por último, la ramificación `xray-worker` añade una función de Lambda en Python instrumentada que se ejecuta de forma independiente, procesando los elementos de una cola de Amazon SQS. Scorekeep añade un elemento a la cola cada vez que termina un juego. El trabajador de Lambda, activado por CloudWatch eventos, extrae elementos de la cola cada pocos minutos y los procesa para almacenar registros de juegos en Amazon S3 para su análisis.

**Topics**
+ [Introducción a la aplicación de ejemplo Scorekeep](scorekeep-tutorial.md)
+ [Instrumentación AWS manual de los clientes del SDK](scorekeep-sdkclients.md)
+ [Creación de subsegmentos adicionales](scorekeep-subsegments.md)
+ [Registra las anotaciones, los metadatos y el usuario IDs](scorekeep-annotations.md)
+ [Instrumentación de llamadas a HTTP salientes](scorekeep-httpclient.md)
+ [Instrumentación de llamadas a una base de datos PostgreSQL](scorekeep-postgresql.md)
+ [Funciones de instrumentación AWS Lambda](scorekeep-lambda.md)
+ [Instrumentación de código de inicio](scorekeep-startup.md)
+ [Instrumentación de scripts](scorekeep-scripts.md)
+ [Instrumentación de un cliente de aplicación web](scorekeep-client.md)
+ [Uso de clientes instrumentados en subprocesos de trabajo](scorekeep-workerthreads.md)

# Introducción a la aplicación de ejemplo Scorekeep
<a name="scorekeep-tutorial"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el 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](xray-sdk-daemon-timeline.md). Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte [Migración de una instrumentación de rayos X a una instrumentación](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

En este tutorial se utiliza la `xray-gettingstarted` rama de la [aplicación de ejemplo Scorekeep](xray-scorekeep.md), que se utiliza CloudFormation para crear y configurar los recursos que ejecutan la aplicación de ejemplo y el daemon X-Ray en Amazon ECS. La aplicación utiliza el marco Spring para implementar una API web de JSON y AWS SDK para Java para conservar los datos en Amazon DynamoDB. Un servlet filtra en la aplicación instrumenta todas las solicitudes entrantes atendidas por la aplicación y un controlador de solicitudes en el cliente del AWS SDK instrumenta las llamadas descendentes a DynamoDB.

Puede seguir este tutorial utilizando el o el. Consola de administración de AWS AWS CLI

**Topics**
+ [Requisitos previos](#xray-gettingstarted-prereqs)
+ [Instale la aplicación Scorekeep mediante CloudFormation](#xray-gettingstarted-deploy)
+ [Generación de datos de rastreo](#xray-gettingstarted-generate-traces)
+ [Vea el mapa de rastreo en el Consola de administración de AWS](#xray-gettingstarted-console)
+ [Configuración de notificaciones de Amazon SNS](#xray-gettingstarted-notifications)
+ [Explorar la aplicación de ejemplo](#xray-gettingstarted-sample)
+ [Opcional: política de privilegios mínimos](#xray-gettingstarted-security)
+ [Limpieza](#xray-gettingstarted-cleanup)
+ [Siguientes pasos](#xray-gettingstarted-nextsteps)

## Requisitos previos
<a name="xray-gettingstarted-prereqs"></a>

Este tutorial se utiliza CloudFormation para crear y configurar los recursos que ejecutan la aplicación de ejemplo y el daemon X-Ray. Se tienen que cumplir los siguientes requisitos previos para instalar y ejecutar el tutorial: 

1. Si utiliza un usuario de IAM con permisos limitados, añada las siguientes políticas de usuario en la [consola de IAM](https://console.aws.amazon.com/iam): 
   + `AWSCloudFormationFullAccess`— para acceder y usar CloudFormation
   + `AmazonS3FullAccess`— para cargar un archivo de plantilla CloudFormation utilizando el Consola de administración de AWS
   + `IAMFullAccess`: para crear los roles de instancia de Amazon ECS y Amazon EC2
   + `AmazonEC2FullAccess`: para crear los recursos de Amazon EC2
   + `AmazonDynamoDBFullAccess`: para crear las tablas de DynamoDB
   + `AmazonECS_FullAccess`: para crear recursos de Amazon ECS
   + `AmazonSNSFullAccess`: para crear el tema de Amazon SNS
   + `AWSXrayReadOnlyAccess`: para obtener permiso para ver el mapa de rastros y los rastros en la consola de X-Ray

1. Para seguir el tutorial mediante el AWS CLI, [instale la CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) versión 2.7.9 o posterior y [configure la CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) con el usuario del paso anterior. Asegúrese de que la región esté configurada al configurar AWS CLI con el usuario. Si no se configura una región, hay que anexar `--region AWS-REGION` a todos los comandos de la CLI. 

1. Asegúrese de que [Git](https://github.com/git-guides/install-git) esté instalado para clonar el repositorio de aplicaciones de muestra. 

1. Utilice el siguiente código de ejemplo para clonar la ramificación `xray-gettingstarted` del repositorio de Scorekeep: 

   ```
   git clone https://github.com/aws-samples/eb-java-scorekeep.git xray-scorekeep -b xray-gettingstarted
   ```

## Instale la aplicación Scorekeep mediante CloudFormation
<a name="xray-gettingstarted-deploy"></a>

------
#### [ Consola de administración de AWS ]

**Instale la aplicación de ejemplo mediante el Consola de administración de AWS**

1. Abra la [consola de CloudFormation](https://console.aws.amazon.com/cloudformation/).

1. Elija **Crear pila** y, a continuación, elija **Con nuevos recursos** en el menú desplegable.

1. En la sección **Especificar plantilla**, elija **Cargar un archivo de plantilla**.

1. Seleccione **Elegir archivo**, navegue hasta la carpeta `xray-scorekeep/cloudformation` que se creó al clonar el repositorio de Git y elija el archivo `cf-resources.yaml`.

1. Elija **Siguiente** para continuar.

1. Escriba `scorekeep` en el cuadro de texto **Nombre de la pila** y, a continuación, seleccione **Siguiente** en la parte inferior de la página para continuar. Tenga en cuenta que en el resto de este tutorial se supone que la pila se llama `scorekeep`.

1. Desplázate hasta la parte inferior de la página **Configuración de opciones de pila** y seleccione **Siguiente** para continuar.

1. Desplázate hasta la parte inferior de la página de **revisión**, selecciona la casilla de verificación que indica que se CloudFormation pueden crear recursos de IAM con nombres personalizados y selecciona **Crear** pila.

1. La CloudFormation pila se está creando ahora. El estado de la pila será `CREATE_IN_PROGRESS` durante unos cinco minutos antes de cambiar a `CREATE_COMPLETE`. El estado se actualizará periódicamente, o el usuario puede actualizar la página.

------
#### [ AWS CLI ]

**Instale la aplicación de ejemplo mediante el AWS CLI**

1. Navegue hasta la carpeta `cloudformation` del repositorio `xray-scorekeep` que clonó anteriormente en el tutorial:

   ```
   cd xray-scorekeep/cloudformation/
   ```

1. Introduzca el siguiente AWS CLI comando para crear la CloudFormation pila:

   ```
   aws cloudformation create-stack --stack-name scorekeep --capabilities "CAPABILITY_NAMED_IAM" --template-body file://cf-resources.yaml
   ```

1. Espere hasta que el estado de la CloudFormation pila sea `CREATE_COMPLETE` correcto, lo que tardará unos cinco minutos. Usa el siguiente AWS CLI comando para comprobar el estado:

   ```
   aws cloudformation describe-stacks --stack-name scorekeep --query "Stacks[0].StackStatus"
   ```

------

## Generación de datos de rastreo
<a name="xray-gettingstarted-generate-traces"></a>

La aplicación de ejemplo incluye una aplicación web front-end. Utilice la aplicación web para generar tráfico a la API y enviar los datos de rastro a X-Ray. En primer lugar, recupere la URL de la aplicación web mediante la Consola de administración de AWS o la AWS CLI:

------
#### [ Consola de administración de AWS ]

**Busque la URL de la aplicación mediante el Consola de administración de AWS**

1. Abra la [consola de CloudFormation](https://console.aws.amazon.com/cloudformation/).

1. Elija la pila `scorekeep` en la lista.

1. Elija la pestaña **Salidas** en la página de la pila `scorekeep` y elija el enlace URL `LoadBalancerUrl` para abrir la aplicación web.

------
#### [ AWS CLI ]

**Busque la URL de la aplicación mediante el AWS CLI**

1. Use el siguiente comando para mostrar la dirección URL de la aplicación web:

   ```
   aws cloudformation describe-stacks --stack-name scorekeep --query "Stacks[0].Outputs[0].OutputValue"
   ```

1. Copie esta URL y ábrala en un navegador para mostrar la aplicación web Scorekeep.

------

**Uso de la aplicación web para generar datos de rastro**

1. Elija **Create (Crear)** para crear un usuario y una sesión.

1. Escriba un **nombre de juego**, establezca las **Reglas** en **Tres en raya** y elija después **Crear** para crear un juego.

1. Seleccione **Play (Jugar)** para comenzar el juego.

1. Elija una ficha para hacer un movimiento y cambiar el estado del juego.

Cada uno de estos pasos genera solicitudes HTTP a la API y llamadas posteriores a DynamoDB para leer y escribir el usuario, la sesión, el juego, la movida y los datos de estado.

## Vea el mapa de rastreo en el Consola de administración de AWS
<a name="xray-gettingstarted-console"></a>

Puede ver el mapa de trazas y las trazas generadas por la aplicación de ejemplo en X-Ray y en CloudWatch las consolas.

------
#### [ X-Ray console ]

**Uso de la consola de X-Ray**

1. Abra la página del mapa de rastros de la [consola de X-Ray](https://console.aws.amazon.com/xray/home#/service-map).

1. La consola muestra una representación del gráfico de servicios que X-Ray genera a partir de los datos de rastro que envía la aplicación. Asegúrese de ajustar el período de tiempo del mapa de rastros si es necesario, para asegurarse de que mostrará todos los rastros desde que inició la aplicación web.  
![\[Período de tiempo del mapa de rastros de X-Ray\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/xray-console-time-period-15-minutes.png)

El mapa de rastros muestra el cliente de la aplicación web, la API que se ejecuta en Amazon ECS y cada tabla de DynamoDB que la aplicación utiliza. Cada solicitud que se envía a la aplicación, hasta una cantidad máxima configurable de solicitudes por segundo, se rastrea hasta que llega a la API, genera solicitudes para los servicios posteriores y se completa.

Puede elegir cualquier nodo en el gráfico de servicios para ver los rastros de las solicitudes que generaron tráfico hacia ese nodo. Actualmente, el nodo Amazon SNS es amarillo. Profundice para saber por qué.

![\[Página del mapa de rastros de la consola de X-Ray\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-gettingstarted-servicemap-before-ECS.png)


**Para encontrar la causa del error**

1. Seleccione el nodo denominado **SNS**. Se muestra el panel de detalles del nodo.

1. Elija **View traces (Ver rastreos)** para acceder a la pantalla **Trace overview (Información general de rastreo)**.

1. Seleccione el rastro en **Trace list (Lista de rastros)**. Este rastro no tiene método ni URL porque se registró durante el inicio y no en respuesta a una solicitud de entrada.  
![\[Elegir un registro de seguimiento de la lista de registros de seguimiento\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-gettingstarted-tracelist-sns.png)

1. Seleccione el icono de estado de error en el segmento de Amazon SNS en la parte inferior de la página para abrir la página **Excepciones** del subsegmento de SNS.  
![\[Seleccione el icono de estado de error para abrir la página Excepciones del subsegmento de Amazon SNS.\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-gettingstarted-timeline-sns-ecs.png)

1. El SDK de X-Ray captura automáticamente las excepciones producidas por clientes del SDK de AWS instrumentados y registra el seguimiento de la pila.  
![\[Pestaña Exceptions (Excepciones) con las excepciones capturadas y el rastro de stack registrado\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-gettingstarted-exception.png)

------
#### [ CloudWatch console ]

**Usa la CloudWatch consola**

1. Abra la página del [mapa de rastreo de X-Ray](https://console.aws.amazon.com/cloudwatch/home#xray:service-map/map) de la CloudWatch consola.

1. La consola muestra una representación del gráfico de servicios que X-Ray genera a partir de los datos de rastro que envía la aplicación. Asegúrese de ajustar el período de tiempo del mapa de rastros si es necesario, para asegurarse de que mostrará todos los rastros desde que inició la aplicación web.  
![\[CloudWatch trazar el período de tiempo del mapa\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/cw-console-service-map-time-period-15-minutes.png)

El mapa de rastros muestra el cliente de la aplicación web, la API que se ejecuta en Amazon EC2 y cada tabla de DynamoDB que la aplicación utiliza. Cada solicitud que se envía a la aplicación, hasta una cantidad máxima configurable de solicitudes por segundo, se rastrea hasta que llega a la API, genera solicitudes para los servicios posteriores y se completa.

Puede elegir cualquier nodo en el gráfico de servicios para ver los rastros de las solicitudes que generaron tráfico hacia ese nodo. Actualmente, el nodo Amazon SNS es naranja. Profundice para saber por qué.

![\[Página del mapa de rastros de la consola de X-Ray\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-gettingstarted-cw-servicemap-before-ECS.png)


**Para encontrar la causa del error**

1. Seleccione el nodo denominado **SNS**. El panel de detalles del nodo SNS se muestra debajo del mapa.

1. Seleccione **Ver rastros** para acceder a la página **Rastros**.

1. En la parte inferior de la página, elija el rastro de la lista **Rastros**. Este rastro no tiene método ni URL porque se registró durante el inicio y no en respuesta a una solicitud de entrada.  
![\[Elegir un registro de seguimiento de la lista de registros de seguimiento\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-gettingstarted-cw-tracelist-sns-ecs.png)

1. Elija el subsegmento de Amazon SNS en la parte inferior de la escala de tiempo de los segmentos y elija la pestaña **Excepciones** del subsegmento de SNS para ver los detalles de la excepción.  
![\[Consulta de la pestaña Excepciones del subsegmento de Amazon SNS\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-gettingstarted-cw-timeline-sns-ecs.png)

------

La causa indica que la dirección de correo electrónico proporcionada en una llamada a `createSubscription` realizada en la clase `WebConfig` no era válida. Lo arreglaremos en la siguiente sección.

## Configuración de notificaciones de Amazon SNS
<a name="xray-gettingstarted-notifications"></a>

Scorekeep utiliza Amazon SNS para enviar notificaciones cuando los usuarios completan un juego. Cuando la aplicación se inicia, intenta crear una suscripción para una dirección de correo electrónico definida en un parámetro de CloudFormation pila. Esa llamada está fallando actualmente. Configure un correo electrónico de notificación para habilitar las notificaciones y resolver los errores destacados en el mapa de rastros.

------
#### [ Consola de administración de AWS ]

**Para configurar las notificaciones de Amazon SNS mediante el Consola de administración de AWS**

1. Abra la [consola de CloudFormation](https://console.aws.amazon.com/cloudformation/).

1. Seleccione el botón de opción situado junto al nombre de pila `scorekeep` en la lista y, a continuación, seleccione **Actualizar**.

1. Asegúrese de seleccionar **Usar la plantilla actual** y, a continuación, haga clic en **Siguiente** en la página **Actualizar pila**.

1. Busque el parámetro **Correo electrónico** en la lista y sustituya el valor predeterminado por una dirección de correo electrónico válida.  
![\[Actualización de la configuración del correo electrónico\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-cf-email-update.png)

1. Desplácese hasta la parte inferior de la página y elija **Siguiente**.

1. **Desplázate hasta la parte inferior de la página de **revisión**, selecciona la casilla de verificación que confirma que se CloudFormation pueden crear recursos de IAM con nombres personalizados y selecciona Actualizar pila.**

1. La CloudFormation pila se está actualizando ahora. El estado de la pila será `UPDATE_IN_PROGRESS` durante unos cinco minutos antes de cambiar a `UPDATE_COMPLETE`. El estado se actualizará periódicamente, o el usuario puede actualizar la página.

------
#### [ AWS CLI ]

**Para configurar las notificaciones de Amazon SNS mediante el AWS CLI**

1. Vaya a la carpeta `xray-scorekeep/cloudformation/` que creó anteriormente y abra el archivo `cf-resources.yaml` en un editor de texto.

1. Busque el `Default` valor en el parámetro **Email** y cámbielo por una dirección de *UPDATE\$1ME* correo electrónico válida.

   ```
   Parameters:
     Email:
       Type: String
       Default: UPDATE_ME # <- change to a valid abc@def.xyz email address
   ```

1. Desde la `cloudformation` carpeta, actualiza la CloudFormation pila con el siguiente AWS CLI comando: 

   ```
   aws cloudformation update-stack --stack-name scorekeep --capabilities "CAPABILITY_NAMED_IAM" --template-body file://cf-resources.yaml
   ```

1. Espera a que se CloudFormation muestre el estado de la pila`UPDATE_COMPLETE`, lo que tardará unos minutos. Usa el siguiente AWS CLI comando para comprobar el estado:

   ```
   aws cloudformation describe-stacks --stack-name scorekeep --query "Stacks[0].StackStatus"
   ```

------

Cuando se completa la actualización, Scorekeep se reinicia y crea una suscripción al tema de SNS. Compruebe su correo electrónico y confirme la suscripción para ver las actualizaciones cuando complete un juego. Abra el mapa de rastros para comprobar que las llamadas a SNS ya no están fallando.

## Explorar la aplicación de ejemplo
<a name="xray-gettingstarted-sample"></a>

La aplicación de ejemplo es una API web HTTP en Java que está configurada para utilizar el SDK de X-Ray para Java. Al implementar la aplicación con la CloudFormation plantilla, esta crea las tablas de DynamoDB, el clúster de Amazon ECS y otros servicios necesarios para ejecutar Scorekeep en ECS. Se crea un archivo de definición de tareas para ECS mediante. CloudFormation Este archivo define las imágenes del contenedor utilizadas por tarea en un clúster de ECS. Estas imágenes se obtienen del ECR público oficial de X-Ray. La imagen del contenedor de la API de Scorekeep tiene la API compilada con Gradle. La imagen de contenedor del contenedor frontend de Scorekeep atiende al frontend mediante el servidor proxy nginx. Este servidor dirige las solicitudes a las rutas que empiezan por /api a la API.

Para instrumentar las solicitudes de HTTP entrantes, la aplicación añade el `TracingFilter` que proporciona el SDK.

**Example src/main/java/scorekeep/WebConfig.java: filtro de servlets**  

```
import javax.servlet.Filter;
import [com.amazonaws.xray.javax.servlet.AWSXRayServletFilter](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/javax/servlet/AWSXRayServletFilter.html);
...

@Configuration
public class WebConfig {

  @Bean
  public Filter TracingFilter() {
    return new AWSXRayServletFilter("Scorekeep");
  }
...
```

Este filtro envía datos de rastreo sobre todas las solicitudes entrantes que la aplicación atiende, incluidos el URL, el método, el estado de la respuesta, la hora de inicio y la hora de finalización de la solicitud.

La aplicación también realiza llamadas posteriores a DynamoDB mediante el AWS SDK para Java. Para instrumentar estas llamadas, la aplicación simplemente toma los submódulos AWS relacionados con el SDK como dependencias y el X-Ray SDK for Java instrumenta automáticamente todos los clientes del SDK. AWS 

La aplicación utiliza `Docker` para compilar el código de fuente de la instancia con `Gradle Docker Image` y el archivo `Scorekeep API Dockerfile` para ejecutar el archivo ejecutable JAR que Gradle genera en su `ENTRYPOINT`. 

**Example Uso de Docker para compilar a través de Gradle Docker Image**  

```
docker run --rm -v /PATH/TO/SCOREKEEP_REPO/home/gradle/project -w /home/gradle/project gradle:4.3 gradle build
```

**Example ENTRYPOINT de Dockerfile**  

```
ENTRYPOINT [ "sh", "-c", "java -Dserver.port=5000 -jar scorekeep-api-1.0.0.jar" ]
```

El archivo `build.gradle` descarga todos los submódulos del SDK de Maven durante la compilación declarándolos como dependencias.

**Example build.gradle: dependencias**  

```
...
dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile('org.springframework.boot:spring-boot-starter-test')
    compile('com.amazonaws:aws-java-sdk-dynamodb')
    compile("com.amazonaws:aws-xray-recorder-sdk-core")
    compile("com.amazonaws:aws-xray-recorder-sdk-aws-sdk")
    compile("com.amazonaws:aws-xray-recorder-sdk-aws-sdk-instrumentor")
    ...
}
dependencyManagement {
    imports {
        mavenBom("com.amazonaws:aws-java-sdk-bom:1.11.67")
        mavenBom("com.amazonaws:aws-xray-recorder-sdk-bom:2.11.0")
    }
}
```

Los submódulos core, AWS SDK y AWS SDK Instrumentor son todo lo que se necesita para instrumentar automáticamente cualquier llamada posterior realizada con el SDK. AWS 

Para retransmitir datos de segmentos sin procesar a la API de X-Ray, el daemon de X-Ray debe escuchar el tráfico en el puerto UDP 2000. Para ello, la aplicación ejecuta el daemon de X-Ray en un contenedor que se implementa junto con la aplicación Scorekeep en ECS como *contenedor asociado.* Consulte el tema [Daemon de X-Ray](xray-daemon.md) para obtener más información.

**Example Definición del contenedor del daemon de X-Ray en una definición de tarea de ECS**  

```
...
Resources:
  ScorekeepTaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties: 
      ContainerDefinitions: 
      ...
      
      - Cpu: '256'
        Essential: true
        Image: amazon/aws-xray-daemon
        MemoryReservation: '128'
        Name: xray-daemon
        PortMappings: 
          - ContainerPort: '2000'
            HostPort: '2000'
            Protocol: udp
      ...
```

El SDK de X-Ray proporciona una clase denominada `AWSXRay` que proporciona una grabadora global, un `TracingHandler` que se puede utilizar para instrumentar el código. Puede configurar la grabadora global para que personalice el `AWSXRayServletFilter` que crea los segmentos para las llamadas HTTP entrantes. La muestra incluye un bloque estático en la clase `WebConfig` que configura la grabadora global con complementos y reglas de muestreo.

**Example src/main/java/scorekeep/WebConfig.java: grabadora**  

```
import com.amazonaws.xray.AWSXRay;
import com.amazonaws.xray.AWSXRayRecorderBuilder;
import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter;
import com.amazonaws.xray.plugins.ECSPlugin;
import com.amazonaws.xray.plugins.EC2Plugin;
import com.amazonaws.xray.strategy.sampling.LocalizedSamplingStrategy;
...

@Configuration
public class WebConfig {
  ...
  
  static {
    AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder.standard().withPlugin(new ECSPlugin()).withPlugin(new EC2Plugin());

    URL ruleFile = WebConfig.class.getResource("/sampling-rules.json");
    builder.withSamplingStrategy(new LocalizedSamplingStrategy(ruleFile));

    AWSXRay.setGlobalRecorder(builder.build());
    ...
    
  }
}
```

En este ejemplo se utiliza el compilador para cargar las reglas de muestreo desde un archivo denominado `sampling-rules.json`. Las reglas de muestreo determinan la velocidad a la que el SDK registra los segmentos de las solicitudes entrantes. 

**Example src/main/java/resources/sampling-rules.json**  

```
{
  "version": 1,
  "rules": [
    {
      "description": "Resource creation.",
      "service_name": "*",
      "http_method": "POST",
      "url_path": "/api/*",
      "fixed_target": 1,
      "rate": 1.0
    },
    {
      "description": "Session polling.",
      "service_name": "*",
      "http_method": "GET",
      "url_path": "/api/session/*",
      "fixed_target": 0,
      "rate": 0.05
    },
    {
      "description": "Game polling.",
      "service_name": "*",
      "http_method": "GET",
      "url_path": "/api/game/*/*",
      "fixed_target": 0,
      "rate": 0.05
    },
    {
      "description": "State polling.",
      "service_name": "*",
      "http_method": "GET",
      "url_path": "/api/state/*/*/*",
      "fixed_target": 0,
      "rate": 0.05
    }
  ],
  "default": {
    "fixed_target": 1,
    "rate": 0.1
  }
}
```

El archivo de reglas de muestreo define cuatro reglas de muestreo personalizadas y la regla predeterminada. Para cada solicitud de entrada, el SDK evalúa las reglas personalizadas en el orden en que están definidas. El SDK aplica la primera regla que coincide con el método, la ruta y el nombre de servicio de la solicitud. Para Scorekeep, la primera regla captura todas las solicitudes POST (llamadas de creación de recursos) aplicando un objetivo fijo de una solicitud por segundo y una tasa del 1,0, es decir, el 100 % de las solicitudes después de cumplir el objetivo fijo.

Las otras tres reglas personalizadas aplican una tasa del 5 % sin objetivo fijo a las lecturas de sesiones, juegos y estado (solicitudes GET). De este modo se reduce al mínimo el número de rastros de las llamadas periódicas que el front-end realiza automáticamente cada pocos segundos para asegurarse de que el contenido está actualizado. Para el resto de solicitudes, el archivo define una velocidad predeterminada de una solicitud por segundo y una tasa del 10 %.

La aplicación de ejemplo también muestra cómo usar funciones avanzadas, como la instrumentación manual de clientes SDK, la creación de subsegmentos adicionales y llamadas HTTP salientes. Para obtener más información, consulte [AWS X-Ray ejemplo de aplicación](xray-scorekeep.md).

## Opcional: política de privilegios mínimos
<a name="xray-gettingstarted-security"></a>

 Los contenedores ECS de Scorekeep acceden a los recursos mediante políticas de acceso total, como `AmazonSNSFullAccess` y `AmazonDynamoDBFullAccess`. El uso de políticas de acceso total no es la mejor práctica para las aplicaciones de producción. En el siguiente ejemplo se actualiza la política de IAM de DynamoDB para mejorar la seguridad de la aplicación. Para obtener más información sobre las mejores prácticas de seguridad en las políticas de IAM, consulte [Administración de identidad y acceso para AWS X-Ray](security-iam.md).

**Example Definición del rol de la plantilla cf-resources.yaml ECSTask**  

```
ECSTaskRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"		 	 	 
        Statement: 
          - 
            Effect: "Allow"
            Principal: 
              Service: 
                - "ecs-tasks.amazonaws.com"
            Action: 
              - "sts:AssumeRole"
      ManagedPolicyArns:
        - "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess"
        - "arn:aws:iam::aws:policy/AmazonSNSFullAccess"
        - "arn:aws:iam::aws:policy/AWSXrayFullAccess"
      RoleName: "scorekeepRole"
```

Para actualizar las políticas, primero identifique los ARN de sus recursos de DynamoDB. A continuación, utilice los ARN en una política de IAM personalizada. Por último, aplique esa política al perfil de instancia.

**Para identificar el ARN de su recurso de DynamoDB:**

1. Abra la [consola de DynamoDB](https://console.aws.amazon.com/dynamodbv2).

1. En la barra de navegación izquierda, elija **Tablas**.

1. Elija cualquiera de las opciones `scorekeep-*` para mostrar la página de detalles de la tabla.

1. En la pestaña **Descripción general**, seleccione **Información adicional** para expandir la sección y ver el nombre de recurso de Amazon (ARN). Copie este valor.

1. Inserte el ARN en la siguiente política de IAM y sustituya los valores `AWS_REGION` y `AWS_ACCOUNT_ID` por su región e ID de cuenta específicos. Esta nueva política solo permite las acciones especificadas, en lugar de la política `AmazonDynamoDBFullAccess`, que permite cualquier acción.  
**Example**  

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ScorekeepDynamoDB",
               "Effect": "Allow",
               "Action": [
                   "dynamodb:PutItem",
                   "dynamodb:UpdateItem",
                   "dynamodb:DeleteItem",
                   "dynamodb:GetItem",
                   "dynamodb:Scan",
                   "dynamodb:Query"
               ],
               "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/scorekeep-*"
           }
       ]
   }
   ```

------

   Las tablas que crea la aplicación siguen una convención de nomenclatura coherente. Puede usar el formato `scorekeep-*` para indicar todas las tablas de Scorekeep.

**Cambio de la política de IAM**

1. Abra el [rol de tarea de Scorekeep (ScorekeepRole)](https://console.aws.amazon.com/iamv2/home#/roles/details/scorekeepRole) desde la consola de IAM.

1. Elija la casilla de verificación situada junto a la política `AmazonDynamoDBFullAccess` y, a continuación, elija **Eliminar** para eliminar esta política. 

1. Seleccione **Añadir permisos**, a continuación, **Adjuntar políticas** y, por último, **Crear política**.

1. Elija la pestaña **JSON** y pegue la política que acaba de crear.

1. Elija **Siguiente: Etiquetas** en la parte inferior de la página.

1. Elija **Siguiente: Revisar** en la parte inferior de la página.

1. En **Nombre**, escriba un nombre para la política.

1. Elija **Crear política** en la parte inferior de la página. 

1. Adjunte la política que acaba de crear al rol `scorekeepRole`. Puede que la política adjunta tarde unos minutos en aplicarse.

Si ha adjuntado la nueva política al `scorekeepRole` rol, debe separarla antes de eliminar la CloudFormation pila, ya que esta política adjunta impedirá que se elimine la pila. La política se puede separar automáticamente eliminándola.

**Eliminación de su política de IAM personalizada**

1. Abra la [consola de IAM](https://console.aws.amazon.com/iam).

1. Elija **Políticas** en la barra de navegación izquierda.

1. Busque el nombre de la política personalizada que creó anteriormente en esta sección y elija el botón de opción situado junto al nombre de la política para resaltarlo.

1. Abra la lista desplegable **Acciones** y, a continuación, elija **Eliminar**.

1. Escriba el nombre de la política personalizada y, a continuación, elija **Eliminar** para confirmar la eliminación. Esto separará automáticamente la política del rol `scorekeepRole`.

## Limpieza
<a name="xray-gettingstarted-cleanup"></a>

Siga estos pasos para eliminar los recursos de la aplicación Scorekeep:

**nota**  
Si creó y adjuntó políticas personalizadas mediante la sección anterior de este tutorial, debe eliminar la política de la pila `scorekeepRole` antes de eliminar la CloudFormation pila.

------
#### [ Consola de administración de AWS ]

**Elimine la aplicación de muestra mediante el Consola de administración de AWS**

1. Abra la [consola de CloudFormation](https://console.aws.amazon.com/cloudformation/).

1. Seleccione el botón de opción situado junto al nombre de pila `scorekeep` en la lista y, a continuación, seleccione **Eliminar**.

1. La CloudFormation pila se está borrando ahora. El estado de la pila será `DELETE_IN_PROGRESS` de unos minutos hasta que se eliminen todos los recursos. El estado se actualizará periódicamente, o el usuario puede actualizar la página.

------
#### [ AWS CLI ]

**Elimine la aplicación de muestra mediante el AWS CLI**

1. Introduzca el siguiente AWS CLI comando para eliminar la CloudFormation pila:

   ```
   aws cloudformation delete-stack --stack-name scorekeep
   ```

1. Espere hasta que la CloudFormation pila deje de existir, lo que tardará unos cinco minutos. Usa el siguiente AWS CLI comando para comprobar el estado:

   ```
   aws cloudformation describe-stacks --stack-name scorekeep --query "Stacks[0].StackStatus"
   ```

------

## Siguientes pasos
<a name="xray-gettingstarted-nextsteps"></a>

Obtenga más información sobre X-Ray en el próximo capítulo: [AWS X-RayConceptos de](xray-concepts.md).

Para crear tu propia aplicación, obtén más información sobre el X-Ray SDK para Java o uno de los otros X-Ray SDKs:
+ **SDK de X-Ray para Java**: [AWS X-Ray SDK for Java](xray-sdk-java.md)
+ **SDK de X-Ray para Node.js**: [AWS SDK de X-Ray para Node.js](xray-sdk-nodejs.md)
+ **SDK de X-Ray para .NET**: [AWS X-Ray SDK para.NET](xray-sdk-dotnet.md)

Para ejecutar el daemon X-Ray de forma local o activada AWS, consulte[AWS X-Ray demonio](xray-daemon.md).

Para contribuir al ejemplo de la aplicación GitHub, consulte [eb-java-scorekeep](https://github.com/awslabs/eb-java-scorekeep/tree/xray-gettingstarted).

# Instrumentación AWS manual de los clientes del SDK
<a name="scorekeep-sdkclients"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el 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](xray-sdk-daemon-timeline.md). Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte [Migración de una instrumentación de rayos X a una instrumentación](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

El X-Ray SDK para Java instrumenta automáticamente todos los clientes del AWS SDK al [incluir el submódulo AWS SDK Instrumentor en las dependencias de compilación](xray-sdk-java.md#xray-sdk-java-dependencies).

Puede deshabilitar la instrumentación de clientes automática eliminando el submódulo Instrumentor. Esto le permite instrumentar algunos clientes manualmente a la vez que se pasan otros por alto, o utilizar diferentes controladores de rastreo en clientes distintos.

Para ilustrar la compatibilidad con la instrumentación de clientes de AWS SDK específicos, la aplicación pasa un controlador de rastreo `AmazonDynamoDBClientBuilder` como controlador de solicitudes en el modelo de usuario, juego y sesión. Esta modificación del código indica al SDK que instrumente todas las llamadas a DynamoDB con esos clientes.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/SessionModel.java](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/SessionModel.java)— Instrumentación manual del cliente del SDK AWS**  

```
import [com.amazonaws.xray.AWSXRay](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRay.html);
import [com.amazonaws.xray.handlers.TracingHandler](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/handlers/TracingHandler.html);

public class SessionModel {
  private AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
        .withRegion(Constants.REGION)
        .withRequestHandlers(new TracingHandler(AWSXRay.getGlobalRecorder()))
        .build();
  private DynamoDBMapper mapper = new DynamoDBMapper(client);
```

Si eliminas el submódulo AWS SDK Instrumentor de las dependencias del proyecto, solo los clientes AWS SDK instrumentados manualmente aparecen en el mapa de seguimiento.

# Creación de subsegmentos adicionales
<a name="scorekeep-subsegments"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el 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](xray-sdk-daemon-timeline.md). Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte [Migración de una instrumentación de rayos X a una instrumentación](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

En la clase de modelo del usuario, la aplicación crea de forma manual subsegmentos para agrupar todas las llamadas posteriores que se realizaron dentro de la función `saveUser` y agrega metadatos.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/UserModel.java](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/UserModel.java): subsegmentos personalizados**  

```
import [com.amazonaws.xray.AWSXRay](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRay.html);
import [com.amazonaws.xray.entities.Subsegment](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Subsegment.html);
...
    public void saveUser(User user) {
    // Wrap in subsegment
    Subsegment subsegment = AWSXRay.beginSubsegment("## UserModel.saveUser");
    try {
      mapper.save(user);
    } catch (Exception e) {
      subsegment.addException(e);
      throw e;
    } finally {
      AWSXRay.endSubsegment();
    }
  }
```

# Registra las anotaciones, los metadatos y el usuario IDs
<a name="scorekeep-annotations"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el 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](xray-sdk-daemon-timeline.md). Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte [Migración de una instrumentación de rayos X a una instrumentación](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

En la clase de modelo de juego, la aplicación registra objetos `Game` en un bloque de [metadatos](xray-sdk-java-segment.md#xray-sdk-java-segment-metadata) cada vez que se guarda un juego en DynamoDB. [Por separado, la aplicación graba el juego IDs en [anotaciones](xray-sdk-java-segment.md#xray-sdk-java-segment-annotations) para usarlo con las expresiones de filtro.](xray-console-filters.md)

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/GameModel.java](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/GameModel.java): anotaciones y metadatos**  

```
import [com.amazonaws.xray.AWSXRay](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRay.html);
import [com.amazonaws.xray.entities.Segment](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Segment.html);
import [com.amazonaws.xray.entities.Subsegment](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Subsegment.html);
...
  public void saveGame(Game game) throws SessionNotFoundException {
    // wrap in subsegment
    Subsegment subsegment = AWSXRay.beginSubsegment("## GameModel.saveGame");
    try {
      // check session
      String sessionId = game.getSession();
      if (sessionModel.loadSession(sessionId) == null ) {
        throw new SessionNotFoundException(sessionId);
      }
      Segment segment = AWSXRay.getCurrentSegment();
      subsegment.putMetadata("resources", "game", game);
      segment.putAnnotation("gameid", game.getId());
      mapper.save(game);
    } catch (Exception e) {
      subsegment.addException(e);
      throw e;
    } finally {
      AWSXRay.endSubsegment();
    }
  }
```

En el controlador de movimiento, la aplicación graba al [usuario IDs](xray-sdk-java-segment.md#xray-sdk-java-segment-userid) con`setUser`. IDsLos usuarios se registran en un campo separado en los segmentos y se indexan para usarlos en la búsqueda.

**Example [src/main/java/scorekeep/MoveController.java: ID](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/MoveController.java) de usuario**  

```
import [com.amazonaws.xray.AWSXRay](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRay.html);
...
  @RequestMapping(value="/{userId}", method=RequestMethod.POST)
  public Move newMove(@PathVariable String sessionId, @PathVariable String gameId, @PathVariable String userId, @RequestBody String move) throws SessionNotFoundException, GameNotFoundException, StateNotFoundException, RulesException {
    AWSXRay.getCurrentSegment().setUser(userId);
    return moveFactory.newMove(sessionId, gameId, userId, move);
  }
```

# Instrumentación de llamadas a HTTP salientes
<a name="scorekeep-httpclient"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el 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](xray-sdk-daemon-timeline.md). Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte [Migración de una instrumentación de rayos X a una instrumentación](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

La clase del generador del usuario muestra cómo la aplicación usa el SDK de X-Ray para la versión de Java de `HTTPClientBuilder` con el fin de instrumentar las llamadas HTTP salientes.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/UserFactory.java](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/UserFactory.java)— instrumentación HTTPClient**  

```
import [com.amazonaws.xray.proxies.apache.http.HttpClientBuilder](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/proxies/apache/http/HttpClientBuilder.html);

  public String randomName() throws IOException {
    CloseableHttpClient httpclient = HttpClientBuilder.create().build();
    HttpGet httpGet = new HttpGet("http://uinames.com/api/");
    CloseableHttpResponse response = httpclient.execute(httpGet);
    try {
      HttpEntity entity = response.getEntity();
      InputStream inputStream = entity.getContent();
      ObjectMapper mapper = new ObjectMapper();
      Map<String, String> jsonMap = mapper.readValue(inputStream, Map.class);
      String name = jsonMap.get("name");
      EntityUtils.consume(entity);
      return name;
    } finally {
      response.close();
    }
  }
```

Si actualmente utiliza `org.apache.http.impl.client.HttpClientBuilder`, puede simplemente intercambiar la instrucción de importación para esa clase por una para `com.amazonaws.xray.proxies.apache.http.HttpClientBuilder`.

# Instrumentación de llamadas a una base de datos PostgreSQL
<a name="scorekeep-postgresql"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el 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](xray-sdk-daemon-timeline.md). Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte [Migración de una instrumentación de rayos X a una instrumentación](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

El archivo `application-pgsql.properties` añade el interceptor de rastreo PostgreSQL de X-Ray al origen de datos creado en [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/RdsWebConfig.java](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/RdsWebConfig.java).

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/resources/application-pgsql.properties](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/resources/application-pgsql.properties): instrumentación de una base de datos PostgreSQL**  

```
spring.datasource.continue-on-error=true
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.jdbc-interceptors=com.amazonaws.xray.sql.postgres.TracingInterceptor
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL94Dialect
```

**nota**  
Consulte [Configuración de bases de datos con Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.db.html) en la *Guía para desarrolladores de AWS Elastic Beanstalk * para obtener más información acerca de cómo añadir una base de datos de PostgreSQL al entorno de aplicaciones.

La página de demostración de X-Ray en la ramificación `xray` incluye una demostración que utiliza el origen de datos instrumentado para generar rastros que muestran información sobre las consultas SQL que se generan. Vaya a la ruta `/#/xray` de la aplicación en ejecución o elija **Powered by AWS X-Ray** en la barra de navegación para ver la página de demostración.

![\[AWS X-Ray integration demo page showing game session tracing and SQL query tracing options.\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-demo.png)


Elija **Trace SQL queries (Rastrear consultas SQL)** para simular las sesiones de juego y almacenar los resultados en la base de datos asociada. A continuación, selecciona **Ver trazas en AWS X-Ray** para ver una lista filtrada de las trazas que llegan a la `/api/history` ruta de la API.

Elija uno de los rastros de la lista para ver la escala de tiempo, incluida la consulta SQL.

![\[Timeline view of a trace showing method, response, duration, and age for a GET request.\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-trace-sql.png)


# Funciones de instrumentación AWS Lambda
<a name="scorekeep-lambda"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el 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](xray-sdk-daemon-timeline.md). Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte [Migración de una instrumentación de rayos X a una instrumentación](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

Scorekeep utiliza dos funciones. AWS Lambda La primera es una función de Node.js de la ramificación `lambda` que genera nombres aleatorios para nuevos usuarios. Cuando un usuario crea una sesión sin introducir ningún nombre, la aplicación llama a una función denominada `random-name` con el AWS SDK para Java. El SDK de X-Ray para Java registra la información sobre la llamada a Lambda en un subsegmento, como cualquier otra llamada realizada con un cliente de SDK AWS instrumentado.

**nota**  
La ejecución de la función de Lambda `random-name` requiere la creación de recursos adicionales fuera del entorno de Elastic Beanstalk. Consulte el archivo readme para obtener más información e instrucciones: [AWS Lambda Integration](https://github.com/awslabs/eb-java-scorekeep/tree/xray/README.md#aws-lambda-integration).

La segunda función, `scorekeep-worker`, es una función de Python que se ejecuta de forma independiente de la API de Scorekeep. Cuando un juego termina, la API escribe el ID de sesión y el ID de juego en una cola de SQS. La función de proceso de trabajo lee los elementos de la cola y llama a la API de Scorekeep con el fin de construir registros completos de cada sesión de juego para su almacenamiento en Amazon S3.

Scorekeep incluye CloudFormation plantillas y scripts para crear ambas funciones. Dado que necesita agrupar el SDK de X-Ray con el código de la función, las plantillas crean las funciones sin ningún tipo de código. Al implementar Scorekeep, un archivo de configuración incluido en la carpeta `.ebextensions` crea un paquete de origen que incluye el SDK y actualiza el código de la función y la configuración con el AWS Command Line Interface.

**Topics**
+ [Nombre aleatorio](#scorekeep-lambda-randomname)
+ [Entorno de trabajo](#scorekeep-lambda-worker)

## Nombre aleatorio
<a name="scorekeep-lambda-randomname"></a>

Scorekeep llama a la función de nombre aleatorio cuando un usuario comienza una sesión de juego sin iniciar sesión o especificar un nombre de usuario. Cuando Lambda procesa la llamada a `random-name`, lee el [encabezado de rastreo](xray-concepts.md#xray-concepts-tracingheader), que contiene el ID de rastro y la decisión de muestreo escrita por el SDK de X-Ray para Java.

Para cada solicitud muestreada, Lambda ejecuta el daemon de X-Ray y escribe dos segmentos. El primer segmento registra información sobre la llamada a Lambda que invoca la función. Este segmento contiene la misma información que el subsegmento registrado por Scorekeep, pero desde el punto de vista de Lambda. El segundo segmento representa el trabajo que hace la función.

Lambda pasa el segmento de la función al SDK de X-Ray a través del contexto de la función. Cuando instrumente una función de Lambda, no utilice el SDK con el fin de [crear un segmento para las solicitudes entrantes](xray-sdk-nodejs-middleware.md). Lambda proporciona el segmento y usted debe utilizar el SDK para instrumentar clientes y escribir subsegmentos.

![\[Mapa de rastros que muestra cómo Scorekeep llama a una función de Lambda para obtener nombres aleatorios para los usuarios nuevos\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-servicemap-lambda-node.png)


La función `random-name` se implementa en Node.js. Utiliza el SDK de Node.js para JavaScript enviar notificaciones con Amazon SNS y el SDK de X-Ray para Node.js para instrumentar el cliente del AWS SDK. Para escribir anotaciones, la función crea un subsegmento personalizado con `AWSXRay.captureFunc` y escribe anotaciones en la función instrumentada. En Lambda, no puede escribir anotaciones directamente en el segmento de la función, únicamente en un subsegmento que cree.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/function/index.js](https://github.com/awslabs/eb-java-scorekeep/tree/xray/function/index.js): función Lambda random-name**  

```
var AWSXRay = require('aws-xray-sdk-core');
var AWS = AWSXRay.captureAWS(require('aws-sdk'));

AWS.config.update({region: process.env.AWS_REGION});
var Chance = require('chance');

var myFunction = function(event, context, callback) {
  var sns = new AWS.SNS();
  var chance = new Chance();
  var userid = event.userid;
  var name = chance.first();

  AWSXRay.captureFunc('annotations', function(subsegment){
    subsegment.addAnnotation('Name', name);
    subsegment.addAnnotation('UserID', event.userid);
  });

  // Notify
  var params = {
    Message: 'Created randon name "' + name + '"" for user "' + userid + '".',
    Subject: 'New user: ' + name,
    TopicArn: process.env.TOPIC_ARN
  };
  sns.publish(params, function(err, data) {
    if (err) {
      console.log(err, err.stack);
      callback(err);
    }
    else {
      console.log(data);
      callback(null, {"name": name});
    }
  });
};

exports.handler = myFunction;
```

Esta función se crea automáticamente al implementar la aplicación de ejemplo en Elastic Beanstalk. La ramificación `xray` incluye un script para crear una función de Lambda en blanco. Los archivos de configuración de la `.ebextensions` carpeta crean el paquete de funciones `npm install` durante la implementación y, a continuación, actualizan la función Lambda con la CLI AWS .

## Entorno de trabajo
<a name="scorekeep-lambda-worker"></a>

La función de trabajo instrumentada se proporciona en su propia ramificación, `xray-worker`, ya que no se puede ejecutar a menos que antes cree la función de trabajo y los recursos relacionados. Consulte [el archivo readme de la ramificación](https://github.com/awslabs/eb-java-scorekeep/tree/xray-worker/README.md) para obtener instrucciones.

La función se activa mediante un paquete de CloudWatch eventos de Amazon Events cada 5 minutos. Cuando se ejecuta, la función extrae un elemento de una cola de Amazon SQS que administra Scorekeep. Cada mensaje contiene información sobre un juego terminado.

El trabajo extrae los documentos y el registro del juego de otras tablas a las que hace referencia el registro de juego. Por ejemplo, el registro del juego en DynamoDB incluye una lista de los movimientos que se han realizado durante el juego. La lista no contiene los movimientos propiamente dichos, sino IDs los movimientos que están guardados en una tabla aparte.

Las sesiones y los estados también se almacenan como referencias. Esto impide que las entradas de la tabla de juego sean demasiado grandes, pero requiere llamadas adicionales para obtener toda la información sobre el juego. El proceso de trabajo anula las referencias a todas estas entradas y construye un registro completo del juego como un único documento en Amazon S3. Cuando desee realizar el análisis de los datos, podrá ejecutar consultas en él directamente en Amazon S3 con Amazon Athena sin ejecutar migraciones de datos que realizan muchas lecturas para obtener los datos de DynamoDB.

![\[Mapa de rastros que muestra cómo la función de proceso de trabajo de Scorekeep utiliza Amazon SQS, Amazon S3 y la API de Scorekeep.\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-servicemap-lambdaworker-node.png)


La función de trabajo tiene habilitado el rastreo activo en su configuración en AWS Lambda. A diferencia de la función de nombres aleatorios, el trabajador no recibe una solicitud de una aplicación instrumentada, por lo que AWS Lambda no recibe un encabezado de rastreo. Con el rastreo activo, Lambda crea el ID de rastro y toma decisiones de muestreo.

El X-Ray SDK para Python está solo unas líneas en la parte superior de la función que importa el SDK y ejecuta su `patch_all` función para parchear el AWS SDK para Python (Boto) y HTTclients que utiliza para llamar a Amazon SQS y Amazon S3. Cuando el trabajo llama a la API de Scorekeep, el SDK añade el [encabezado de rastreo](xray-concepts.md#xray-concepts-tracingheader) a la solicitud para rastrear llamadas a través de la API.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray-worker/_lambda/scorekeep-worker/scorekeep-worker.py](https://github.com/awslabs/eb-java-scorekeep/tree/xray-worker/_lambda/scorekeep-worker/scorekeep-worker.py): función Lambda del proceso de trabajo**  

```
import os
import boto3
import json
import requests
import time
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all

patch_all()
queue_url = os.environ['WORKER_QUEUE']

def lambda_handler(event, context):
    # Create SQS client
    sqs = boto3.client('sqs')
    s3client = boto3.client('s3')

    # Receive message from SQS queue
    response = sqs.receive_message(
        QueueUrl=queue_url,
        AttributeNames=[
            'SentTimestamp'
        ],
        MaxNumberOfMessages=1,
        MessageAttributeNames=[
            'All'
        ],
        VisibilityTimeout=0,
        WaitTimeSeconds=0
    )
   ...
```

# Instrumentación de código de inicio
<a name="scorekeep-startup"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el 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](xray-sdk-daemon-timeline.md). Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte [Migración de una instrumentación de rayos X a una instrumentación](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

El SDK de X-Ray para Java crea automáticamente segmentos para 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](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/exceptions/SegmentNotFoundException.html)

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.

![\[Diagram showing client requests to Scorekeeper-init, which connects to SQL database and SNS.\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-servicemap-init.png)


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

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/WebConfig.java#L49](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/WebConfig.java#L49)— Cliente AWS SDK instrumentado en el 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.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/RdsWebConfig.java#L83](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/RdsWebConfig.java#L83): cliente de base de datos SQL instrumentado en 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.

# Instrumentación de scripts
<a name="scorekeep-scripts"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el 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](xray-sdk-daemon-timeline.md). Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte [Migración de una instrumentación de rayos X a una instrumentación](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

También puede instrumentar código que no forme parte de su aplicación. Cuando el daemon de X-Ray se está ejecutando, transmitirá los segmentos que reciba a X-Ray, incluso si no los ha generado el SDK de X-Ray. Scorekeep utiliza sus propios scripts para instrumentar la compilación que compila la aplicación durante la implementación.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/build.sh](https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/build.sh): script de compilación instrumentado**  

```
SEGMENT=$(python bin/xray_start.py)
gradle build --quiet --stacktrace &> /var/log/gradle.log; GRADLE_RETURN=$?
if (( GRADLE_RETURN != 0 )); then 
  echo "Gradle failed with exit status $GRADLE_RETURN" >&2
  python bin/xray_error.py "$SEGMENT" "$(cat /var/log/gradle.log)"
  exit 1
fi
python bin/xray_success.py "$SEGMENT"
```

[https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/xray_start.py](https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/xray_start.py), [https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/xray_error.py](https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/xray_error.py) y [https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/xray_success.py](https://github.com/awslabs/eb-java-scorekeep/tree/xray/bin/xray_success.py) son scripts de Python sencillos que construyen objetos de segmento, los convierten a documentos JSON y los envían al demonio sobre UDP. Si la compilación Gradle falla, puede encontrar el mensaje de error haciendo clic en el nodo **scorekeep-build** en el mapa de rastros de la consola de X-Ray.

![\[Diagram showing client connection to Scorekeep-build with average time of 14.6s and 0.07/min.\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-servicemap-builderror.png)


![\[Timeline view showing Scorekeep-build process with 14.6 second duration and warning icon.\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-timeline-builderror.png)


![\[Error message showing build failure due to missing ElasticBeanstalkPlugin symbol in RdsWebConfig class.\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-exception-builderror.png)


# Instrumentación de un cliente de aplicación web
<a name="scorekeep-client"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el 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](xray-sdk-daemon-timeline.md). Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte [Migración de una instrumentación de rayos X a una instrumentación](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

En la ramificación [https://github.com/awslabs/eb-java-scorekeep/tree/xray-cognito](https://github.com/awslabs/eb-java-scorekeep/tree/xray-cognito), Scorekeep utiliza Amazon Cognito para permitir que los usuarios creen una cuenta e inicien sesión con ella para recuperar su información de usuario desde un grupo de usuarios de Amazon Cognito. Cuando un usuario inicia sesión, Scorekeep utiliza un grupo de identidades de Amazon Cognito para obtener credenciales AWS temporales para usarlas con. AWS SDK para JavaScript

El grupo de identidades está configurado para permitir a los usuarios que han iniciado sesión escribir datos de rastreos en AWS X-Ray. La aplicación web utiliza estas credenciales para registrar el ID del usuario que ha iniciado sesión, la ruta del navegador y la vista del cliente de llamadas a la API Scorekeep.

La mayor parte del trabajo se realiza en una clase de servicio denominada `xray`. Este clase de servicio ofrece métodos para generar los identificadores requeridos, crear segmentos en curso, finalizar segmentos y enviar documentos de segmento a la API de X-Ray.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray-cognito/public/app/xray.js](https://github.com/awslabs/eb-java-scorekeep/tree/xray-cognito/public/app/xray.js): registrar y cargar segmentos**  

```
...
  service.beginSegment = function() {
    var segment = {};
    var traceId = '1-' + service.getHexTime() + '-' + service.getHexId(24);

    var id = service.getHexId(16);
    var startTime = service.getEpochTime();

    segment.trace_id = traceId;
    segment.id = id;
    segment.start_time = startTime;
    segment.name = 'Scorekeep-client';
    segment.in_progress = true;
    segment.user =  sessionStorage['userid'];
    segment.http = {
      request: {
        url: window.location.href
      }
    };

    var documents = [];
    documents[0] = JSON.stringify(segment);
    service.putDocuments(documents);
    return segment;
  }

  service.endSegment = function(segment) {
    var endTime = service.getEpochTime();
    segment.end_time = endTime;
    segment.in_progress = false;
    var documents = [];
    documents[0] = JSON.stringify(segment);
    service.putDocuments(documents);
  }

  service.putDocuments = function(documents) {
    var xray = new AWS.XRay();
    var params = {
      TraceSegmentDocuments: documents
    };
    xray.putTraceSegments(params, function(err, data) {
      if (err) {
        console.log(err, err.stack);
      } else {
        console.log(data);
      }
    })
  }
```

Estos métodos se llaman en el encabezado y funciones `transformResponse` en los servicios de recursos que la aplicación web utiliza para llamar a la API de Scorekeep. Para incluir el segmento de cliente en el mismo rastreo que el segmento que genera la API, la aplicación web debe incluir el ID de rastro y el ID de segmento en un [encabezado de seguimiento](xray-concepts.md#xray-concepts-tracingheader) (`X-Amzn-Trace-Id`) que el SDK de X-Ray puede leer. Cuando la aplicación Java instrumentada recibe una solicitud con este encabezado, el SDK de X-Ray para Java utiliza el mismo ID de rastro y hace que el segmento del cliente de la aplicación web sea el principal de su segmento. 

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray-cognito/public/app/services.js](https://github.com/awslabs/eb-java-scorekeep/tree/xray-cognito/public/app/services.js): registro de segmentos para llamadas de recursos de Angular y escritura de encabezados de rastreo**  

```
var module = angular.module('scorekeep');
module.factory('SessionService', function($resource, api, XRay) {
  return $resource(api + 'session/:id', { id: '@_id' }, {
    segment: {},
    get: {
      method: 'GET',
      headers: {
        'X-Amzn-Trace-Id': function(config) {
          segment = XRay.beginSegment();
          return XRay.getTraceHeader(segment);
        }
      },
      transformResponse: function(data) {
        XRay.endSegment(segment);
        return angular.fromJson(data);
      },
    },
...
```

El mapa de rastros resultante incluye un nodo para el cliente de la aplicación web.

![\[\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-servicemap-client.png)


Los rastreos que incluyen segmentos desde la aplicación web muestran la dirección URL que el usuario ve en el navegador (rutas que empiezan por `/#/`). Sin la instrumentación de cliente, solo obtiene la dirección URL del recurso de la API que la aplicación web llama (rutas que empiezan por `/api/`).

![\[\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-traces-client.png)


# Uso de clientes instrumentados en subprocesos de trabajo
<a name="scorekeep-workerthreads"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el 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](xray-sdk-daemon-timeline.md). Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte [Migración de una instrumentación de rayos X a una instrumentación](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

Scorekeep utiliza un subproceso de trabajo para publicar una notificación en Amazon SNS cuando un usuario gana un juego. La publicación de la notificación tarda más tiempo que el resto de las operaciones de solicitud combinadas y no afecta al cliente o al usuario. Por lo tanto, la realización de la tarea de forma asíncrona es una buena manera de mejorar el tiempo de respuesta.

Sin embargo, el SDK de X-Ray para Java no sabe qué segmento estaba activo cuando se creó el subproceso. Como resultado, cuando intentas utilizar el AWS SDK para Java cliente instrumentado dentro del hilo, se lanza un `SegmentNotFoundException` hilo y se bloquea el hilo.

**Example Web-1.error.log**  

```
Exception in thread "Thread-2" com.amazonaws.xray.exceptions.SegmentNotFoundException: Failed to begin subsegment named 'AmazonSNS': segment cannot be found.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
...
```

Para solucionar este problema, la aplicación utiliza `GetTraceEntity` para obtener una referencia al segmento en el subproceso principal y `Entity.run()` para ejecutar código del subproceso de trabajo con acceso al contexto del segmento.

**Example [https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/MoveFactory.java#L70](https://github.com/awslabs/eb-java-scorekeep/tree/xray/src/main/java/scorekeep/MoveFactory.java#L70): transferencia de contexto del rastro a un subproceso de trabajo**  

```
import [com.amazonaws.xray.AWSXRay](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRay.html);
import [com.amazonaws.xray.AWSXRayRecorder](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRayRecorder.html);
import [com.amazonaws.xray.entities.Entity](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Entity.html);
import [com.amazonaws.xray.entities.Segment](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Segment.html);
import [com.amazonaws.xray.entities.Subsegment](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Subsegment.html);
...
      Entity segment = recorder.getTraceEntity();
      Thread comm = new Thread() {
        public void run() {
         segment.run(() -> {
            Subsegment subsegment = AWSXRay.beginSubsegment("## Send notification");
            Sns.sendNotification("Scorekeep game completed", "Winner: " + userId);
            AWSXRay.endSubsegment();
          }
        }
```

Dado que la solicitud ya se ha resuelto antes de la llamada a Amazon SNS, la aplicación crea un subsegmento independiente para el subproceso. Esto impide que el SDK de X-Ray cierre el segmento antes de que registre la respuesta desde Amazon SNS. Si no hay ningún subsegmento abierto cuando Scorekeep resuelve la solicitud, se podría perder la respuesta de Amazon SNS.

![\[\]](http://docs.aws.amazon.com/es_es/xray/latest/devguide/images/scorekeep-workerthread.png)


Consulte [Transmisión de contexto de segmento entre subprocesos en una aplicación multiproceso](xray-sdk-java-multithreading.md) para obtener más información acerca de los subprocesos múltiples.