使用AWS X-Ray使用指令碼的 APIAWSCLI - AWS X-Ray

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用AWS X-Ray使用指令碼的 APIAWSCLI

該AWSCLI 可讓您直接存取 X-Ray 服務,並使用 X-Ray 主控台用來擷取服務圖表和原始追蹤資料的相同 API。範例應用程式包含指令碼,說明如何搭配使用這些 APIAWSCLI。

先決條件

此教學使用 Scorekeep 範例應用程式和隨附的指令碼,以產生追蹤資料和服務地圖。按照入門教學中的指示啟動應用程式。

本教學課程使用AWS CLI顯示 X 射線 API 的基本用途。該AWSCLI,適用於視窗、Linux 和作業系統,為所有人提供對公共 API 的命令行訪問AWS 服務。

注意

您必須驗證 AWS CLI 是否設定為建立 Scorekeep 範例應用程式的同一個區域。

隨附的指令碼 (用來測試範例應用程式) 會使用 cURL,將流量傳送到 API 和 jq 以剖析輸出。您可以下載jq可執行來源斯泰多兰·吉图比奥,以及curl可執行來源https://curl.haxx.se/download.html。大多數的 Linux 和 OS X 安裝都包括 cURL。

產生追蹤資料

當遊戲進行中時,Web 應用程式會每隔幾秒鐘持續產生對 API 的流量,但只會產生一種類型的請求。使用 test-api.sh 指令碼來執行端對端案例,並在您測試 API 時產生更多元化的追蹤資料。

使用 test-api.sh 指令碼
  1. 開啟 Elastic Beanstalk 主控台

  2. 導覽至管理主控台適用於您的環境。

  3. 複製頁面標頭的環境 URL

  4. 開啟 bin/test-api.sh 並將 API 的值取代為您環境的 URL。

    #!/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 射線 API

該AWSCLI 為 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'

指令碼會擷取前一分鐘和兩個分鐘之間產生的追蹤 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[*]'

指令碼會擷取前一分鐘和兩個分鐘之間產生的完整追蹤。

~/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 } ...

清除

終止您的彈性豆莖環境,以關閉 Amazon EC2 執行個體、DynamoDB 表和其他資源。

若要終止您的 Elastic Beanstalk 環境
  1. 開啟 Elastic Beanstalk 主控台

  2. 導覽至管理主控台適用於您的環境。

  3. 選擇 Actions (動作)。

  4. 選擇 Terminate Environment (終止環境)

  5. 選擇 Terminate (終止)

追蹤資料會在 30 天後自動從 X-Ray 中刪除。