Category: AWS X-Ray
AWS X-Ray, AWS Lambda 지원 공식 출시
AWS X-Ray에 대한 AWS Lambda 지원 기능을 출시했습니다. 지난 샌프란시스코 서밋에서 정식 출시한 AWS X-Ray는 분산 응용 프로그램의 실행 및 성능 동작을 분석하는 AWS 서비스입니다. 전통적인 디버깅 방식은 여러 서비스가 실행되는 독립 구성 요소가 있는 마이크로 서비스 기반 응용 프로그램에서는 잘 작동하지 않습니다. X-Ray를 사용하면 응용 프로그램의 대기 시간을 줄임으로써 오류, 속도 저하 및 시간 초과를 신속하게 진단 할 수 있습니다. 간단한 람다 기반 응용 프로그램을 작성하고 분석함으로써 우리의 응용 프로그램에서 X-Ray를 잠깐 사용하는 방법을 보여 드리겠습니다.
바로 시작하기를 원할 경우, 람다 함수 페이지로 이동하여 추적 기능을 활성화하여 기존 람다 함수에 대해서도 X-Ray 추적 기능을 쉽게 켤 수 있습니다.
또는 AWS 명령 행 인터페이스 (CLI)에서 함수의 tracing-config
를 업데이트하여 시작 가능합니다. (--function-name
도 전달해야 함)
$ aws lambda update-function-configuration --tracing-config '{"Mode": "Active"}'
추적 모드가 활성화되면 Lambda는 함수에 대해 즉시 추적을 시작합니다. 그렇지 않으면, 업스트림 서비스에서 명시 적으로 지시 한 경우에만 함수가 추적됩니다. 추적 기능을 사용하면 응용 프로그램 리소스와 그 사이의 연결 을 시각적으로 나타냅니다. 주목해야 할 것은 X-Ray 데몬이 람다 함수의 리소스 중 일부를 사용한다는 것입니다. 메모리 제한에 가까워지면, Lambda는 메모리 부족 오류가 발생하지 않도록 X-Ray 데몬을 중단 시킬 수 있습니다.
몇 가지 다른 서비스를 사용하는 빠른 애플리케이션을 구축하여 신규 연동 테스트를 해 보겠습니다.
스마트폰에서 찍은 셀카가 많아서 이를 분석해 보려고 합니다. Amazon Simple Storage Service (S3) 버킷에 업로드 된 새로운 이미지에 응답하는 Java 8 런타임을 사용하여 간단한 Lambda 함수를 작성합니다. 이 샘플 앱은 사진에 Amazon Rekognition 을 사용하여, 이미지 내 객체를 인식하고 검색된 레이블을 Amazon DynamoDB에 저장합니다.
먼저 몇 가지 X-Ray 서비스에서 사용하는 용어를 살펴보겠습니다.
X-Ray가 서비스 그래프를 생성하여 추적 결과를 구성한다고 쉽게 이해할 수 있습니다. 서비스 그래프는 우리가 위에서 볼 수 있는 멋진 시각적 표현을 만듭니다 (여러 가지 색상이 다양한 요청 응답을 나타냅니다). 응용 프로그램을 실행하는 컴퓨팅 리소스는 segment의 형태로 수행 중인 작업에 대한 데이터를 보냅니다. 하위 데이터를 작성하여 해당 데이터에 대한 주석을 추가하고, 세분화 된 타이밍을 추가 할 수 있습니다. 응용 프로그램을 통한 요청 경로는 traces로 추적합니다. traces는 단일 요청으로 생성 된 모든 segment를 수집합니다. 즉, S3에서 들어오는 Lambda 이벤트를 DynamoDB로 쉽게 추적 할 수 있으며 오류 및 대기 시간이 어느 부분에 있는지 파악할 수 있습니다.
이제 selfies-bucket
이라는 S3 버킷, selfies-table
이라는 DynamoDB 테이블, 그리고 Lambda 함수를 생성합니다. ObjectCreated의 S3 버킷에 대한 Lambda 함수에 트리거를 추가합니다. 람다 함수 소스 코드는 매우 간단합니다. 코드를 변경하지 않으면 JAR에 aws-xray-sdk 및 aws-xray-sdk-recorder-aws-sdk-instrumentor 패키지를 포함시켜 Java 기능에서 X-Ray를 사용할 수 있습니다.
자 이제 사진 업로드를 해서 X-Ray 추적 상황을 살펴봅니다.
우리는 이러한 개별 추적 데이터 중 하나를 클릭하여 호출에 대한 자세한 정보를 얻을 수 있습니다.
AWS::Lambda
세그먼트에서 함수의 대기 시간, 실행 대기 시간, 실행 시도 횟수를 볼 수 있습니다.
AWS::Lambda::Function
세그먼트에는 몇 가지 가능한 하위 세그먼트가 있습니다.
- The inititlization subsegment includes all of the time spent before your function handler starts executing
- The outbound service calls
- Any of your custom subsegments (these are really easy to add)
DynamoDB에 약간의 문제가 있는 것처럼 보입니다. 오류 아이콘을 클릭하면, 전체 예외 스택 트레이스를 얻을 수 있습니다. 테이블 용량이 부족하기 때문에 DynamoDB를 조정해야 합니다. 단 몇 번의 클릭 또는 빠른 API 호출로 더 많은 정보를 얻을 수 있습니다.
X-Ray SDK를 사용하면 X-Ray로 데이터를 쉽게 내보낼 수 있습니다. 파이썬의 경우, 이 라이브러리를 fleece라는 rackspace에서 가져올 수 있습니다. 더 자세한 사항은 기술 문서를 참고하시기 바랍니다.
– Randall;
AWS X-Ray, 서울 리전 포함 정식 출시 (Lambda 연동 기능 미리보기)
작년 AWS re:Invent에서 발표한 AWS X-Ray 에 대해 이미 말씀 드린 적이 있습니다.(AWS X-Ray – 분산 애플리케이션 분석 참고).오늘 AWS X-Ray를 서울 리전을 포함해서 정식 출시하게 되었습니다.
X-Ray를 사용하면 Amazon EC2 인스턴스, Amazon ECS 컨테이너 등의 마이크로 서비스와 AWS 데이터베이스 서비스 및 AWS 메시징 서비스를 실행 할 때, 애플리케이션 요청을 추적 할 수 있습니다. 개발 및 정식 사용으로 만들어져 수천 개의 마이크로 서비스로 구성된 애플리케이션은 물론 간단한 3 계층 응용 프로그램도 처리 할 수 있습니다. 작년에 여러분에게 보여 드렸던 것처럼 X-Ray는 각 요청 엔드포이트 간 추적을 수행하고, 대표 샘플을 기록하며 서비스 맵과 추적 데이터를 보고 성능 문제와 오류를 분석합니다. 이를 통해 애플리케이션과 기본 서비스가 어떻게 수행되고 있는지 파악하여, 버그 원인을 식별하고 해결할 수 있습니다.
You can take a look at the full X-Ray walk-through in my earlier post to learn more.
지난 re:Invent에서 미리보기 형식으로 X-Ray를 시작했으며, 오늘 부터 미국 동부 (버지니아 북부), 미국 서부 (캘리포니아 북부), 미국 동부 (오하이오), 미국 서부 (오레곤), EU (아일랜드), EU (프랑크푸르트), 남미 (São Paulo), 아시아 태평양 (Tokyo), 아시아 태평양 (Seoul), 아시아 태평양 (Sydney), 아시아 태평양 (Sydney) 및 아시아 태평양 (Mumbai) 리전에 정식 공개하였습니다.
Lambda 함수 연동 (미리보기)
베타 기간 동안 서비스를 일부 업데이트하고, AWS Lambda 통합 기능을 추가했습니다. 오늘 부터 미리보기 형식으로 시작합니다. 이제 Lambda 함수 개발자는 X-Ray를 사용하여 함수 실행 및 성능에 대한 가시성을 확보 할 수 있습니다. 이전에는 애플리케이션 대기 시간 분석, 속도 저하 진단 또는 시간 초과 문제 해결을 원하는 Lambda 고객은 CloudWatch나 사용자 정의 로깅 및 분석에 의존 해야했습니다.
Lambda 연동 기능을 사용하려면, Lambda 함수에 X-Ray에 쓰기 권한을 부여한 실행 역할이 있는지 확인한 다음, 함수별로 추적을 사용하도록 설정하면 됩니다 (새 콘솔을 사용하는 기능, 적절한 사용 권한이 자동으로 할당됩니다). 그런 다음 X-Ray 서비스 맵을 사용하여 람다 함수, EC2 인스턴스, ECS 컨테이너 등을 통해 요청이 어떻게 전달되는지 확인하시기 바랍니다. 원하는 서비스와 리소스를 확인하고, 필요 시 확대하여 자세한 정보를 검토 하고, 문제를 해결할 수 있습니다.
람다 함수를 호출 할 때마다 X-Ray 맵에 두 개 이상의 노드가 생성됩니다.
- Lambda Service -이 노드는 Lambda 자체에서 보낸 시간을 나타냅니다.
- 사용자 함수 -이 노드는 람다 기능의 실행 시간을 나타냅니다.
- 다운 스트림 서비스 호출 -이 노드는 람다 기능이 다른 서비스에 대해 수행하는 모든 호출을 나타냅니다.
좀 더 자세한 것은 Using X-Ray with Lambda를 참고하시기 바랍니다.
정식 출시
오늘 정식 출시 하지만, X-Ray 서비스 비용 과금은 2017년 5월 1일 부터 시작됩니다. 가격은 추적 갯수와 분석 갯수를 기반으로합니다 (각 추적 기능은 애플리케이션의 요청임). 매월 무료로 10만개를 저장하고, 백만 개까지 검색할 수 있습니다. 이 이상의 경우, 백만 건 저장할 때 마다 5 달러를 지불하고, 검색을 위해서는 $ 0.50을 지불합니다. 좀 더 자세한 것은 AWS X-Ray 가격 페이지 를 참고하시기 바랍니다.
오늘 부터 여러분의 애플리케이션 성능 추적에 활용해 보시기 바랍니다.
— Jeff;
이 글은 AWS X-Ray Update – General Availability, Including Lambda Integration의 한국어 번역입니다.
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월 온라인 세미나를 참고하시기 바랍니다.