Instrumentieren eines Web-App-Clients - AWS X-Ray

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Instrumentieren eines Web-App-Clients

In der xray-cognito Verzweigung verwendet Scorekeep Amazon Cognito, um Benutzern zu ermöglichen, ein Konto zu erstellen und sich damit anzumelden, um ihre Benutzerinformationen aus einem Amazon Cognito-Benutzerpool abzurufen. Wenn sich ein Benutzer anmeldet, verwendet Scorekeep einen Amazon Cognito-Identitätspool, um temporäre AWS Anmeldeinformationen für die Verwendung mit der abzurufen AWS SDK for JavaScript.

Der Identitätenpool ist so konfiguriert, dass angemeldete Benutzer Ablaufverfolgungsdaten in AWS X-Ray schreiben können. Die Web-App nutzt diese Anmeldeinformationen, um die Benutzer-ID des angemeldeten Benutzers, den Browserpfad und die Client-Ansicht von Aufrufen der Scorekeep-API aufzuzeichnen.

Der Großteil der Vorgänge wird in einer Service-Klasse mit dem Namen xray ausgeführt. Diese Serviceklasse bietet Methoden zum Generieren der erforderlichen Kennungen, zum Erstellen von Segmenten in Bearbeitung, zum Abschließen von Segmenten und zum Senden von Segmentdokumenten an die X-Ray-API.

Beispiel public/xray.js – Aufzeichnen und Hochladen von Segmenten
... 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); } }) }

Diese Methoden werden im Header und in transformResponse-Funktionen in den Ressourcen-Services aufgerufen, die die Web-App zum Aufrufen der Scorekeep-API verwendet. Um das Client-Segment in dieselbe Ablaufverfolgung wie das Segment aufzunehmen, das die API generiert, muss die Webanwendung die Ablaufverfolgungs-ID und die Segment-ID in einen Ablaufverfolgungs-Header (X-Amzn-Trace-Id) aufnehmen, den das X-Ray-SDK lesen kann. Wenn die instrumentierte Java-Anwendung eine Anfrage mit diesem Header erhält, verwendet das X-Ray SDK for Java dieselbe Ablaufverfolgungs-ID und macht das Segment vom Web-App-Client zum übergeordneten Element seines Segments.

Beispiel public/app/services.js – Aufzeichnen von Segmenten für Winkel-Ressourcenaufrufe und Schreiben von Ablaufverfolgungs-Headern
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); }, }, ...

Die resultierende Ablaufverfolgungszuordnung enthält einen Knoten für den Web-App-Client.

Trace-Map mit Knoten für den Scorekeep-Client.

Ablaufverfolgungen, die Segmente aus der Web-App einschließen, zeigen die URL an, die der Benutzer im Browser sieht (Pfad beginnend mit /#/). Ohne Client-Instrumentierung erhalten Sie nur die URL der API-Ressource, die die Web-App aufruft (Pfade beginnend mit /api/).

Ablaufverfolgungsliste mit Ablaufverfolgungen, die die Anfrage-URL aus dem Client-Segment zeigen.