Instrumentación de un cliente de aplicación web - AWS X-Ray

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

Instrumentación de un cliente de aplicación web

En la ramificación 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 for 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.

ejemplo public/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 (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.

ejemplo 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 rastreo resultante incluye un nodo para el cliente de la aplicación web.

Rastree el mapa con el nodo para el cliente Scorekeep.

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/).

Lista de rastreos con rastreos que muestran la URL de solicitud desde el segmento del cliente.