튜토리얼 - EC2로 Amazon ECS에서 Java 애플리케이션 추적 활성화

개요

본 튜토리얼에서는 AWS Elastic Container Service(ECS)의 클러스터에 설치된 샘플 Java 애플리케이션에서 추적을 활성화하는 단계를 살펴보겠습니다. 이 시나리오에서는 Datadog Agent도 클러스터에 설치됩니다.

호스트, 컨테이너, 다른 클라우드 인프라스트럭처, 다른 언어로 작성된 애플리케이션 등 다른 시나리오에 대해서는 다른 추적 활성화 튜토리얼을 참고하세요. 컨테이너나 EKS를 사용하는 튜토리얼 등 다른 튜토리얼에서는 Datadog에서 자동 계측과 커스텀 계측 간의 차이점을 단계별로 살펴봅니다. 이 튜토리얼은 커스텀 계측 예제부터 바로 다룹니다.

또한 중급 수준의 AWS 주제를 다루므로 AWS 네트워킹 및 애플리케이션에 대한 지식이 어느 정도 필요합니다. AWS에 익숙하지 않고 Datadog APM 설정의 기본 사항부터 배우고 싶다면 호스트 또는 컨테이너 튜토리얼을 살펴보세요.

자바(Java)에 대한 일반적인 종합 추적 설정 설명서의 경우 자바 애플리케이션 추적을 참조하세요.

사전 필수 조건

  • Datadog 계정과 조직 API 키
  • Git
  • Docker
  • Terraform
  • Amazon ECS
  • 이미지 호스팅용 AWS ECR 리포지토리
  • AdministratorAccess 권한이 있는 AWS IAM 사용자입니다. 액세스 키와 비밀 액세스 키를 사용하여 로컬 크리덴셜 파일에 프로파일을 추가해야 합니다. 자세한 내용은 AWS 크리덴셜 파일 및 크리덴셜 프로필 사용을 참고하세요.

샘플 Java 애플리케이션 설치

이 튜토리얼의 코드 샘플은 GitHub의 github.com/DataDog/apm-tutorial-java-host에서 찾을 수 있습니다. 시작하려면 리포지토리를 복제합니다.

git clone https://github.com/DataDog/apm-tutorial-java-host.git

리포지토리에는 Docker 컨테이너 내에서 실행되도록 미리 설정된 다중 서비스 Java 애플리케이션이 포함되어 있습니다. 컨테이너를 만드는 데 필요한 docker-compose YAML 파일은 docker 디렉토리에 있습니다. 이 튜토리얼에서는 애플리케이션의 컨테이너를 빌드하는 service-docker-compose-ECS.yaml 파일을 사용합니다.

notescalendar 디렉토리에는 Maven 또는 Gradle로 애플리케이션을 빌드하는 두 세트의 Dockerfile이 있습니다. 이 튜토리얼에서는 Maven 빌드를 사용하지만, Gradle에 더 익숙하다면 해당 빌드 명령의 변경 사항을 사용하여 Maven 빌드를 사용할 수 있습니다.

샘플 애플리케이션은 두 개의 API를 사용하는 간단한 다중 서비스 Java 애플리케이션으로, 하나는 notes 서비스용이고 다른 하나는 calendar 서비스용입니다. notes 서비스는 인메모리 H2 데이터베이스에 저장된 메모에 대한 GET, PUT, DELETE 엔드포인트를 갖습니다. calendar 서비스는 요청을 받아 메모에 사용할 임의의 날짜를 반환할 수 있습니다. 두 애플리케이션 모두 자체 Docker 이미지를 가지고 있으며, Amazon ECS에 별도의 서비스로 배포합니다. 각 서비스에는 고유한 작업과 컨테이너가 있습니다. ECS는 애플리케이션 이미지 리포지토리인 ECR에서 이미지를 가져오고, 빌드 후 이미지를 게시합니다.

초기 ECS 설정

이 애플리케이션을 사용하려면 AWS 프로파일(ECS 클러스터를 생성하고 ECR에서 읽을 수 있는 올바른 권한이 이미 설정됨), AWS 리전, AWS ECR 리포지토리를 추가하는 등 초기 설정이 필요합니다.

terraform/EC2/global_constants/variables.tf를 엽니다. 아래 변수 값을 올바른 AWS 계정 정보로 바꿉니다.

output "aws_profile" {
    value = "<AWS_PROFILE>"
    sensitive = true
}

output "aws_region" {
    value = "<AWS_REGION>"
    sensitive = true
}

output "aws_ecr_repository" {
    value = "<AWS_ECR_REPOSITORY_URL>"
    sensitive = true
}

애플리케이션 이미지 빌드 및 업로드

컨테이너 이미지 레지스트리인 Amazon ECR에 익숙하지 않다면 AWS CLI와 함께 Amazon ECR 사용을 참고해 보세요.

샘플 프로젝트 /docker 디렉토리에서 다음 명령을 실행합니다.

  1. 다음 명령에 사용자 이름과 비밀번호를 입력하여 ECR에 인증합니다.

    aws ecr get-login-password --region us-east-1 | docker login --username <YOUR_AWS_USER> --password-stdin <USER_CREDENTIALS>

  2. 샘플 앱에 대한 Docker 이미지를 빌드하고 플랫폼 설정을 사용자 설정에 맞게 조정합니다.

    DOCKER_DEFAULT_PLATFORM=linux/amd64 docker-compose -f service-docker-compose-ECS.yaml build

  3. ECR 대상으로 컨테이너를 태그합니다.

    docker tag docker_notes:latest <ECR_REGISTRY_URL>:notes
    docker tag docker_calendar:latest <ECR_REGISTRY_URL>:calendar

  4. 컨테이너를 ECR 레지스트리에 업로드합니다.

    docker push <ECR_REGISTRY_URL>:notes
    docker push <ECR_REGISTRY_URL>:calendar

애플리케이션(추적 기능 비활성화)은 컨테이너화되어 ECS에서 가져올 수 있습니다.

애플리케이션 배포

애플리케이션을 시작하고 추적 없이 몇 가지 요청을 전송해 보세요. 애플리케이션이 어떻게 작동하는지 확인 후 추적 라이브러리와 Datadog Agent를 사용하여 애플리케이션을 계측합니다.

시작하려면 Terraform 스크립트를 사용하여 Amazon ECS에 배포합니다.

  1. terraform/EC2/deployment 디렉터리에서 다음 명령을 실행합니다.

    terraform init
    terraform apply
    terraform state show 'aws_alb.application_load_balancer'
    

    참고: terraform apply 명령이 CIDR 블록 메시지를 반환하는 경우, IP 주소를 가져오는 스크립트가 로컬 머신에서 작동하지 않은 것입니다. 이 문제를 해결하려면 terraform/EC2/deployment/security.tf 파일에서 값을 수동으로 설정하세요. load_balancer_security_groupingress 블록 안에서 주석 처리된 cidr_blocks 줄을 바꾸고, 주석 처리가 해제된 예제 줄을 머신의 IP4 주소로 업데이트합니다.

  2. 로드 밸런서의 DNS 이름을 기록해 두세요. 샘플 앱에 대한 API 호출에서 해당 기본 도메인을 사용합니다. 인스턴스가 시작될 때까지 몇 분 정도 기다리세요.

  3. 다른 터미널을 열고 앱을 실행하기 위한 API 요청을 보냅니다. 노트 애플리케이션은 데이터를 동일한 컨테이너에서 실행 중인 인메모리 H2 데이터베이스에 저장하는 REST API입니다. 다음과 같이 몇 가지 명령을 보내세요.

    curl -X GET 'BASE_DOMAIN:8080/notes'
    []
    curl -X POST 'BASE_DOMAIN:8080/notes?desc=hello'
    {"id":1,"description":"hello"}
    curl -X GET 'BASE_DOMAIN:8080/notes?id=1'
    {"id":1,"description":"hello"}
    curl -X GET 'BASE_DOMAIN:8080/notes'
    [{"id":1,"description":"hello"}]
    curl -X PUT 'BASE_DOMAIN:8080/notes?id=1&desc=UpdatedNote'
    {"id":1,"description":"UpdatedNote"}
    curl -X GET 'BASE_DOMAIN:8080/notes'
    [{"id":1,"description":"UpdatedNote"}]
    curl -X POST 'BASE_DOMAIN:8080/notes?desc=NewestNote&add_date=y'
    {"id":2,"description":"NewestNote with date 12/02/2022."}

    이 명령은 notescalendar 서비스를 모두 호출합니다.

  4. 애플리케이션이 실행되는 것을 확인한 후 다음 명령을 실행하여 애플리케이션을 중지하고 AWS 리소스를 정리하여 추적을 활성화합니다.

    terraform destroy

추적 활성화

이제 Java 애플리케이션이 작동하므로 추적을 활성화하도록 구성하면 됩니다.

  1. 프로젝트에 Java 추적 패키지를 추가합니다. Agent는 EC2 인스턴스에서 실행되므로 Dockerfile이 올바르게 설정되었는지 확인하세요. 아무것도 추가 설치할 필요가 없습니다. notes/dockerfile.notes.maven 파일을 열고 dd-java-agent를 다운로드하는 줄의 주석 처리를 해제합니다.

    RUN curl -Lo dd-java-agent.jar 'https://dtdg.co/latest-java-tracer'
    
  2. 같은 notes/dockerfile.notes.maven 파일 내에서 추적 없이 실행할 ENTRYPOINT 줄을 주석 처리합니다. 그런 다음 추적 기능을 활성화하여 애플리케이션을 실행하는 ENTRYPOINT 줄의 주석 처리를 제거합니다.

    ENTRYPOINT ["java" , "-javaagent:../dd-java-agent.jar", "-Ddd.trace.sample.rate=1", "-jar" , "target/notes-0.0.1-SNAPSHOT.jar"]
    

    다른 서비스인 calendar에서도 이 단계를 반복합니다. calendar/dockerfile.calendar.maven을 열고 추적 없이 실행하려는 ENTRYPOINT 줄을 주석 처리합니다. 그런 다음 추적 기능을 활성화하여 애플리케이션을 실행하는 ENTRYPOINT 줄의 주석 처리를 제거합니다.

    ENTRYPOINT ["java", "-javaagent:../dd-java-agent.jar", "-Ddd.trace.sample.rate=1", "-jar" , "target/calendar-0.0.1-SNAPSHOT.jar"]
    

    이제 두 서비스 모두에서 자동 계측을 사용할 수 있습니다.

    참고: 이 샘플 명령의 플래그, 특히 샘플 속도는 이 튜토리얼이 적용되지 않은 환경에는 적합하지 않을 수 있습니다. 실제 환경에서 어떤 플래그를 사용해야 하는지에 대해 살펴보려면 추적 설정을 참고하세요.
  3. 자동 계측은 편리하지만, 때로는 더 세분화된 스팬이 필요할 수 있습니다. Datadog의 Java DD Trace API를 사용하면 어노테이션이나 코드를 사용하여 코드 내에서 스팬을 지정할 수 있습니다. 코드에 어노테이션을 추가하여 샘플 방식을 추적해 보세요.

    /notes/src/main/java/com/datadog/example/notes/NotesHelper.java를 엽니다. 이 예제에는 주석 처리된 코드가 포함되어 있으며, 코드에서 커스텀 추적을 설정하는 다양한 방법을 보여줍니다.

  4. 수동 추적을 지원하기 위해 라이브러리를 가져오는 줄의 주석 처리를 제거합니다.

    import datadog.trace.api.Trace;
    import datadog.trace.api.DDTags;
    import io.opentracing.Scope;
    import io.opentracing.Span;
    import io.opentracing.Tracer;
    import io.opentracing.tag.Tags;
    import io.opentracing.util.GlobalTracer;
    import java.io.PrintWriter;
    import java.io.StringWriter
    
  5. 두 개의 공개 프로세스를 수동으로 추적하는 줄의 주석 처리를 제거합니다. 이는 트레이스에서 @Trace 어노테이션을 사용하여 operationNameresourceName을 지정하는 방법을 보여줍니다.

    @Trace(operationName = "traceMethod1", resourceName = "NotesHelper.doLongRunningProcess")
    // ...
    @Trace(operationName = "traceMethod2", resourceName = "NotesHelper.anotherProcess")
    
  6. 애플리케이션의 특정 코드 블록에 대해 별도의 스팬을 생성할 수도 있습니다. 스팬 내에 서비스 및 리소스 이름 태그와 오류 처리 태그를 추가합니다. 이러한 태그를 추가하면 Datadog 시각화에서 스팬과 메트릭을 보여주는 플레임 그래프가 생성됩니다. 프라이빗 메서드를 수동으로 추적하는 줄의 주석 처리를 제거합니다.

            Tracer tracer = GlobalTracer.get();
            // Tags can be set when creating the span
            Span span = tracer.buildSpan("manualSpan1")
                .withTag(DDTags.SERVICE_NAME, "NotesHelper")
                .withTag(DDTags.RESOURCE_NAME, "privateMethod1")
                .start();
            try (Scope scope = tracer.activateSpan(span)) {
                // Tags can also be set after creation
                span.setTag("postCreationTag", 1);
                Thread.sleep(30);
                Log.info("Hello from the custom privateMethod1");
    

    그리고 오류에 태그를 설정하는 줄도 있습니다.

         } catch (Exception e) {
             // Set error on span
             span.setTag(Tags.ERROR, true);
             span.setTag(DDTags.ERROR_MSG, e.getMessage());
             span.setTag(DDTags.ERROR_TYPE, e.getClass().getName());
    
             final StringWriter errorString = new StringWriter();
             e.printStackTrace(new PrintWriter(errorString));
             span.setTag(DDTags.ERROR_STACK, errorString.toString());
             Log.info(errorString.toString());
         } finally {
             span.finish();
         }
    
  7. 수동 추적을 위한 종속성을 구성하는 notes/pom.xml 줄을 열고 주석 처리를 제거하여 Maven 빌드를 업데이트하세요. dd-trace-api 라이브러리는 @Trace 어노테이션에 사용되고, opentracing-utilopentracing-api는 수동 스팬 생성에 사용됩니다.

  8. [Universal Service Tags는 다양한 버전 및 배포 환경에서 추적된 서비스를 식별하여 Datadog 내에서 상관 관계를 분석하고 검색 및 필터링에 사용할 수 있도록 합니다. Unified Service Tagging에 사용되는 세 가지 환경 변수는 DD_SERVICE, DD_ENV, DD_VERSION입니다. ECS에 배포된 애플리케이션의 경우 이러한 환경 변수는 컨테이너의 작업 정의 내에서 설정됩니다.

    이 튜토리얼의 /terraform/EC2/deployment/main.tf 파일에는 notes 및 calendar 애플리케이션에 다음 환경 변수가 이미 정의되어 있습니다. 예를 들어, notes의 경우는 다음과 같습니다.

    ...
    
       name : "notes",
       image : "${module.settings.aws_ecr_repository}:notes",
       essential : true,
       portMappings : [
         {
           containerPort : 8080,
           hostPort : 8080
         }
       ],
       memory : 512,
       cpu : 256,
       environment : [
         {
           name : "CALENDAR_HOST",
           value : "localhost"
         },
         {
           name : "DD_SERVICE",
           value : "notes"
         },
         {
           name : "DD_ENV",
           value : "dev"
         },
         {
           name : "DD_VERSION",
           value : "0.0.1"
         }
       ],
       dockerLabels : {
         "com.datadoghq.tags.service" : "notes",
         "com.datadoghq.tags.env" : "dev",
         "com.datadoghq.tags.version" : "0.0.1"
       },
       ...
    

    calendar에 대한 환경 변수:

    ...
       name : "calendar",
       image : "${module.settings.aws_ecr_repository}:calendar",
       essential : true,
       environment : [
         {
           name : "DD_SERVICE",
           value : "calendar"
         },
         {
           name : "DD_ENV",
           value : "dev"
         },
         {
           name : "DD_VERSION",
           value : "0.0.1"
         }
       ],
       dockerLabels : {
         "com.datadoghq.tags.service" : "calendar",
         "com.datadoghq.tags.env" : "dev",
         "com.datadoghq.tags.version" : "0.0.1"
       },
       ...
    

    동일한 Universal Service Tags service, env, version값에 대한 Docker 레이블이 설정된 것을 확인할 수 있습니다. 이를 통해 애플리케이션이 실행 중일 때 Docker 메트릭을 가져올 수 있습니다.

추적 설정

Java 추적 라이브러리는 Java에 내장된 Agent 및 모니터링 지원을 사용합니다. Dockerfile의 플래그 -javaagent:../dd-java-agent.jar는 JVM에 Java 추적 라이브러리의 위치를 ​​알려 Java Agent로 실행할 수 있도록 합니다. Java Agent에 대한 자세한 내용은 https://www.baeldung.com/java-instrumentation에서 확인하세요.

dd.trace.sample.rate 플래그는 이 애플리케이션의 샘플링 속도를 설정합니다. Dockerfile의 ENTRYPOINT 명령은 값을 1로 설정합니다. 즉, 모든 서비스 요청의 100%가 분석 및 표시를 위해 Datadog 백엔드로 전송됩니다. 저용량 테스트 애플리케이션에는 적합하나 프로덕션 환경이나 고용량 환경에서는 데이터 양이 매우 많아질 수 있어 권장하지 않습니다. 대신 일부 요청을 샘플링할 수 있습니다. 0에서 1 사이의 값을 선택하세요. 예를 들어, -Ddd.trace.sample.rate=0.1는 요청의 10%에 대한 트레이스를 Datadog으로 전송합니다. 추적 구성 설정샘플링 메커니즘에 대해 자세히 알아보세요.

명령에서 샘플링 속도 플래그가 -jar 플래그 앞에 나타나는 것을 확인할 수 있습니다. 이는 이 플래그가 애플리케이션이 아닌 Java 가상 머신의 파라미터이기 때문입니다. 애플리케이션에 Java Agent를 추가할 때 플래그를 올바른 위치에 지정해야 합니다.

애플리케이션 이미지를 다시 빌드한 후 업로드

이전과 동일한 단계를 사용하여 추적을 활성화하고 이미지를 다시 빌드합니다:

aws ecr get-login-password --region us-east-1 | docker login --username <YOUR_AWS_USER> --password-stdin <USER_CREDENTIALS>
DOCKER_DEFAULT_PLATFORM=linux/amd64 docker-compose -f service-docker-compose-ECS.yaml build
docker tag docker_notes:latest <ECR_REGISTRY_URL>:notes
docker tag docker_calendar:latest <ECR_REGISTRY_URL>:calendar
docker push <ECR_REGISTRY_URL>:notes
docker push <ECR_REGISTRY_URL>:calendar

추적 기능이 활성화된 다중 서비스 애플리케이션은 컨테이너화되어 ECS에서 가져올 수 있습니다.

ECS에 Agent 배포하기

그런 다음 Datadog Agent를 배포하여 계측된 애플리케이션에서 트레이스 데이터를 수집합니다. ECS 환경의 경우, Agent를 실행할 때 아무것도 다운로드할 필요가 없습니다. 대신 다음 단계에 따라 Datadog Agent 작업 정의를 생성하고, 작업 정의를 AWS에 업로드하고, 해당 작업 정의를 활용하여 클러스터에 Agent 서비스를 생성합니다.

  1. APM 추적이 활성화된 상태에서 Agent를 실행하기 위해 기본 설정을 제공하는 terraform/EC2/dd_agent_task_definition.json을 엽니다. Datadog 조직 API 키와 Datadog 사이트를 적절히 입력합니다.

    ...
    "environment": [
      {
        "name": "DD_API_KEY",
        "value": "<API_KEY_HERE>"
      },
      {
        "name": "DD_SITE",
        "value": "datadoghq.com"
      },
      ...
    
  2. Agent 작업 정의를 등록하고 프로파일과 리전을 사용자 정보로 변경합니다. terraform/EC2 폴더에서 다음을 실행합니다.

    aws ecs register-task-definition --cli-input-json file://dd_agent_task_definition.json --profile <AWS_PROFILE> --region <AWS_REGION>
    

    출력값에서 taskDefinitionArn 값을 기록해 둡니다. 이는 다음 단계에서 사용됩니다.

  3. 이 명령을 실행하여 클러스터에 Agent 서비스를 생성하고, 이전 단계의 작업 정의 ARN, AWS 프로파일 및 AWS 리전을 적용합니다.

    aws ecs create-service --cluster apm-tutorial-ec2-java --task-definition <TASK_DEFINITION_ARN> --launch-type EC2 --scheduling-strategy DAEMON --service-name datadog-agent --profile <PROFILE> --region <AWS_REGION>
    

앱을 실행하여 트레이스 확인

애플리케이션을 다시 배포하고 API를 실행합니다.

  1. 이전과 동일한 terraform 명령을 사용하여 Amazon ECS에 애플리케이션을 다시 배포합니다. terraform/EC2/deployment 디렉터리에서 다음 명령을 실행합니다.

    terraform init
    terraform apply
    terraform state show 'aws_alb.application_load_balancer'
    
  2. 로드 밸런서의 DNS 이름을 기록해 두세요. 샘플 앱에 대한 API 호출에서 해당 기본 도메인을 사용하게 됩니다.

  3. 인스턴스가 시작될 때까지 몇 분 정도 기다린 후 애플리케이션 컨테이너가 준비되었는지 확인하기 위해 몇 분 정도 기다립니다. 그런 다음 curl 명령을 실행하여 계측된 앱을 테스트해 보세요.

    curl -X GET 'BASE_DOMAIN:8080/notes'
    []
    curl -X POST 'BASE_DOMAIN:8080/notes?desc=hello'
    {"id":1,"description":"hello"}
    curl -X GET 'BASE_DOMAIN:8080/notes?id=1'
    {"id":1,"description":"hello"}
    curl -X GET 'BASE_DOMAIN:8080/notes'
    [{"id":1,"description":"hello"}]
    curl -X PUT 'BASE_DOMAIN:8080/notes?id=1&desc=UpdatedNote'
    {"id":1,"description":"UpdatedNote"}
    curl -X GET 'BASE_DOMAIN:8080/notes'
    [{"id":1,"description":"hello"}]
    curl -X POST 'BASE_DOMAIN:8080/notes?desc=NewestNote&add_date=y'
    {"id":2,"description":"NewestNote with date 12/02/2022."}
    이 명령은 notescalendar 서비스를 모두 호출합니다.
  4. 잠시 기다린 다음 Datadog에서 APM > 트레이스로 이동합니다. API 호출과 대응되는 트레이스 목록을 확인할 수 있습니다.

    APM Trace Explore 샘플 앱에서의 트레이스

    h2는 이 튜토리얼에 대해 내장된 인메모리 데이터베이스이며, notes는 Spring Boot 애플리케이션입니다. 추적 목록에는 모든 스팬, 시작 시점, 스팬과 함께 추적된 리소스, 그리고 소요 시간이 표시됩니다.

몇 분이 지난 후에도 트레이스를 확인할 수 없다면 트레이스 검색 필드에서 모든 필터를 해제합니다. 때론 사용하지 않는 ENV 등 환경 변수에 대해 필터링되었을 수 있습니다.

트레이스 검사

트레이스 페이지에서 POST /notes 트레이스를 클릭해 각 스팬에 걸리는 시간 및 스팬 완료 전 발생한 다른 스팬을 나타내는 플레임(Flame) 그래프를 확인할 수 있습니다. 그래프 상단의 막대는 이전 화면에서 선택한 스팬입니다. (이 경우 메모 애플리케이션의 최초 엔트리 포인트입니다.)

바의 너비는 완료되는 데 소요된 시간을 나타냅니다. 낮은 깊이의 막대는 높은 깊이의 막대 수명 동안 완료된 스팬을 나타냅니다.

Trace Explorer에서 GET 요청 중 하나를 클릭하면 다음과 같은 플레임 그래프가 표시됩니다.

커스텀 계측이 포함된 GET 추적에 대한 플레임 그래프.

수동 스팬을 생성한 privateMethod는 다른 호출과 별도의 블록으로 표시되며 다른 색상으로 강조 표시됩니다. 주석@Trace 어노테이션을 사용한 다른 메서드는 GET 요청(notes 애플리케이션)과 동일한 서비스와 색상으로 표시됩니다. 커스텀 계측은 코드의 핵심 부분을 강조 표시하고 모니터링해야 할 때 유용합니다.

자세한 정보는 커스텀 계측을 참조하세요.

단일 서비스 추적은 좋은 시작이지만, 추적의 진정한 가치는 요청이 서비스 내에서 어떻게 흐르는지 확인하는데 있습니다. 이를 _분산 추적_이라고 합니다. note에 날짜를 추가한 마지막 API 호출의 트레이스를 클릭하면 두 서비스 간의 분산 트레이스를 확인할 수 있습니다.

분산 추적을 보여주는 플레임 그래프

notes 애플리케이션에서는 아무것도 변경하지 않았습니다. Datadog은 notes에서 calendar로의 HTTP 호출에 사용되는 okHttp라이브러리와 notescalendar에서 HTTP 요청을 수신하는 데 사용되는 Jetty 라이브러리를 모두 자동으로 계측합니다. 이를 통해 트레이스 정보를 한 애플리케이션에서 다른 애플리케이션으로 전달하여 분산 트레이스를 캡처할 수 있습니다.

탐색이 끝나면 모든 리소스를 정리하고 배포를 삭제하세요.

aws ecs delete-service --cluster apm-tutorial-ec2-java --service datadog-agent --profile <PROFILE> --region <REGION>
terraform destroy

트러블슈팅

예상대로 트레이스를 수신하지 않으면 Java 트레이서의 디버그 모드를 설정합니다. 자세한 내용은 디버그 모드 활성화에서 확인하세요.

참고 자료

PREVIEWING: julio.guerra/aap-setup-page-grid