AWS CLI에서 AWS X-Ray API 사용하기 - AWS X-Ray

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS CLI에서 AWS X-Ray API 사용하기

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로 트래픽을 보내 출력을 구문 분석합니다. jq 실행 파일은 stedolan.github.io에서 다운로드할 수 있고, curl 실행 파일은 https://curl.haxx.se/download.html에서 다운로드할 수 있습니다. 대부분의 Linux 및 OS X 설치에는 cURL이 포함되어 있습니다.

데이터 추적 생성

웹 앱은 게임이 진행되는 동안 몇 초마다 계속해서 API로 가는 트래픽을 생성하지만 생성되는 요청은 한 가지 유형뿐입니다. API를 테스트하는 동안 test-api.sh 스크립트를 사용하여 종단 간 시나리오를 실행하고 보다 다양한 트레이스 데이터를 생성합니다.

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-Ray API 사용

AWS CLI는 GetServiceGraphGetTraceSummaries를 포함하여 X-Ray가 제공하는 모든 API 작업에 대한 명령을 제공합니다. 지원되는 모든 작업과 각 작업에서 사용되는 데이터 형식에 대한 자세한 내용은 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. Elastic Beanstalk 콘솔을 엽니다.

  2. 사용 중인 환경의 관리 콘솔로 이동합니다.

  3. [Actions]를 선택합니다.

  4. [Terminate Environment]를 선택합니다.

  5. [Terminate]를 선택합니다.

트레이스 데이터는 30일 후에 X-Ray에서 자동으로 삭제됩니다.