Rastreo de las solicitudes entrantes con el SDK de X-Ray para Node.js - AWS X-Ray

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

Rastreo de las solicitudes entrantes con el SDK de X-Ray para Node.js

Puede utilizar el SDK de X-Ray para Node.js con el fin de rastrear las solicitudes HTTP entrantes que sus aplicaciones Express y Restify atienden en una instancia de EC2 en Amazon EC2, AWS Elastic Beanstalk o Amazon 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 caso de funciones de AWS Lambda, Lambda crea un segmento para cada solicitud muestreada. Para obtener más información, consulte AWS Lambda y AWS X-Ray.

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.

Seguimiento de solicitudes entrantes con Express

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.

ejemplo 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

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

ejemplo 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

AWS X-Ray utiliza un nombre de servicio para identificar la aplicación y distinguirla del resto de aplicaciones, bases de datos, API externas y recursos de AWS utilizados por 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 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_NAMEvariable de entornoVariables de entorno.

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.

ejemplo 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());