AWS X-Ray 시작하기 - AWS X-Ray

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

AWS X-Ray 시작하기

를 시작하려면AWS X-Ray이미 있는 Elastic Beanstalk에서 샘플 앱을 실행합니다.계측된트레이스 데이터를 생성합니다. 몇 분 안에 샘플 앱을 시작하여 트래픽을 생성하고, 세그먼트를 X-Ray로 전송하고, 에서 서비스 그래프와 트레이스를 볼 수 있습니다.AWS Management Console.

이 자습서에서는샘플 Java 애플리케이션세그먼트를 생성하여 X-Ray로 전송합니다. 이 애플리케이션은 Spring 프레임워크를 사용하여 JSON 웹 API 및AWS SDK for Java데이터를 Amazon DynamoDB에 유지합니다. 애플리케이션의 서블릿 필터는 애플리케이션에서 제공하는 모든 수신 요청과 요청 핸들러를 구성합니다.AWSDynamoDB에 대한 다운스트림 호출을 구성합니다.


      Scorekeep 샘플 애플리케이션 흐름

Java용 X-Ray SDK를 사용하면 애플리케이션의 기본 및 다운스트림을 모두 트레이스할 수 있습니다.AWS두 가지 구성을 변경하여 리소스:

  • Java용 X-Ray SDK 트레이스 필터를 서블릿 구성에 추가합니다.WebConfig클래스 또는web.xml파일.

  • Java용 X-Ray SDK를 Maven 또는 Gradle 빌드 구성에서 빌드 종속성으로 사용합니다.

또한 를 사용하여 원시 서비스 맵 및 트레이스 데이터에 액세스할 수도 있습니다.AWS CLIX-Ray API를 호출합니다. 서비스 맵과 트레이스 데이터는 쿼리를 통해 애플리케이션이 데이터를 전송하는지 확인하거나 테스트 자동화의 일부로 특정 필드를 확인할 수 있는 JSON입니다.

사전 조건

이 자습서에서는 Elastic Beanstalk를 사용하여 샘플 애플리케이션 및 X-Ray 데몬을 실행하는 리소스를 생성하고 구성합니다. 제한된 권한을 가진 IAM 사용자를 사용하는 경우Elastic Beanstalk 관리형 사용자 정책IAM 사용자에게 Elastic Beanstalk Beanstalk를 사용할 수 있는 권한을 부여합니다.AWSXrayReadOnlyAccessX-Ray 콘솔에서 서비스 맵 및 트레이스를 읽을 권한을 위한 관리형 정책입니다.

참고

현재 아시아 태평양 (자카르타) 리전에서 Elastic Beanstalk 를 사용할 수 없습니다.ap-southeast-3. 다른 항목을 선택합니다.AWS영역에서는 스코어 킵 샘플 응용 프로그램을 사용합니다.

샘플 애플리케이션을 위한 Elastic Beanstalk 환경을 생성합니다. 이전에 Elastic Beanstalk를 사용한 적이 없는 경우 애플리케이션을 위한 서비스 역할 및 인스턴스 프로파일도 생성됩니다. 기본 VPC는 배포하려는 리전에 있어야 합니다. 그렇지 않으면 Elastic Beanstalk가 샘플 애플리케이션을 배포하지 못합니다.

Elastic Beanstalk 환경을 생성하려면

  1. 미리 구성된 다음 링크를 사용하여 Elastic Beanstalk 관리 콘솔을 엽니다.https://console.aws.amazon.com/elasticbeanstalk/#/newApplication?applicationName=scorekeep

  2. 아래에서플랫폼섹션, 설정플랫폼Java플랫폼 브랜치Java 8 running on 64bit Amazon Linux.

    참고

    현재 버전의 Scorekeep 응용 프로그램에는 Java 8이 필요합니다. Java 8이 더 이상 사용되지 않는 플랫폼 분기라는 경고를 받게 됩니다. 프로덕션 응용 프로그램에는 권장되지 않지만, X-Ray에 대해 배우기 위해 비프로덕션 용도로 Java 8에서 이 샘플 응용 프로그램을 실행할 수 있습니다.

  3. [Create application]을 선택하여 Java 8 SE 플랫폼을 실행하는 환경을 포함하는 애플리케이션을 생성합니다.

  4. 환경이 준비되면 콘솔이 환경 대시보드로 리디렉션합니다.

  5. 페이지 상단의 URL을 클릭하여 사이트를 엽니다.

이 환경의 인스턴스는 AWS X-Ray 서비스로 데이터를 전송할 권한이 필요합니다. 또한 샘플 애플리케이션은 Amazon S3 및 DynamoDB를 사용합니다. 기본 Elastic Beanstalk 인스턴스 프로파일을 수정하여 이러한 서비스를 사용할 권한을 포함시킵니다.

Elastic Beanstalk 환경에 X-Ray, Amazon S3 및 DynamoDB 권한을 추가하려면

  1. IAM 콘솔에서 Elastic Beanstalk 인스턴스 프로파일을 엽니다. aws-elasticbeanstalk-ec2-역할.

  2. Attach Policies(정책 연결)를 선택합니다.

  3. AttachAWSXrayFullAccess,아마존S3FullAccess, 및AmazonDynamoDBFullAccess역할을 담당합니다.

    참고

    전체 액세스 정책은 일반적인 용도에는 적합하지 않습니다. 보안 위험을 줄이기 위해 최소 권한을 가진 정책을 구성하는 방법에 대한 지침은 선택 사항: 최소 권한 정책 단원을 참조하십시오.

Elastic Beanstalk에 배포 및 추적 데이터 생성

Elastic Beanstalk 환경에 샘플 애플리케이션을 배포합니다. 샘플 애플리케이션은 Elastic Beanstalk 구성 파일을 사용하여 X-Ray에 사용할 환경을 구성하고 자동으로 사용하는 DynamoDB를 생성합니다.

소스 코드를 배포하려면

  1. 샘플 앱을 다운로드합니다. eb-java-scorekeep-xray-gettingstarted-v1.3.zip

  2. 열기Elastic Beanstalk 콘솔.

  3. 로 이동합니다.관리 콘솔환경의 환경에 대해 설명합니다.

  4. [Upload and Deploy]를 선택합니다.

  5. 업로드eb-java-scorekeep-xray-gettingstarted-v1.3.zip을 선택한 다음배포.

애플리케이션에는 프런트 엔드 웹 앱이 포함되어 있습니다. 웹 앱을 사용하여 API 트래픽을 생성하고 트레이스 데이터를 X-Ray로 전송합니다.

트레이스 데이터를 생성하려면

  1. 환경 대시보드에서 URL을 클릭하여 웹 앱을 엽니다.

  2. [Create]를 선택하여 사용자 및 세션을 생성합니다.

  3. [game name]을 입력하고, [Rules]를 [Tic Tac Toe]로 설정한 다음 [Create]를 선택하여 게임을 생성합니다.

  4. [Play]를 선택하여 게임을 시작합니다.

  5. 타일을 선택하여 동작을 하고 게임 상태를 변경합니다.

이들 각 단계에서 사용자, 세션, 게임, 이동 및 상태 데이터를 읽고 쓰기 위해 API에 대한 HTTP 요청과 DynamoDB에 대한 다운스트림 호출이 생성됩니다.

X-Ray 콘솔에서 서비스 맵 보기

X-Ray 콘솔에서 샘플 애플리케이션에 의해 생성된 서비스 맵 및 트레이스를 볼 수 있습니다.

X-Ray 콘솔을 사용하려면

  1. 의 서비스 맵 페이지를 엽니다.X-Ray.

  2. 콘솔에 애플리케이션이 전송하는 트레이스 데이터로부터 X-Ray가 생성하는 서비스 그래프가 표시됩니다.

서비스 맵은 웹 앱 클라이언트, Elastic Beanstalk에서 실행 중인 API, DynamoDB 서비스, 그리고 애플리케이션이 사용하는 각 DynamoDB 테이블을 보여줍니다. 애플리케이션에 대한 모든 요청에 대해, 요청이 API에 도달하고, 다운스트림 서비스를 요청하고, 완료될 때 매초 구성 가능한 최대 개수까지 요청이 트레이스됩니다.

서비스 그래프에서 노드를 선택하면 해당 노드로 트래픽을 생성한 요청의 트레이스를 볼 수 있습니다. 현재 Amazon SNS 노드는 노란색입니다. 드릴다운하여 이유를 확인하십시오.


        X-Ray 콘솔 서비스 맵 페이지

오류의 원인을 찾으려면

  1. 라는 노드를 선택합니다.Amazon SNS. 노드 세부 정보 패널이 표시됩니다.

  2. View traces(트레이스 보기)를 선택하여 Trace overview(트레이스 개요) 화면에 액세스합니다.

  3. [Trace list]에서 트레이스를 선택합니다. 이 트레이스는 수신 요청에 대한 응답이 아니라 시작 시 기록된 것이므로 메서드 또는 URL이 없습니다.

    
            추적 목록에서 추적 선택
  4. 페이지 하단의 Amazon SNS 세그먼트 내에서 오류 상태 아이콘을 선택하여예외SNS 하위 세그먼트에 대한 페이지입니다.

    
            오류 상태 아이콘을 선택하여 Amazon SNS 하위 세그먼트의 [Exceptions] 페이지를 엽니다.
  5. X-Ray SDK는 계측에서 발생하는 예외를 자동으로 캡처합니다.AWS스택 SDK 클라이언트와 레코딩.

    
            캡처된 예외와 기록된 스택 트레이스를 보여주는 Exceptions(예외) 탭

원인은 createSubscription 클래스에서 이루어진 WebConfig 호출에서 제공된 이메일 주소가 잘못된 것입니다. 이메일 주소를 수정해 봅시다.

Amazon SNS 알림 구성

Scoreep은 Amazon SNS 사용하여 사용자가 게임을 완료하면 알림을 전송합니다. 시작 시 애플리케이션은 환경 변수에 정의된 이메일 주소에 대한 구독을 생성하려고 시도합니다. 현재 이 호출이 실패하여 서비스 맵에서 Amazon SNS 노드가 빨간색으로 표시되는 것입니다. 환경 변수에서 알림 이메일을 구성하여 알림을 활성화하고 서비스 맵이 녹색으로 표시되게 합니다.

점수유지에 대한 Amazon SNS 알림을 구성하려면

  1. 열기Elastic Beanstalk 콘솔.

  2. 로 이동합니다.관리 콘솔환경의 환경에 대해 설명합니다.

  3. [Configuration]을 선택합니다.

  4. [Software Configuration]을 선택합니다.

  5. [Environment Properties]에서 기본값을 이메일 주소로 바꿉니다.

    
            환경 속성 설정
    참고

    기본값은 AWS CloudFormation 함수를 사용하여 구성 파일에 저장된 파라미터를 검색합니다(이 경우에는 더미 값).

  6. 적용을 선택합니다.

업데이트가 완료되면 Scorekeep이 다시 시작하고 SNS 주제에 대한 구독을 생성합니다. 이메일을 확인하여 게임을 완료할 때 업데이트를 보기 위한 구독을 확인합니다.

샘플 애플리케이션 탐색

샘플 애플리케이션은 Java용 X-Ray SDK를 사용하도록 구성된 Java용 HTTP 웹 API입니다. Elastic Beanstalk에 배포할 때 애플리케이션이 DynamoDB 테이블을 생성하고, Gradle을 사용하여 API를 컴파일하고, 루트 경로에서 정적으로 웹 앱을 처리하도록 nginx 프록시 서버를 구성합니다. 이와 동시에 Elastic Beanstalk는 로 시작하는 경로로 요청을 라우팅합니다./apiAPI로 이동합니다.

수신 HTTP 요청을 구성하기 위해 애플리케이션은 SDK가 제공하는 TracingFilter를 추가합니다.

예 SRC/메인/자바/스코어WebConfig.java - 서블릿 필터

import javax.servlet.Filter; import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter; ... @Configuration public class WebConfig { @Bean public Filter TracingFilter() { return new AWSXRayServletFilter("Scorekeep"); } ...

이 필터는 애플리케이션이 처리하는 모든 수신 요청에 대해 요청 URL, 메소드, 응답 상태, 시작 시간 및 종료 시간을 포함한 트레이스 데이터를 전송합니다.

또한 애플리케이션은 를 사용하여 DynamoDB에 대한 다운스트림 호출을 생성합니다.AWS SDK for Java. 이러한 호출을 계측하기 위해 응용 프로그램은AWS종속성으로 SDK 관련 하위 모듈을 구성하고, Java용 X-Ray SDK는 모두 자동으로 구성합니다.AWSSDK 클라이언트.

응용 프로그램은 다음을 사용합니다.Buildfile인스턴스에서 소스 코드를 빌드하는 파일Gradle및 aProcfileGradle이 생성하는 실행 가능한 JAR를 실행하는 파일입니다.BuildfileProcfile지원은 다음과 같은 기능입니다.Elastic Beanstalk Java SE 플랫폼.

예 Buildfile

build: gradle build

예 Procfile

web: java -Dserver.port=5000 -jar build/libs/scorekeep-api-1.0.0.jar

build.gradle 파일이 컴파일 도중 SDK 하위 모듈을 종속성으로 선언하여 Maven으로부터 이들 하위 모듈을 다운로드합니다.

예 build.gradle -- 종속성

... dependencies { compile("org.springframework.boot:spring-boot-starter-web") testCompile('org.springframework.boot:spring-boot-starter-test') compile('com.amazonaws:aws-java-sdk-dynamodb') compile("com.amazonaws:aws-xray-recorder-sdk-core") compile("com.amazonaws:aws-xray-recorder-sdk-aws-sdk") compile("com.amazonaws:aws-xray-recorder-sdk-aws-sdk-instrumentor") ... } dependencyManagement { imports { mavenBom("com.amazonaws:aws-java-sdk-bom:1.11.67") mavenBom("com.amazonaws:aws-xray-recorder-sdk-bom:2.11.0") } }

AWS SDK에서 생성되는 다운스트림 호출을 자동으로 구성하려면 core, AWS SDK 및 AWS SDK Instrumentor 하위 모듈만 있으면 됩니다.

X-Ray 데몬을 실행하기 위해 애플리케이션은 Elastic Beanstalk, 구성 파일의 다른 기능을 사용합니다. 구성 파일은 Elastic Beanstalk에게 요청 시 데몬을 실행하고 로그를 전송하도록 지정합니다.

예 .ebextensions/xray.config

option_settings: aws:elasticbeanstalk:xray: XRayEnabled: true files: "/opt/elasticbeanstalk/tasks/taillogs.d/xray-daemon.conf" : mode: "000644" owner: root group: root content: | /var/log/xray/xray.log

Java용 X-Ray SDK는 라는 클래스를 제공합니다.AWSXRay글로벌 레코더를 제공하는TracingHandler코드를 구성하는 데 사용할 수 있습니다. 전역 레코더를 구성하여 수신 HTTP 호출에 대해 세그먼트를 생성하는 AWSXRayServletFilter를 사용자 지정할 수 있습니다. 이 샘플은 WebConfig 클래스에 플러그인 및 샘플링 규칙을 사용하여 전역 레코더를 구성하는 정적 블록을 포함합니다.

예 SRC/메인/자바/스코어WebConfig.java - 레코더

import com.amazonaws.xray.AWSXRay; import com.amazonaws.xray.AWSXRayRecorderBuilder; import com.amazonaws.xray.plugins.EC2Plugin; import com.amazonaws.xray.plugins.ElasticBeanstalkPlugin; import com.amazonaws.xray.strategy.sampling.LocalizedSamplingStrategy; @Configuration public class WebConfig { ... static { AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder.standard().withPlugin(new EC2Plugin()).withPlugin(new ElasticBeanstalkPlugin()); URL ruleFile = WebConfig.class.getResource("/sampling-rules.json"); builder.withSamplingStrategy(new LocalizedSamplingStrategy(ruleFile)); AWSXRay.setGlobalRecorder(builder.build()); } }

이 예제는 빌더를 사용하여 sampling-rules.json 파일로부터 샘플링 규칙을 로드합니다. 샘플링 규칙은 SDK가 들어오는 요청의 세그먼트를 기록하는 비율에 따라 다릅니다.

예 src/main/java/resources/sampling-rules.json

{ "version": 1, "rules": [ { "description": "Resource creation.", "service_name": "*", "http_method": "POST", "url_path": "/api/*", "fixed_target": 1, "rate": 1.0 }, { "description": "Session polling.", "service_name": "*", "http_method": "GET", "url_path": "/api/session/*", "fixed_target": 0, "rate": 0.05 }, { "description": "Game polling.", "service_name": "*", "http_method": "GET", "url_path": "/api/game/*/*", "fixed_target": 0, "rate": 0.05 }, { "description": "State polling.", "service_name": "*", "http_method": "GET", "url_path": "/api/state/*/*/*", "fixed_target": 0, "rate": 0.05 } ], "default": { "fixed_target": 1, "rate": 0.1 } }

샘플링 규칙 파일은 4개의 사용자 지정 샘플링 규칙 및 기본 규칙을 정의합니다. 각 수신 요청에 대해, SDK가 사용자 지정 규칙을 정의된 순서대로 평가합니다. SDK는 요청의 메서드, 경로 및 서비스 이름과 일치하는 첫 번째 규칙을 적용합니다. Scorekeep의 경우, 첫 번째 규칙이 초당 1개 요청의 고정 타겟, 그리고 고정 타겟 충족 이후 1.0 즉, 100%의 요청 비율을 적용하여 모든 POST 요청(리소스 생성 호출)을 포착합니다.

다른 세 개의 사용자 지정 규칙은 고정 타겟 없이 5% 비율을 세션, 게임 및 상태 읽기(GET 요청)에 적용합니다. 이는 콘텐츠가 최신 상태를 유지하도록 하기 위해 프런트 엔드가 몇 초마다 자동으로 생성하는 주기적 호출에 대한 트레이스 수를 최소화합니다. 다른 모든 요청의 경우 파일이 초당 1개의 기본 요청 비율과 10% 비율을 정의합니다.

또한 샘플 애플리케이션은 수동 SDK 클라이언트 구성, 추가 하위 세그먼트 생성, 발신 HTTP 호출과 같은 고급 기능을 사용하는 방법도 보여줍니다. 자세한 정보는 AWS X-Ray 샘플 애플리케이션을 참조하십시오.

선택 사항: 최소 권한 정책

방금 이 자습서를 에 배포했습니다.아마존S3FullAccessAmazonDynamoDBFullAccess보안 정책. 그런데 전체 액세스 정책을 사용하는 것은 장기적으로 바람직하지 않습니다. 배포한 항목의 보안을 향상시키기 위해 다음 단계를 따라 권한을 업데이트합니다. IAM 정책의 보안 모범 사례에 대한 자세한 내용은 단원을 참조하십시오.의 ID 및 액세스 관리AWSX-Ray.

정책을 업데이트하려면 먼저 Amazon S3 및 DynamoDB 리소스의 ARN을 식별합니다. 그런 다음 두 개의 사용자 지정 IAM 정책에 ARN을 사용합니다. 마지막으로 이러한 정책을 인스턴스 프로파일에 적용합니다.

Amazon S3 리소스를 식별하려면

  1. AWS Config 콘솔의 Resources(리소스) 페이지를 엽니다.

  2. Under리소스 유형로 필터링Amazon S3 버킷를 사용하여 애플리케이션이 사용하는 Amazon S3 버킷의 ARN을 찾습니다.

  3. 선택을 선택합니다.리소스 식별자연결됨elasticbeanstalk.

  4. 전체 Amazon 리소스 이름(ARN)을 기록합니다.

  5. ARN을 다음 IAM 정책에 삽입합니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ScorekeepS3", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::elasticbeanstalk-region-0987654321" } ] }

DynamoDB 리소스를 식별하려면

  1. AWS Config 콘솔의 Resources(리소스) 페이지를 엽니다.

  2. Under리소스 유형로 필터링AWSDynamoDB 테이블를 사용하여 애플리케이션이 사용하는 DynamoDB 테이블의 ARN을 찾습니다.

  3. 선택을 선택합니다.리소스 식별자그 중 하나에 첨부되어 있습니다.scorekeep테이블.

  4. 전체 Amazon 리소스 이름(ARN)을 기록합니다.

  5. ARN을 다음 IAM 정책에 삽입합니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ScorekeepDynamoDB", "Effect": "Allow", "Action": [ "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:GetItem" ], "Resource": "arn:aws:dynamodb:region:1234567890:table/scorekeep-*" } ] }

    애플리케이션이 생성하는 테이블은 일관된 명명 규칙을 따릅니다. scorekeep-* 형식을 사용하여 해당 규칙을 따르는 모든 테이블을 나타낼 수 있습니다.

IAM 정책을 변경하려면

  1. IAM 콘솔에서 Elastic Beanstalk 인스턴스 프로파일을 엽니다. aws-elasticbeanstalk-ec2-역할.

  2. 를 제거합니다.아마존S3FullAccessAmazonDynamoDBFullAccess역할의 정책입니다.

  3. Attach policies(정책 연결), Create policy(정책 생성)을 차례로 선택합니다.

  4. JSON을 선택하고 이전에 생성한 정책 중 하나를 붙여 넣습니다.

  5. 정책 검토(Review policy)를 선택합니다.

  6. Name(이름)에 이름을 지정합니다.

  7. 정책 생성(Create policy)을 선택합니다.

  8. 새로 생성한 정책을 aws-elasticbeanstalk-ec2-role에 할당합니다.

  9. 이전에 생성한 두 번째 정책에 대해 이 절차를 반복합니다.

정리

Elastic Beanstalk 환경을 종료하여 Amazon EC2 인스턴스, DynamoDB 테이블 및 기타 리소스를 종료합니다.

Elastic Beanstalk 환경을 종료하려면

  1. 열기Elastic Beanstalk 콘솔.

  2. 로 이동합니다.관리 콘솔환경의 환경에 대해 설명합니다.

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

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

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

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

다음 단계

X-Ray 에 대해 자세히 알아봅니다.AWS X-Ray 개념.

자체 앱을 구성하려면 Java용 X-Ray SDK 또는 다른 X-Ray SDK 중 하나에 대해 자세히 알아보십시오.

X-Ray 데몬을 로컬 또는 에서 실행하려면AWS참조,AWS X-Ray 데몬.

에서 샘플 애플리케이션에 기여하려면GitHub참조,eb-java-scorekeep.