

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 SDK de X-Ray para Node.js
<a name="xray-sdk-nodejs"></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 Node.js es una biblioteca para las aplicaciones web de Express y funciones de Lambda de Node.js que proporciona clases y métodos para generar y enviar datos de rastreo al daemon de X-Ray. Los datos de rastreo incluyen información sobre las solicitudes HTTP entrantes atendidas por la aplicación y las llamadas que la aplicación realiza a los servicios descendentes mediante el SDK o los AWS clientes HTTP.

**nota**  
El SDK de X-Ray para Node.js es un proyecto de código abierto compatible con las versiones 14.x y posteriores de Node.js. Puedes seguir el proyecto y enviar las incidencias y solicitudes de cambios en GitHub: [github. com/aws/aws](https://github.com/aws/aws-xray-sdk-node)- xray-sdk-node

Si usa Express, empiece [agregando el SDK como middleware](xray-sdk-nodejs-middleware.md) en el servidor de aplicaciones para rastrear solicitudes entrantes. El middleware crea un [segmento](xray-concepts.md#xray-concepts-segments) para cada solicitud rastreada y lo completa cuando se envía la respuesta. Mientras el segmento está abierto, puede utilizar los métodos del cliente del SDK para añadir información al segmento y crear subsegmentos para rastrear llamadas posteriores. El SDK también registra automáticamente las excepciones que produce su aplicación mientras el segmento está abierto.

En el caso de las funciones de Lambda llamadas por una aplicación o un servicio instrumentados, Lambda lee el [encabezado de rastreo](xray-concepts.md#xray-concepts-tracingheader) y rastrea automáticamente las solicitudes muestreadas. Para otras funciones, puede [configurar Lambda](xray-services-lambda.md) con el fin de muestrear y rastrear las solicitudes entrantes. En cualquier caso, Lambda crea el segmento y se lo proporciona al SDK de X-Ray.

**nota**  
En Lambda, el SDK de X-Ray es opcional. Si no lo usa en su función, el mapa de servicio seguirá incluyendo un nodo para el servicio de Lambda y uno para cada función de Lambda. Al añadir el SDK, puede instrumentar el código de función para añadir subsegmentos al segmento de función registrado por Lambda. Para obtener más información, consulte [AWS Lambda y AWS X-Ray](xray-services-lambda.md).

A continuación, utilice el SDK de X-Ray para Node.js a fin de [instrumentar su AWS SDK para JavaScript los clientes de Node.js](xray-sdk-nodejs-awssdkclients.md). Cada vez que realizas una llamada a un canal intermedio Servicio de AWS o a un recurso con un cliente instrumentado, el SDK registra la información sobre la llamada en un subsegmento. Servicios de AWS y los recursos a los que accedes desde los servicios aparecen como nodos descendentes en el mapa de rastreo para ayudarte a identificar los errores y los problemas de limitación en las conexiones individuales.

El SDK de X-Ray para Node.js también proporciona instrumentación para llamadas posteriores a consultas HTTP web APIs y SQL. [Incluya su cliente HTTP en el método de captura del SDK](xray-sdk-nodejs-httpclients.md) para registrar información sobre las llamadas HTTP salientes. Para los clientes SQL, [utilice el método de captura para el tipo de base de datos](xray-sdk-nodejs-sqlclients.md).

El middleware aplica reglas de muestreo a las solicitudes entrantes para determinar qué solicitudes se deben rastrear. Puede [configurar el SDK de X-Ray para Node.js para](xray-sdk-nodejs-configuration.md) ajustar el comportamiento del muestreo o para registrar información sobre los recursos AWS informáticos en los que se ejecuta la aplicación.

Registre información adicional acerca de las solicitudes y el trabajo que la aplicación realiza en [anotaciones y metadatos](xray-sdk-nodejs-segment.md). Las anotaciones son pares sencillos de clave-valor que se indexan para su uso con [expresiones de filtro](xray-console-filters.md) para poder buscar rastros que contengan datos específicos. Las entradas de metadatos son menos restrictivas y pueden registrar objetos y matrices completos, es decir, todo lo que se pueda serializar en JSON.

**Anotaciones y metadatos**  
Las anotaciones y los metadatos son texto arbitrario que se agrega a los segmentos con el SDK de X-Ray. Las anotaciones se indexan para su uso con expresiones de filtro. Los metadatos no se indexan pero se pueden ver en el segmento sin procesar con la consola o la API de X-Ray. Cualquier persona a la que conceda acceso de lectura a X-Ray puede ver estos datos.

Cuando tenga muchos clientes instrumentados en su código, un único segmento de solicitud puede contener un gran número de subsegmentos, uno para cada llamada realizada con un cliente instrumentado. Puede organizar y agrupar los subsegmentos incluyendo las llamadas del cliente en [subsegmentos personalizados](xray-sdk-nodejs-subsegments.md). Puede crear un subsegmento personalizado para una función completa o para cualquier sección de código, y registrar los metadatos y las anotaciones en el subsegmento en lugar de escribirlo todo en el segmento principal.

Para tener acceso a los documentos de referencia sobre las clases y los métodos del SDK, consulte la [Referencia de la API del SDK de AWS X-Ray para Node.js](https://docs.aws.amazon.com//xray-sdk-for-nodejs/latest/reference).

## Requisitos
<a name="xray-sdk-nodejs-requirements"></a>

El SDK de X-Ray para Node.js requiere Node.js y las siguientes bibliotecas:
+ `atomic-batcher`: 1.0.2
+ `cls-hooked`: 4.2.2
+ `pkginfo`: 0.4.0
+ `semver`: 5.3.0

El SDK obtiene estas bibliotecas cuando se instala con NPM.

Para rastrear los clientes del AWS SDK, el SDK de X-Ray para Node.js requiere una versión mínima del AWS SDK para JavaScript Node.js.
+ `aws-sdk`: 2.7.15

## Administración de dependencias
<a name="xray-sdk-nodejs-dependencies"></a>

El SDK de X-Ray para Node.js está disponible en NPM.
+ **Paquete**: [https://www.npmjs.com/package/aws-xray-sdk](https://www.npmjs.com/package/aws-xray-sdk)

Para el desarrollo local, instale el SDK en el directorio del proyecto con npm.

```
~/nodejs-xray$ npm install aws-xray-sdk
aws-xray-sdk@3.3.3
  ├─┬ aws-xray-sdk-core@3.3.3
  │ ├── @aws-sdk/service-error-classification@3.15.0
  │ ├── @aws-sdk/types@3.15.0
  │ ├─┬ @types/cls-hooked@4.3.3
  │ │ └── @types/node@15.3.0
  │ ├── atomic-batcher@1.0.2
  │ ├─┬ cls-hooked@4.2.2
  │ │ ├─┬ async-hook-jl@1.7.6
  │ │ │ └── stack-chain@1.3.7
  │ │ └─┬ emitter-listener@1.1.2
  │ │   └── shimmer@1.2.1
  │ └── semver@5.7.1
  ├── aws-xray-sdk-express@3.3.3
  ├── aws-xray-sdk-mysql@3.3.3
  └── aws-xray-sdk-postgres@3.3.3
```

Use la opción `--save` para guardar el SDK como una dependencia en el archivo `package.json` de la aplicación.

```
~/nodejs-xray$ npm install aws-xray-sdk --save
aws-xray-sdk@3.3.3
```

 Si la aplicación tiene dependencias cuyas versiones entran en conflicto con las del SDK de X-Ray, se instalarán ambas versiones para garantizar la compatibilidad. Para obtener más detalles, consulte la [documentación oficial de NPM para la resolución de dependencias](http://npm.github.io/how-npm-works-docs/npm3/how-npm3-works.html). 

## Ejemplos de Node.js
<a name="xray-sdk-nodejs-sample"></a>

Usa el AWS X-Ray SDK de Node.js para end-to-end ver las solicitudes a medida que se desplazan por tus aplicaciones de Node.js. 
+ [La aplicación de ejemplo Node.js](https://github.com/aws-samples/aws-xray-sdk-node-sample) está activada GitHub.

# Configuración del SDK de X-Ray para Node.js
<a name="xray-sdk-nodejs-configuration"></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 

Puede configurar el SDK de X-Ray para Node.js el uso de complementos a fin de incluir información sobre el servicio que sus aplicaciones ejecutan, modificar la conducta predeterminada de muestreo o agregar reglas de muestreo que se aplican a las solicitudes dirigidas a rutas específicas.

**Topics**
+ [Complementos del servicio](#xray-sdk-nodejs-configuration-plugins)
+ [Reglas de muestreo](#xray-sdk-nodejs-configuration-sampling)
+ [Registro](#xray-sdk-nodejs-configuration-logging)
+ [Dirección del daemon de X-Ray](#xray-sdk-nodejs-configuration-daemon)
+ [Variables de entorno](#xray-sdk-nodejs-configuration-envvars)

## Complementos del servicio
<a name="xray-sdk-nodejs-configuration-plugins"></a>

Utilice `plugins` para registrar información sobre el servicio que aloja la aplicación.

**Plugins**
+ Amazon EC2 : `EC2Plugin` agrega el ID de la instancia, la zona de disponibilidad y el grupo de CloudWatch registros.
+ Elastic Beanstalk: `ElasticBeanstalkPlugin` añade el nombre de entorno, la etiqueta de versión y el ID de implementación.
+ Amazon ECS: `ECSPlugin` agrega el ID de contenedor.

Para utilizar un complemento, configure el cliente del SDK de X-Ray para Node.js mediante el método `config`.

**Example app.js: complementos**  

```
var AWSXRay = require('aws-xray-sdk');
AWSXRay.config([AWSXRay.plugins.EC2Plugin,AWSXRay.plugins.ElasticBeanstalkPlugin]);
```

El SDK también usa la configuración del complemento para establecer el campo `origin` en el segmento. Esto indica el tipo de AWS recurso que ejecuta la aplicación. Cuando utilizas varios complementos, el SDK utiliza el siguiente orden de resolución para determinar el origen: ElasticBeanstalk > EKS > ECS > EC2.

## Reglas de muestreo
<a name="xray-sdk-nodejs-configuration-sampling"></a>

El SDK utiliza las reglas de muestreo que define el usuario en la consola de X-Ray para determinar qué solicitudes registrar. La regla predeterminada rastrea la primera solicitud cada segundo y el 5 % de las solicitudes adicionales de todos los servicios que envían rastros a X-Ray. [Cree reglas adicionales en la consola de X-Ray](xray-console-sampling.md) para personalizar la cantidad de datos registrados para cada una de sus aplicaciones.

El SDK aplica las reglas personalizadas en el orden en que se definen. Si una solicitud coincide con varias reglas personalizadas, el SDK solo aplica la primera regla.

**nota**  
Si el SDK no puede comunicarse con X-Ray para obtener las reglas de muestreo, vuelve a una regla local predeterminada de la primera solicitud cada segundo y del 5 % de las solicitudes adicionales por host. Esto puede ocurrir si el host no tiene permiso para llamar al muestreo APIs o no puede conectarse al daemon X-Ray, que actúa como proxy TCP para las llamadas a la API realizadas por el SDK.

También puede configurar el SDK para que cargue las reglas de muestreo desde un documento JSON. El SDK puede usar las reglas locales como respaldo para los casos en que el muestreo de X-Ray no esté disponible, o puede usar las reglas locales exclusivamente.

**Example sampling-rules.json**  

```
{
  "version": 2,
  "rules": [
    {
      "description": "Player moves.",
      "host": "*",
      "http_method": "*",
      "url_path": "/api/move/*",
      "fixed_target": 0,
      "rate": 0.05
    }
  ],
  "default": {
    "fixed_target": 1,
    "rate": 0.1
  }
}
```

En este ejemplo se define una regla personalizada y una regla predeterminada. La regla personalizada aplica un porcentaje de muestreo del 5 % sin un número mínimo de solicitudes de rastreo para las rutas incluidas bajo `/api/move/`. La regla predeterminada rastrea la primera solicitud cada segundo y el 10 % de las solicitudes adicionales.

La desventaja de definir las reglas localmente es que el objetivo establecido lo aplica cada instancia de la grabadora de forma independiente, en lugar de ser administrado por el servicio de X-Ray. A medida que se implementan más hosts, el porcentaje establecido se multiplica, lo que dificulta el control de la cantidad de datos registrados.

Sí AWS Lambda, no puedes modificar la frecuencia de muestreo. Si un servicio instrumentado llama a su función, Lambda registrará las llamadas que generaron solicitudes muestreadas por ese servicio. Si el rastreo activo está activado y no hay ningún encabezado de rastreo, Lambda toma la decisión de muestreo.

Para configurar reglas de respaldo, indique al SDK de X-Ray para Node.js que cargue reglas de muestreo desde un archivo con `setSamplingRules`.

**Example app.js: reglas de muestreo de un archivo**  

```
var AWSXRay = require('aws-xray-sdk');
AWSXRay.middleware.setSamplingRules('sampling-rules.json');
```

También puede definir las reglas en código y pasarlas a `setSamplingRules` como un objeto.

**Example app.js: reglas de muestreo de un objeto**  

```
var AWSXRay = require('aws-xray-sdk');
var rules = {
  "rules": [ { "description": "Player moves.", "service_name": "*", "http_method": "*", "url_path": "/api/move/*", "fixed_target": 0, "rate": 0.05 } ],
  "default": { "fixed_target": 1, "rate": 0.1 },
  "version": 1
  }

AWSXRay.middleware.setSamplingRules(rules);
```

Para utilizar solo reglas locales, llame a `disableCentralizedSampling`.

```
AWSXRay.middleware.disableCentralizedSampling()
```

## Registro
<a name="xray-sdk-nodejs-configuration-logging"></a>

 Para registrar la salida del SDK, llame a `AWSXRay.setLogger(logger)`, donde `logger` es un objeto que proporciona métodos de registro estándar (`warn`, `info`, etc.).

De forma predeterminada, el SDK registrará los mensajes de error en la consola mediante los métodos estándar del objeto de la consola. El nivel de registro del registrador integrado se puede configurar mediante las variables de entorno `AWS_XRAY_DEBUG_MODE` o `AWS_XRAY_LOG_LEVEL`. Para obtener una lista de valores de nivel de registro válidos, consulte [Variables de entorno](#xray-sdk-nodejs-configuration-envvars).

Si desea proporcionar un formato o destino diferente para los registros, puede proporcionar al SDK su propia implementación de la interfaz del registrador, como se muestra a continuación. Se puede utilizar cualquier objeto que implemente esta interfaz. Eso significa que muchas bibliotecas de registro, por ejemplo, Winston, podrían usarse y pasarse directamente al SDK.

**Example app.js: registro**  

```
var AWSXRay = require('aws-xray-sdk');

// Create your own logger, or instantiate one using a library.
var logger = {
  error: (message, meta) => { /* logging code */ },
  warn: (message, meta) => { /* logging code */ },
  info: (message, meta) => { /* logging code */ },
  debug: (message, meta) => { /* logging code */ }
}

AWSXRay.setLogger(logger);
AWSXRay.config([AWSXRay.plugins.EC2Plugin]);
```

Llame a `setLogger` antes de ejecutar otros métodos de configuración, con el fin de asegurarse de capturar la salida de estas operaciones.

## Dirección del daemon de X-Ray
<a name="xray-sdk-nodejs-configuration-daemon"></a>

Si el daemon de X-Ray escucha en un puerto o host que no sea `127.0.0.1:2000`, puede configurar el SDK de X-Ray para Node.js con el fin de enviar datos de rastreo a otra dirección.

```
AWSXRay.setDaemonAddress('host:port');
```

Puede especificar el host por nombre o IPv4 dirección.

**Example app.js: dirección del demonio**  

```
var AWSXRay = require('aws-xray-sdk');
AWSXRay.setDaemonAddress('daemonhost:8082');
```

Si ha configurado el demonio para que escuche en diferentes puertos para TCP y UDP, puede especificar ambos en la configuración de dirección del demonio.

**Example app.js: dirección del demonio en puertos independientes**  

```
var AWSXRay = require('aws-xray-sdk');
AWSXRay.setDaemonAddress('tcp:daemonhost:8082 udp:daemonhost:8083');
```

También puede establecer la dirección del demonio utilizando la `AWS_XRAY_DAEMON_ADDRESS`variable de entorno[Variables de entorno](#xray-sdk-nodejs-configuration-envvars).

## Variables de entorno
<a name="xray-sdk-nodejs-configuration-envvars"></a>

Puede usar variables de entorno para configurar el SDK de X-Ray para Node.js. El SDK admite las siguientes variables.
+ `AWS_XRAY_CONTEXT_MISSING`: establezca esta opción en `RUNTIME_ERROR` para generar excepciones cuando el código instrumentado intente registrar datos sin que haya ningún segmento abierto.

**Valores válidos**
  + `RUNTIME_ERROR`: lance una excepción de tiempo de ejecución.
  + `LOG_ERROR`: registre un error y continúe (predeterminado).
  + `IGNORE_ERROR`: ignore el error y continúe.

  Se pueden producir errores relativos a segmentos o subsegmentos inexistentes al intentar usar un cliente instrumentado en el código de inicio que se ejecuta cuando no hay ninguna solicitud abierta o en el código que inicia un nuevo subproceso.
+ `AWS_XRAY_DAEMON_ADDRESS`: establezca el host y el puerto del oyente del daemon de X-Ray. De forma predeterminada, el SDK utiliza `127.0.0.1:2000` tanto para los datos de rastro (UDP) como para el muestreo (TCP). Use esta variable si ha configurado el daemon para que [escuche en un puerto diferente](xray-daemon-configuration.md) o si se ejecuta en un host diferente.

**Formato**
  + **El mismo puerto**: `address:port`
  + **Puertos diferentes**: `tcp:address:port udp:address:port`
+ `AWS_XRAY_DEBUG_MODE`: establezca este valor en `TRUE` para configurar el SDK de manera que envíe los registros a la consola, a nivel de `debug`.
+ `AWS_XRAY_LOG_LEVEL `: establezca un nivel de registro para el registrador predeterminado. Los valores válidos son `debug`, `info`, `warn`, `error` y `silent`. Este valor se ignora cuando AWS\$1XRAY\$1DEBUG\$1MODE se establece en`TRUE`.
+ `AWS_XRAY_TRACING_NAME`: establezca el nombre de servicio que el SDK utiliza para los segmentos. Anula el nombre de segmento que se ha [establecido en el middleware de Express](xray-sdk-nodejs-middleware.md).

# Rastreo de las solicitudes entrantes con el SDK de X-Ray para Node.js
<a name="xray-sdk-nodejs-middleware"></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 

Puede usar el SDK de X-Ray para Node.js para rastrear las solicitudes HTTP entrantes que sus aplicaciones Express y Restify sirven en una instancia EC2 en Amazon EC2 o Amazon AWS Elastic Beanstalk ECS.

El SDK de X-Ray para Node.js proporciona middleware para aplicaciones que utilizan los marcos de trabajo Express y Restify. Cuando añade el middleware de X-Ray a su aplicación, el SDK de X-Ray para Node.js crea un segmento para cada solicitud muestreada. Este segmento incluye el momento, el método y la disposición de la solicitud HTTP. La instrumentación adicional crea subsegmentos en este segmento.

**nota**  
En el AWS Lambda caso de las funciones, Lambda crea un segmento para cada solicitud muestreada. Para obtener más información, consulte [AWS Lambda y AWS X-Ray](xray-services-lambda.md).

Cada segmento tiene un nombre que identifica la aplicación en el mapa de servicio. El nombre del segmento se puede asignar de forma estática o se puede configurar el SDK para que le asigne un nombre dinámico en función del encabezado del host de la solicitud entrante. La nomenclatura dinámica permite agrupar los rastros en función del nombre de dominio de la solicitud y aplicar un nombre predeterminado si el nombre no coincide con el patrón esperado (por ejemplo, si el encabezado del host está falsificado).

**Solicitudes reenviadas**  
Si un equilibrador de carga u otro intermediario reenvía una solicitud a la aplicación, X-Ray toma la IP de cliente del encabezado `X-Forwarded-For` de la solicitud en lugar de tomar la IP de origen del paquete IP. La IP de cliente que se graba para una solicitud reenviada puede estar falsificada, por lo que no se debe confiar en ella.

Cuando se reenvía una solicitud, el SDK crea un campo adicional en el segmento para indicar que se realizó esta acción. Si el segmento contiene el campo `x_forwarded_for` configurado en `true`, el IP del cliente se obtiene a partir del encabezado `X-Forwarded-For` en la solicitud HTTP.

El controlador de mensajes crea un segmento para cada solicitud entrante con un bloque `http` que contiene la siguiente información:
+ **Método HTTP**: GET, POST, PUT, DELETE, etc.
+ **Dirección del cliente**: la dirección IP del cliente que envió la solicitud.
+ **Código de respuesta**: el código de respuesta HTTP para la solicitud finalizada.
+ **Intervalo**: la hora de inicio (cuando se recibió la solicitud) y la hora de finalización (cuando se envió la respuesta).
+ **Agente del usuario**: el `user-agent` de la solicitud.
+ **Longitud del contenido**: la `content-length` de la respuesta.

**Topics**
+ [Seguimiento de solicitudes entrantes con Express](#xray-sdk-nodejs-middleware-express)
+ [Seguimiento de solicitudes entrantes con Restify](#xray-sdk-nodejs-middleware-restify)
+ [Configuración de una estrategia de nomenclatura de segmentos](#xray-sdk-nodejs-middleware-naming)

## Seguimiento de solicitudes entrantes con Express
<a name="xray-sdk-nodejs-middleware-express"></a>

Para usar el middleware Express, inicie el cliente del SDK y utilice el middleware que devolvió la función `express.openSegment` antes de definir las rutas que desea usar.

**Example app.js - Express**  

```
var app = express();

var AWSXRay = require('aws-xray-sdk');
app.use(AWSXRay.express.openSegment('MyApp'));

app.get('/', function (req, res) {
  res.render('index');
});

app.use(AWSXRay.express.closeSegment());
```

Después de definir las rutas, utilice el resultado de `express.closeSegment` tal como se muestra para poder solucionar los errores que el SDK de X-Ray para Node.js haya devuelto.

## Seguimiento de solicitudes entrantes con Restify
<a name="xray-sdk-nodejs-middleware-restify"></a>

Para utilizar el middleware Restify, inicialice el cliente del SDK y ejecute `enable`. Indique su servidor de Restify y el nombre de segmento.

**Example app.js: restify**  

```
var AWSXRay = require('aws-xray-sdk');
var AWSXRayRestify = require('aws-xray-sdk-restify');

var restify = require('restify');
var server = restify.createServer();
AWSXRayRestify.enable(server, 'MyApp'));

server.get('/', function (req, res) {
  res.render('index');
});
```

## Configuración de una estrategia de nomenclatura de segmentos
<a name="xray-sdk-nodejs-middleware-naming"></a>

AWS X-Ray utiliza un *nombre de servicio* para identificar la aplicación y distinguirla del resto de aplicaciones, bases de datos, recursos externos APIs y otros AWS recursos que utiliza la aplicación. Cuando el SDK de X-Ray genera segmentos para las solicitudes entrantes, registra el nombre del servicio de la aplicación en el [campo de nombre](xray-api-segmentdocuments.md#api-segmentdocuments-fields) del segmento.

El SDK de X-Ray puede nombrar los segmentos utilizando el nombre de host en el encabezado de la solicitud HTTP. Sin embargo, este encabezado se puede falsificar, lo que podría provocar nodos inesperados en el mapa de servicio. Para evitar que el SDK nombre los segmentos de forma incorrecta debido a que las solicitudes tienen encabezados de host falsificados, debe especificar un nombre predeterminado para las solicitudes entrantes.

Si la aplicación atiende solicitudes de varios dominios, puede configurar el SDK para que utilice una estrategia de nomenclatura dinámica que refleje esto en los nombres de los segmentos. Una estrategia de nomenclatura dinámica permite al SDK usar el nombre de host para las solicitudes que coinciden con un patrón esperado y aplicar el nombre predeterminado a las solicitudes que no coincidan.

Por ejemplo, es posible que tenga una sola aplicación que atienda solicitudes a tres subdominios: `www.example.com`, `api.example.com` y `static.example.com`. Puede usar una estrategia de nomenclatura dinámica con el patrón `*.example.com` para identificar los segmentos de cada subdominio con un nombre diferente, lo que da como resultado tres nodos de servicio en el mapa de servicio. Si su aplicación recibe solicitudes con un nombre de host que no coincide con el patrón, verá un cuarto nodo en el mapa de servicio con el nombre alternativo que especifique.

Si desea utilizar el mismo nombre para todos los segmentos de solicitud, especifique el nombre de la aplicación cuando inicie el middleware, tal y como se muestra en las secciones anteriores.

**nota**  
Puede anular el nombre de servicio predeterminado que ha definido en el código mediante la `AWS_XRAY_TRACING_NAME`variable de entorno[Variables de entorno](xray-sdk-nodejs-configuration.md#xray-sdk-nodejs-configuration-envvars).

Una estrategia de nomenclatura dinámica define un patrón con el que deben coincidir los nombres de host y un nombre predeterminado que se utiliza si el nombre de host de la solicitud HTTP no coincide con el patrón. Para nombrar los segmentos dinámicamente, use `AWSXRay.middleware.enableDynamicNaming`.

**Example app.js: nombres de segmentos dinámicos**  
Si el nombre de host de la solicitud coincide con el patrón `*.example.com`, utilice el nombre de host. De lo contrario, utilice `MyApp`.  

```
var app = express();

var AWSXRay = require('aws-xray-sdk');
app.use(AWSXRay.express.openSegment('MyApp'));
AWSXRay.middleware.enableDynamicNaming('*.example.com');
        
app.get('/', function (req, res) {
  res.render('index');
});

app.use(AWSXRay.express.closeSegment());
```

# Rastreo de llamadas al AWS SDK con el SDK de X-Ray para Node.js
<a name="xray-sdk-nodejs-awssdkclients"></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 

[Cuando la aplicación realiza llamadas Servicios de AWS para almacenar datos, escribir en una cola o enviar notificaciones, el SDK de X-Ray para Node.js rastrea las llamadas en sentido descendente en subsegmentos.](xray-sdk-nodejs-subsegments.md) El Servicios de AWS rastreo y los recursos a los que accede dentro de esos servicios (por ejemplo, un bucket de Amazon S3 o una cola de Amazon SQS) aparecen como nodos descendentes en el mapa de rastreo de la consola X-Ray.

[Clientes del AWS SDK de instrumentos que se crean mediante la [AWS SDK para JavaScript V2 o la V3](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/welcome.html).AWS SDK para JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/welcome.html) Cada versión AWS del SDK proporciona diferentes métodos para instrumentar AWS los clientes del SDK.

**nota**  
Actualmente, el AWS X-Ray SDK para Node.js devuelve menos información de segmentos al instrumentar los clientes de la AWS SDK para JavaScript V3, en comparación con la instrumentación de los clientes de la V2. Por ejemplo, los subsegmentos que representan llamadas a DynamoDB no devolverán el nombre de la tabla. Si necesita esta información de segmento en sus trazas, considere la posibilidad de utilizar la V2. AWS SDK para JavaScript 

------
#### [ AWS SDK para JavaScript V2 ]

Puede instrumentar todos los clientes AWS del SDK V2 empaquetando la sentencia `aws-sdk` require en una llamada a`AWSXRay.captureAWS`.

**Example app.js: instrumentación AWS del SDK**  

```
const AWS = AWSXRay.captureAWS(require('aws-sdk'));
```

Para instrumentar a clientes individuales, incluye tu cliente AWS SDK en una llamada a`AWSXRay.captureAWSClient`. Por ejemplo, para instrumentar un cliente de `AmazonDynamoDB`:

**Example app.js - Instrumentación de clientes de DynamoDB**  

```
    const AWSXRay = require('aws-xray-sdk');
...
    const ddb = AWSXRay.captureAWSClient(new AWS.DynamoDB());
```

**aviso**  
No use `captureAWS` y `captureAWSClient` conjuntamente. Esto dará lugar a subsegmentos duplicados.

Si quieres usar [TypeScriptECMAScript](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html)[módulos](https://nodejs.org/api/esm.html) (ESM) para cargar tu JavaScript código, usa el siguiente ejemplo para importar bibliotecas:

**Example app.js: instrumentación AWS del SDK**  

```
import * as AWS from 'aws-sdk';
import * as AWSXRay from 'aws-xray-sdk';
```

Para instrumentar ESM AWS a todos los clientes, utilice el siguiente código:

**Example app.js: instrumentación AWS del SDK**  

```
import * as AWS from 'aws-sdk';
import * as AWSXRay from 'aws-xray-sdk';
const XRAY_AWS = AWSXRay.captureAWS(AWS);
const ddb = new XRAY_AWS.DynamoDB();
```

Para todos los servicios, puede ver el nombre de la API a la que se llama en la consola de X-Ray. Para un subconjunto de servicios, el SDK de X-Ray agrega información al segmento para proporcionar una mayor granularidad en el mapa de servicio.

Por ejemplo, cuando realiza una llamada con un cliente instrumentado de DynamoDB, el SDK agrega el nombre de tabla al segmento para las llamadas que se dirigen a una tabla. En la consola, cada tabla aparece como nodo independiente en el mapa de servicio, con un nodo genérico de DynamoDB para las llamadas que no se dirigen a una tabla.

**Example Subsegmento para una llamada a DynamoDB con el fin de guardar un elemento**  

```
{
  "id": "24756640c0d0978a",
  "start_time": 1.480305974194E9,
  "end_time": 1.4803059742E9,
  "name": "DynamoDB",
  "namespace": "aws",
  "http": {
    "response": {
      "content_length": 60,
      "status": 200
    }
  },
  "aws": {
    "table_name": "scorekeep-user",
    "operation": "UpdateItem",
    "request_id": "UBQNSO5AEM8T4FDA4RQDEB94OVTDRVV4K4HIRGVJF66Q9ASUAAJG",
  }
}
```

Cuando accede a recursos designados, las llamadas a los siguientes servicios crean nodos adicionales en el mapa de servicio. Las llamadas que no están dirigidas a recursos concretos crean un nodo genérico en el servicio.
+ **Amazon DynamoDB**: nombre de tabla
+ **Amazon Simple Storage Service**: nombre de bucket y de clave
+ **Amazon Simple Queue Service**: nombre de cola

------
#### [ AWS SDK para JavaScript V3 ]

La AWS SDK para JavaScript V3 es modular, por lo que su código solo carga los módulos que necesita. Por este motivo, no es posible instrumentar todos los clientes AWS del SDK, ya que la V3 no admite este método. `captureAWS`

Si quieres usar TypeScript ECMAScript Modules (ESM) para cargar tu JavaScript código, puedes usar el siguiente ejemplo para importar bibliotecas:

```
import * as AWS from 'aws-sdk';
import * as AWSXRay from 'aws-xray-sdk';
```

Instrumente cada cliente AWS del SDK mediante el `AWSXRay.captureAWSv3Client` método. Por ejemplo, para instrumentar un cliente de `AmazonDynamoDB`:

**Example app.js: instrumentación de clientes de DynamoDB mediante la V3 del SDK para Javascript**  

```
    const AWSXRay = require('aws-xray-sdk');
    const { DynamoDBClient } = require("@aws-sdk/client-dynamodb");
...
    const ddb = AWSXRay.captureAWSv3Client(new DynamoDBClient({ region: "region" }));
```

Cuando se utiliza la AWS SDK para JavaScript V3, actualmente no se devuelven metadatos como el nombre de la tabla, el nombre del bucket y la clave o el nombre de la cola y, por lo tanto, el mapa de rastreo no contendrá nodos discretos para cada recurso nombrado, como ocurre cuando se instrumentan los clientes del AWS SDK mediante la V2. AWS SDK para JavaScript 

**Example Subsegmento para una llamada a DynamoDB para guardar un elemento, cuando se utiliza la V3 AWS SDK para JavaScript**  

```
{
  "id": "24756640c0d0978a",
  "start_time": 1.480305974194E9,
  "end_time": 1.4803059742E9,
  "name": "DynamoDB",
  "namespace": "aws",
  "http": {
    "response": {
      "content_length": 60,
      "status": 200
    }
  },
  "aws": {
    "operation": "UpdateItem",
    "request_id": "UBQNSO5AEM8T4FDA4RQDEB94OVTDRVV4K4HIRGVJF66Q9ASUAAJG",
  }
}
```

------

# Rastreo de llamadas a servicios web HTTP posteriores utilizando el SDK de X-Ray para Node.js
<a name="xray-sdk-nodejs-httpclients"></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 

Cuando tu aplicación realiza llamadas a microservicios o a HTTP públicos APIs, puedes usar el X-Ray SDK para el cliente Node.js para instrumentar esas llamadas y añadir la API al gráfico del servicio como un servicio descendente.

Pase su cliente `http` o `https` al método `captureHTTPs` del SDK de X-Ray para Node.js con el fin de rastrear llamadas salientes.

**nota**  
Las llamadas que utilizan bibliotecas de solicitudes HTTP de terceros, como Axios o Superagent, son compatibles a través de la [API `captureHTTPsGlobal()`](https://docs.aws.amazon.com/xray-sdk-for-nodejs/latest/reference/module-http_p.html) y se seguirán rastreando cuando utilicen el módulo `http` nativo.

**Example app.js: cliente HTTP**  

```
var AWSXRay = require('aws-xray-sdk');
var http = AWSXRay.captureHTTPs(require('http'));
```

Para habilitar el rastreo en todos los clientes HTTP, llame a `captureHTTPsGlobal` antes de cargar `http`.

**Example app.js: cliente HTTP (global)**  

```
var AWSXRay = require('aws-xray-sdk');
AWSXRay.captureHTTPsGlobal(require('http'));
var http = require('http');
```

Cuando se instrumenta una llamada a una API web posterior, el SDK de X-Ray para Node.js registra un subsegmento que contiene información acerca de la solicitud HTTP y la respuesta. X-Ray utiliza el subsegmento para generar un segmento inferido de la API remota.

**Example Subsegmento para una llamada HTTP posterior**  

```
{
  "id": "004f72be19cddc2a",
  "start_time": 1484786387.131,
  "end_time": 1484786387.501,
  "name": "names.example.com",
  "namespace": "remote",
  "http": {
    "request": {
      "method": "GET",
      "url": "https://names.example.com/"
    },
    "response": {
      "content_length": -1,
      "status": 200
    }
  }
}
```

**Example Segmento inferido para una llamada HTTP posterior**  

```
{
  "id": "168416dc2ea97781",
  "name": "names.example.com",
  "trace_id": "1-62be1272-1b71c4274f39f122afa64eab",
  "start_time": 1484786387.131,
  "end_time": 1484786387.501,
  "parent_id": "004f72be19cddc2a",
  "http": {
    "request": {
      "method": "GET",
      "url": "https://names.example.com/"
    },
    "response": {
      "content_length": -1,
      "status": 200
    }
  },
  "inferred": true
}
```

# Rastreo de consultas SQL con el SDK de X-Ray para Node.js
<a name="xray-sdk-nodejs-sqlclients"></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 

Instrumente las consultas de base de datos SQL incluyendo su cliente SQL en el método del cliente de SDK de X-Ray para Node.js correspondiente.
+  **PostgreSQL** – `AWSXRay.capturePostgres()` 

  ```
  var AWSXRay = require('aws-xray-sdk');
  var pg = AWSXRay.capturePostgres(require('pg'));
  var client = new pg.Client();
  ```
+  **MySQL** – `AWSXRay.captureMySQL()` 

  ```
  var AWSXRay = require('aws-xray-sdk');
  var mysql = AWSXRay.captureMySQL(require('mysql'));
  ...
  var connection = mysql.createConnection(config);
  ```

Cuando usa un cliente instrumentado para realizar consultas SQL, el SDK de X-Ray para Node.js registra información acerca de la conexión y consultas en un subsegmento.

## Inclusión de datos adicionales en subsegmentos SQL
<a name="xray-sdk-nodejs-sqlclients-additional"></a>

Puede agregar información adicional a los subsegmentos generados para consultas SQL, siempre que se asigne a un campo SQL con permiso. Por ejemplo, para registrar la cadena de consultas SQL saneada en un subsegmento, puede agregarla directamente al objeto SQL del subsegmento.

**Example Asignar SQL al subsegmento**  

```
    const queryString = 'SELECT * FROM MyTable';
connection.query(queryString, ...);

// Retrieve the most recently created subsegment
const subs = AWSXRay.getSegment().subsegments;

if (subs & & subs.length > 0) {
  var sqlSub = subs[subs.length - 1];
  sqlSub.sql.sanitized_query = queryString;
}
```

Para obtener una lista completa de campos SQL con permiso, consulte [Consultas SQL](https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html#api-segmentdocuments-sql) en la *Guía para desarrolladores de AWS X-Ray *.

# Generación de subsegmentos personalizados con el SDK de X-Ray para Node.js
<a name="xray-sdk-nodejs-subsegments"></a>

Los subsegmentos amplían el [segmento](xray-concepts.md#xray-concepts-segments) de un rastro con detalles sobre el trabajo realizado para atender una solicitud. Cada vez que usted realiza una llamada con un cliente instrumentado, el SDK de X-Ray 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.

## Subsegmentos Express personalizados
<a name="xray-sdk-nodejs-subsegments-express"></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 

Para crear un subsegmento personalizado para una función que realiza llamadas a servicios posteriores, utilice la función `captureAsyncFunc`.

**Example app.js: subsegmentos personalizados Express**  

```
var AWSXRay = require('aws-xray-sdk');

app.use(AWSXRay.express.openSegment('MyApp'));

app.get('/', function (req, res) {
  var host = 'api.example.com';

  AWSXRay.captureAsyncFunc('send', function(subsegment) {
    sendRequest(host, function() {
      console.log('rendering!');
      res.render('index');
      subsegment.close();
    });
  });
});

app.use(AWSXRay.express.closeSegment());

function sendRequest(host, cb) {
  var options = {
    host: host,
    path: '/',
  };

  var callback = function(response) {
    var str = '';

    response.on('data', function (chunk) {
      str += chunk;
    });

    response.on('end', function () {
      cb();
    });
  }

  http.request(options, callback).end();
};
```

En este ejemplo, la aplicación crea un subsegmento personalizado denominado `send` para realizar llamadas a la función `sendRequest`. `captureAsyncFunc` transfiere un subsegmento que debe cerrar dentro de la función de devolución de llamada cuando se completen las llamadas asíncronas que realiza.

Para las funciones síncronas, puede utilizar la función `captureFunc`, la cual cierra de forma automática el subsegmento en cuanto el bloque de funciones termina de ejecutarse.

Cuando crea un subsegmento dentro de un segmento o de otro subsegmento, el SDK de X-Ray para Node.js genera un ID para dicho subsegmento y registra la hora de inicio y la hora de finalización.

**Example 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"
    }
  },
```

## Subsegmentos personalizados de Lambda
<a name="xray-sdk-nodejs-subsegments-lambda"></a>

El SDK está configurado para crear automáticamente un segmento de fachada de marcador de posición cuando detecta que se está ejecutando en Lambda. Para crear un subsegmento básico, que creará un nodo `AWS::Lambda::Function` único en el mapa de rastros de X-Ray, llame y reasigne el segmento de fachada. Si crea manualmente un nuevo segmento con un nuevo ID (mientras comparte el ID de registro de seguimiento, el ID principal y la decisión de muestreo) podrá enviar un nuevo segmento.

**Example app.js - subsegmentos personalizados manuales**  

```
const segment = AWSXRay.getSegment(); //returns the facade segment
const subsegment = segment.addNewSubsegment('subseg');
...
subsegment.close();
//the segment is closed by the SDK automatically
```

# Adición de anotaciones y metadatos a los segmentos con el SDK de X-Ray para Node.js
<a name="xray-sdk-nodejs-segment"></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 

Puede registrar información adicional acerca de las solicitudes, el entorno o su aplicación con anotaciones y metadatos. Puede añadir anotaciones y metadatos a los segmentos que crea el SDK de X-Ray o a los subsegmentos personalizados que cree usted mismo.

Las **anotaciones** son pares de clave-valor con valores de cadena, numéricos o booleanos. Las anotaciones se indexan para su uso con [expresiones de filtro](xray-console-filters.md). Utilice anotaciones para registrar los datos que desee utilizar para agrupar rastros en la consola o cuando llame a la API de [https://docs.aws.amazon.com/xray/latest/api/API_GetTraceSummaries.html](https://docs.aws.amazon.com/xray/latest/api/API_GetTraceSummaries.html).

Los **metadatos** son pares de clave-valor con valores de cualquier tipo, por ejemplo objetos y listas, pero que no se indexan para utilizarlos con expresiones de filtro. Utilice los metadatos para registrar datos adicionales que desee almacenar en el rastro, pero que no necesite usar para hacer búsquedas.

Además de anotaciones y metadatos, también puede [registrar cadenas de ID de usuario](#xray-sdk-nodejs-segment-userid) en los segmentos. IDs Los usuarios se registran en un campo independiente en los segmentos y se indexan para usarlos en la búsqueda.

**Topics**
+ [Registro de anotaciones con el SDK de X-Ray para Node.js](#xray-sdk-nodejs-segment-annotations)
+ [Registro de metadatos con el SDK de X-Ray para Node.js](#xray-sdk-nodejs-segment-metadata)
+ [Grabación del usuario IDs con el SDK de X-Ray para Node.js](#xray-sdk-nodejs-segment-userid)

## Registro de anotaciones con el SDK de X-Ray para Node.js
<a name="xray-sdk-nodejs-segment-annotations"></a>

Utilice anotaciones para registrar información sobre segmentos o subsegmentos que desee indexar para las búsquedas.

**Requisitos de anotación**
+ **Claves**: la clave de una anotación de X-Ray puede contener hasta 500 caracteres alfanuméricos. No se pueden usar espacios ni símbolos, excepto el punto (.)
+ **Valores**: el valor de una anotación de X-Ray puede contener hasta 1000 caracteres Unicode.
+ Número de **anotaciones**: se pueden utilizar hasta 50 anotaciones por rastro.

**Para registrar anotaciones**

1. Obtenga una referencia al segmento o subsegmento actual.

   ```
   var AWSXRay = require('aws-xray-sdk');
   ...
   var document = AWSXRay.getSegment();
   ```

1. Llame a `addAnnotation` con una clave de cadena y un valor booleano, numérico o de cadena.

   ```
   document.addAnnotation("mykey", "my value");
   ```

   El siguiente ejemplo muestra cómo llamar a `putAnnotation` con una clave de cadena que incluye un punto y un valor booleano, numérico o de cadena.

   ```
   document.putAnnotation("testkey.test", "my value");
   ```

El SDK registra las anotaciones como pares de clave-valor en un objeto `annotations` del documento de segmento. Si llama dos veces a `addAnnotation` con la misma clave, se sobrescriben los valores previamente registrados en ese segmento o subsegmento.

Para encontrar rastros que tengan anotaciones con valores específicos, utilice la palabra clave `annotation[key]` en una [expresión de filtro](xray-console-filters.md).

**Example app.js: anotaciones**  

```
var AWS = require('aws-sdk');
var AWSXRay = require('aws-xray-sdk');
var ddb = AWSXRay.captureAWSClient(new AWS.DynamoDB());
...
app.post('/signup', function(req, res) {
    var item = {
        'email': {'S': req.body.email},
        'name': {'S': req.body.name},
        'preview': {'S': req.body.previewAccess},
        'theme': {'S': req.body.theme}
    };

    var seg = AWSXRay.getSegment();
    seg.addAnnotation('theme', req.body.theme);
  
    ddb.putItem({
      'TableName': ddbTable,
      'Item': item,
      'Expected': { email: { Exists: false } }
  }, function(err, data) {
...
```

## Registro de metadatos con el SDK de X-Ray para Node.js
<a name="xray-sdk-nodejs-segment-metadata"></a>

Utilice los metadatos para registrar información sobre segmentos o subsegmentos que no necesite indexar para las búsquedas. Los valores de metadatos pueden ser cadenas, números, booleanos o cualquier otro objeto que se pueda serializar en un objeto o matriz JSON.

**Para registrar metadatos**

1. Obtenga una referencia al segmento o subsegmento actual.

   ```
   var AWSXRay = require('aws-xray-sdk');
   ...
   var document = AWSXRay.getSegment();
   ```

1. Llame a `addMetadata` con una clave de cadena, un valor booleano, numérico, de cadena o de objeto y un espacio de nombres de cadena.

   ```
   document.addMetadata("my key", "my value", "my namespace");
   ```

   o

   Llame a `addMetadata` con solo una clave y un valor.

   ```
   document.addMetadata("my key", "my value");
   ```

Si no especifica un espacio de nombres, el SDK utiliza `default`. Si llama dos veces a `addMetadata` con la misma clave, se sobrescriben los valores previamente registrados en ese segmento o subsegmento.

## Grabación del usuario IDs con el SDK de X-Ray para Node.js
<a name="xray-sdk-nodejs-segment-userid"></a>

Registre IDs el usuario en los segmentos de solicitud para identificar al usuario que envió la solicitud. Esta operación no es compatible con AWS Lambda las funciones porque los segmentos de los entornos Lambda son inmutables. La llamada `setUser` solo se puede efectuar con segmentos, no con subsegmentos.

**Para registrar al usuario IDs**

1. Obtenga una referencia al segmento o subsegmento actual.

   ```
   var AWSXRay = require('aws-xray-sdk');
   ...
   var document = AWSXRay.getSegment();
   ```

1. Llame a `setUser()` con un ID de cadena del usuario que envió la solicitud.

   ```
   var user = 'john123';
   
   AWSXRay.getSegment().setUser(user);
   ```

Puede llamar a `setUser` para registrar el ID de usuario en cuanto la aplicación rápida comience a procesar una solicitud. Si va a utilizar el segmento únicamente para establecer el ID de usuario, puede encadenar las llamadas en una sola línea.

**Example app.js: ID de usuario**  

```
var AWS = require('aws-sdk');
var AWSXRay = require('aws-xray-sdk');
var uuidv4 = require('uuid/v4');
var ddb = AWSXRay.captureAWSClient(new AWS.DynamoDB());
...
    app.post('/signup', function(req, res) {
    var userId = uuidv4();
    var item = {
        'userId': {'S': userId},
        'email': {'S': req.body.email},
        'name': {'S': req.body.name}
    };

    var seg = AWSXRay.getSegment().setUser(userId);
  
    ddb.putItem({
      'TableName': ddbTable,
      'Item': item,
      'Expected': { email: { Exists: false } }
  }, function(err, data) {
...
```

Para buscar rastros de un ID de usuario, utilice la palabra clave `user` en una [expresión de filtro](https://docs.aws.amazon.com/xray/latest/devguide/xray-console-filters.html).