Amazon Web Services 한국 블로그

AWS X-Ray – 분산 애플리케이션 추적 및 디버깅 서비스

지난 11월 미국 대통령상 수상자인 Grace Hopper디버깅(Debugging)이라는 용어를 처음으로 사용한 분입니다. 이것은 프로그램에서 오류를 식별하고 제거하는 과정을 말합니다.

저도 컴퓨터에서 실제 버그를 추출하지는 못했지만, 예전에는 어셈블리 언어 프로그램을 디버깅 하는 데 많은 시간을 할애했습니다. 당시 디버깅은 코드를 한 단계 수행하고, 각 단계 전후의 각 프로세서 레지스터 내용을 검사하여 실제로 발생한 상황과 일치하는지 계속 확인했습니다. 상당히 지루한 과정이지만, 버그를 숨기지는 못하며 코드 작동 방식에 대한 심층적인 이해를 할 수 있었다는 보람이었습니다. 나중에 single-stepping은 출력(hello, stderr)을 디버깅하고 거기에서 로그 파일과 로그 분석 도구를 다시 디버깅하였습니다.

지난 십 년 동안 복잡한 분산 시스템이 등장하면서, 디버깅을 하는 방법도 변화되어 새로운 의미를 가지게 되었습니다. 개별 기능과 모듈이 예상대로 작동하는지 확인하는 단위 테스트와 함께 확장 시 실행 패턴도 검토해야 하는 문제가 있습니다. 클라우드 컴퓨팅, 마이크로 서비스 및 비동기식 알림을 기반한 새로운 아키텍처가 결합되어, 수백 혹은 수천 개의 서비스가 함께 움직이는 분산 시스템이 생겨났습니다. 이러한 복잡한 시스템에서 성능 문제를 확인해야 하는 문제는 점점 커지고 있는데, 이는 개별 서비스 수준에서 관찰한 결과를 의미있는 최상위 결과로 집계하는 데 어려움이 있기 때문입니다. 개발자가 EC2 인스턴스, ECS 컨테이너, 마이크로 서비스, AWS 데이터베이스 및 메시징 서비스를 통과 할 때 “스레드를 따라 갈(follow-the-thread)” 수 있는 쉬운 방법은 없었습니다.

이 문제를 해결해 봅시다!

AWS X-Ray 서비스 소개
오늘 AWS X-Ray 에 대해 소개합니다. 이를 통해 앞서 언급했던 모든 부분에서 처음부터 끝까지 요청을 추적 할 수 있습니다. 분산 시스템을 이해하고 확장하려는 경우, 발생하는 문제를 해결하고 이를 수행하기 위해 필요한 정보와  인사이트를 제공합니다.

X-Ray는 EC2 인스턴스 (ECS 컨테이너 포함), AWS Elastic Beanstalk, Amazon API Gateway에서 실행되는 코드를 추적하고 데이터를 캡처합니다. 쓰레드 추적(follow-the-thread)을 위해 HTTP 헤더 (고유 ID 포함)를 추가하고, 다음 번 티어에 요청 처리 시 헤더를 전달하는 방식으로 구현합니다. 각 엔드포인트에서 수집 된 데이터는 세그먼트(Segment)라고하며, JSON 데이터로 저장합니다.

각 세그먼트는 작업 단위를 나타내며, 요청 및 응답 타이밍과 더 작은 작업 단위를 나타내는 선택적 하위 세그먼트 (적절한 도구를 제공 할 경우, 프로그램 코드까지)를 포함합니다. 통계적으로 의미있는 세그먼트 샘플은 AWS X-Ray (데몬 프로세스가 EC2 인스턴스 및 컨테이너 내부에서 처리)에서  트레이스(Trace, 공통 ID를 공유하는 세그먼트 그룹)를 만듭니다. 트레이스와 세그먼트는 서비스간 관계를 시각적으로 표시하는 그래프 를 만들기 위해  사용됩니다.

위의 모든 것이 잘 구성되어 있는 지 보려면, X-Ray 콘솔을 살펴 보면 됩니다.  콘솔이 제공하는 몇 가지 샘플 앱을 사용할 수 있습니다.

각 샘플 앱은 AWS CloudFormation 템플릿에 의해 실행할 수 있습니다. 위의 앱은 최신 AWS SDK를 사용합니다. 이 SDK는 X-Ray를 인식하고 엑스레이 세그먼트를 수집 및 저장하는 프로세스에 참여합니다. Java, Node.js 및 .NET SDK에서 X-Ray 지원이 됩니다. 나중에 가능한 한 빨리 업데이트 할 것입니다.

자신의 애플리케이션을 측정하고 실행할 준비가 되면, X-Ray Console에서 수행해야 할 작업을 표시합니다.

우선 두 개의 앱을 출시하고, 잠시 실행 한 다음 X-Ray 콘솔로 넘어 가서 무슨 일이 일어나고 있는지 확인했습니다. 아래 Service Map은  최상위 레벨 구성도를 제공합니다.

날짜 / 시간 범위 선택기를 사용하여 관심 있는 시간 프레임을 볼 수 있습니다.

그래프의 모든 노드를 클릭하여 그 뒤에 있는 흔적을 살펴볼 수 있습니다.

페이지 상단에 보면, 회원 가입이 적고 (4.12 %) 다른 두 작업보다 대기 시간이 더 길다는 것을 알 수 있습니다. 먼저 URL별로 정렬하여 회원 가입을 그룹화 한 다음, 특정 트레이스에 기여하는 세그먼트를 모니터링 합니다. 다음은 DynamoDB 및 SNS에 대한 호출을 포함하는 예제입니다.

위에서 보면  특정 진입 점에서 호출 될 때 DynamoDB에 대한 호출이 오래 걸리는 것을 나타냅니다. DynamoDB에 대한 호출은 한 자리 밀리 초 단위로 실행되므로 자세히 살펴 봐야합니다. 메타 열에 초점을 맞추고 문서 아이콘을 클릭 한 다음 리소스 탭을 검토하여 진행 상황을 확인합니다.

클라이언트 SDK는 재시도 중에 일부를 수행하는 것처럼 보입니다. 대부분의 경우 테이블에 추가 읽기 또는 쓰기 처리량이 제공되어야 하기 때문입니다.

X-Ray UI는 필터식 개념을 기반으로 합니다. 몇 가지 주요 기능을 위한 전용 UI 요소가 있지만 나머지 부분은(개발자 지향 도구에 적합) 페이지 상단의 텍스트 상자에 간단히 입력하는 자유 형식 필터로 제공됩니다. 다음은 몇 가지 간단한 예제입니다.

  • responsetime > 5 – Response time more than 5 seconds.
  • duration >= 5 AND duration <= 8 – Duration between 5 and 8 seconds.
  • service("dynamodb") – Requests that include a call to DynamoDB.

또한, 날짜, 추적 ID, HTTP 메소드  및 상태 코드, URL, 사용자 에이전트, 클라이언트 IP 주소 등이 포함됩니다. 지금까지 본 것보다 더 많은 기능은 X-Ray API 및 AWS  CLI를 참조하십시오. 이를 통해 많은 종류의 고급 도구, 시각화 및 파트너 기회가 열립니다.

정식 출시
AWS X-Ray는 오늘 부터 12개의 모든 공개 AWS 리전에서 미리보기 형식으로 제공합니다.

Jeff

이 글은 AWS re:Invent 2016 신규 출시 소식으로 AWS X-Ray – See Inside of Your Distributed Application의 한국어 번역입니다. re:Invent 출시 소식에 대한 자세한 정보는 12월 온라인 세미나를 참고하시기 바랍니다.