分析 Web 应用程序客户端 - Amazon X-Ray
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

分析 Web 应用程序客户端

xray-cognito分支使用 Amazon Cognito 让用户能够创建账户并使用该账户登录,以便从 Amazon Cognito 用户池中检索各自的用户信息。当用户登录时,Scoreep 使用 Amazon Cognito 身份池来获取临时Amazon凭据,以便与Amazon SDK for JavaScript。

身份池配置为允许已登录用户将跟踪数据写入到 Amazon X-Ray。Web 应用程序使用这些凭证来记录已登录用户的 ID、浏览器路径以及从客户端角度对 Scorekeep API 的调用。

大多数工作在名为xray。此服务类提供了方法来生成必需的标识符、创建进行中的分段,对分段进行最终处理以及将分段文档发送给 X-Ray API。

public/xray.js— 记录和上传分段

... 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); } }) }

这些方法在头文件和transformResponse函数,Web 应用程序用来调用 Scoreep API。要将客户端分段与 API 生成的分段包括在同一跟踪中,Web 应用程序必须在跟踪标头(X-Amzn-Trace-Id),X-Ray 开发工具包可读取。当分析的 Java 应用程序收到包含此标头的请求时,适用于 Java 的 X-Ray 开发工具包使用相同的跟踪 ID,并使来自 Web 应用程序客户端的分段成为其分段的父分段。

public/app/services.js— 记录角度资源调用分段和编写跟踪标头

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); }, }, ...

生成的服务地图包含 Web 应用程序客户端的节点。


      包含 Scorekeep 客户端的节点的服务地图。

包含来自 Web 应用程序的分段的跟踪显示用户在浏览器中可见的 URL (以/#/)。如果没有客户端分析,您只会获取 Web 应用程序调用的 API 资源的 URL (以 /api/ 开头的路径)。


      包含显示来自客户端分段的请求 URL 的跟踪的跟踪列表。