将 AWS X-Ray API 用于 AWS CLI - AWS X-Ray
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 AWS X-Ray API 用于 AWS CLI

AWS CLI 让您可以直接访问 X-Ray 服务,使用的是与 X-Ray 控制台检索服务图和原始跟踪数据相同的 API。示例应用程序包括展示如何将这些 API 用于 AWS CLI 的脚本。

先决条件

本教程使用 Scorekeep 示例应用程序并包括了用于生成跟踪数据和服务地图的脚本。按照入门教程中的说明启动应用程序。

本教程使用 AWS CLI 显示 X-Ray API 的基本用法。可用于 Windows、Linux 和 OS-X 的 AWS CLI 为所有 AWS 服务提供对公共 API 的命令行访问。

注意

您必须验证是否将 AWS CLI 配置为创建 Scorekeep 示例应用程序时所在的区域。

其中包括测试示例应用程序的脚本,该脚本使用 cURL 发送流量到 API 和 jq 来解析输出。您可以从 stedolan.github.io 下载 jq 可执行文件,从 https://curl.haxx.se/download.html 下载 curl 可执行文件。大部分 Linux 和 OS X 安装包含 cURL。

生成跟踪数据

Web 应用程序在游戏进行中每几秒继续生成对 API 的流量,但仅生成一种类型的请求。在您测试 API 时,使用 test-api.sh 脚本运行端到端方案并生成更多样的跟踪数据。

使用 test-api.sh 脚本

  1. Open the Elastic Beanstalk console.

  2. Navigate to the management console for your environment.

  3. 从页面标题复制环境 URL

  4. 打开 bin/test-api.sh 并使用您环境的 URL 替换 API 的值。

    #!/bin/bash API=scorekeep.9hbtbm23t2.us-west-2.elasticbeanstalk.com/api
  5. 运行脚本以生成对 API 的流量。

    ~/debugger-tutorial$ ./bin/test-api.sh Creating users, session, game, configuring game, playing game, ending game, game complete. {"id":"MTBP8BAS","session":"HUF6IT64","name":"tic-tac-toe-test","users":["QFF3HBGM","KL6JR98D"],"rules":"102","startTime":1476314241,"endTime":1476314245,"states":["JQVLEOM2","D67QLPIC","VF9BM9NC","OEAA6GK9","2A705O73","1U2LFTLJ","HUKIDD70","BAN1C8FI","G3UDJTUF","AB70HVEV"],"moves":["BS8F8LQ","4MTTSPKP","463OETES","SVEBCL3N","N7CQ1GHP","O84ONEPD","EG4BPROQ","V4BLIDJ3","9RL3NPMV"]}

使用 X-Ray API

AWS CLI 为 X-Ray 提供的所有 API 操作提供命令,包括 GetServiceGraphGetTraceSummaries。有关所有支持的操作以及这些操作所使用数据类型的更多信息,请参阅 AWS X-Ray API 参考

例 bin/service-graph.sh

EPOCH=$(date +%s) aws xray get-service-graph --start-time $(($EPOCH-600)) --end-time $EPOCH

该脚本检索过去 10 分钟的服务图。

~/eb-java-scorekeep$ ./bin/service-graph.sh | less { "StartTime": 1479068648.0, "Services": [ { "StartTime": 1479068648.0, "ReferenceId": 0, "State": "unknown", "EndTime": 1479068651.0, "Type": "client", "Edges": [ { "StartTime": 1479068648.0, "ReferenceId": 1, "SummaryStatistics": { "ErrorStatistics": { "ThrottleCount": 0, "TotalCount": 0, "OtherCount": 0 }, "FaultStatistics": { "TotalCount": 0, "OtherCount": 0 }, "TotalCount": 2, "OkCount": 2, "TotalResponseTime": 0.054000139236450195 }, "EndTime": 1479068651.0, "Aliases": [] } ] }, { "StartTime": 1479068648.0, "Names": [ "scorekeep.elasticbeanstalk.com" ], "ReferenceId": 1, "State": "active", "EndTime": 1479068651.0, "Root": true, "Name": "scorekeep.elasticbeanstalk.com", ...

例 bin/trace-urls.sh

EPOCH=$(date +%s) aws xray get-trace-summaries --start-time $(($EPOCH-120)) --end-time $(($EPOCH-60)) --query 'TraceSummaries[*].Http.HttpURL'

该脚本检索在过去 1 到 2 分钟之间生成的跟踪的 URL。

~/eb-java-scorekeep$ ./bin/trace-urls.sh [ "http://scorekeep.elasticbeanstalk.com/api/game/6Q0UE1DG/5FGLM9U3/endtime/1479069438", "http://scorekeep.elasticbeanstalk.com/api/session/KH4341QH", "http://scorekeep.elasticbeanstalk.com/api/game/GLQBJ3K5/153AHDIA", "http://scorekeep.elasticbeanstalk.com/api/game/VPDL672J/G2V41HM6/endtime/1479069466" ]

例 bin/full-traces.sh

EPOCH=$(date +%s) TRACEIDS=$(aws xray get-trace-summaries --start-time $(($EPOCH-120)) --end-time $(($EPOCH-60)) --query 'TraceSummaries[*].Id' --output text) aws xray batch-get-traces --trace-ids $TRACEIDS --query 'Traces[*]'

该脚本检索在过去 1 到 2 分钟之间生成的完整跟踪。

~/eb-java-scorekeep$ ./bin/full-traces.sh | less [ { "Segments": [ { "Id": "3f212bc237bafd5d", "Document": "{\"id\":\"3f212bc237bafd5d\",\"name\":\"DynamoDB\",\"trace_id\":\"1-5828d9f2-a90669393f4343211bc1cf75\",\"start_time\":1.479072242459E9,\"end_time\":1.479072242477E9,\"parent_id\":\"72a08dcf87991ca9\",\"http\":{\"response\":{\"content_length\":60,\"status\":200}},\"inferred\":true,\"aws\":{\"consistent_read\":false,\"table_name\":\"scorekeep-session-xray\",\"operation\":\"GetItem\",\"request_id\":\"QAKE0S8DD0LJM245KAOPMA746BVV4KQNSO5AEMVJF66Q9ASUAAJG\",\"resource_names\":[\"scorekeep-session-xray\"]},\"origin\":\"AWS::DynamoDB::Table\"}" }, { "Id": "309e355f1148347f", "Document": "{\"id\":\"309e355f1148347f\",\"name\":\"DynamoDB\",\"trace_id\":\"1-5828d9f2-a90669393f4343211bc1cf75\",\"start_time\":1.479072242477E9,\"end_time\":1.479072242494E9,\"parent_id\":\"37f14ef837f00022\",\"http\":{\"response\":{\"content_length\":606,\"status\":200}},\"inferred\":true,\"aws\":{\"table_name\":\"scorekeep-game-xray\",\"operation\":\"UpdateItem\",\"request_id\":\"388GEROC4PCA6D59ED3CTI5EEJVV4KQNSO5AEMVJF66Q9ASUAAJG\",\"resource_names\":[\"scorekeep-game-xray\"]},\"origin\":\"AWS::DynamoDB::Table\"}" } ], "Id": "1-5828d9f2-a90669393f4343211bc1cf75", "Duration": 0.05099987983703613 } ...

清除

终止您的 Elastic Beanstalk 环境以关闭 Amazon EC2 实例、DynamoDB 表和其他资源。

终止 Elastic Beanstalk 环境

  1. Open the Elastic Beanstalk console.

  2. Navigate to the management console for your environment.

  3. 选择 Actions

  4. 选择 Terminate Environment

  5. 选择 Terminate

在 30 days 之后,跟踪数据自动从 X-Ray 中删除。