Amazon Web Services 한국 블로그
Amazon CloudWatch ServiceLens – 분산 애플리케이션 시각화 및 모니터링 기능 출시
수천 개의 지표와 테라바이트급의 로그를 생성하는 분산 애플리케이션은 시각화와 모니터이 쉽지 않습니다. 어디에서 성능 병목이 발생하는지, 운영 문제 및 고객 영향을 신속하게 식별하기 위해 애플리케이션과 종속성에 대한 포괄적인 통찰을 확보하려면 고유한 특정 정보 관점을 제공하는 여러 개의 전용 도구를 사용해야 합니다. 이는 복잡한 데이터 수집으로 이어지며, 전반적인 성능을 파악하기 위해 다양한 통찰을 서로 수동으로 연결해야 하고, 여러 솔루션을 유지 관리하는 비용을 증가시킵니다.
Amazon CloudWatch ServiceLens는 신규 완전관리형 모니터링 솔루션으로서, 서버리스 및 컨테이너 기반 기술에 대한 종속성을 가진 애플리케이션을 비롯한, 분산 애플리케이션의 상태, 성능 및 가용성에 대한 시각화 및 분석을 모두 한 곳에서 지원합니다. 문제가 있는 엔드포인트 및 리소스를 쉽게 격리하고, 관련 지표, 로그 및 애플리케이션 트레이스의 분석을 제공함으로써, CloudWatch ServiceLens는 서비스 맵을 사용하여 단일 위치에서 이 모든 데이터를 통합하여 MTTR(평균 문제 해결 시간)을 줄여줍니다.
이 맵을 통해 애플리케이션 내의 관계와 종속성을 이해할 수 있으며, 단일 도구에서 다양한 로그, 지표 및 트레이스를 심층 분석하여 장애를 신속하게 격리할 수 있습니다. 다양한 도구에 걸쳐 생성된 지표, 로그 및 트레이스 데이터의 상관 관계를 파악하는 데 소요되는 중대한 시간이 단축되므로 최종 사용자에게 발생하는 다운타임이 줄어줍니다.
Amazon CloudWatch ServiceLens 시작하기
Amazon CloudWatch ServiceLens를 활용하여 애플리케이션에서 트리거된 경보의 근본 원인을 진단하는 방법을 알아보겠습니다. AWS Lambda 함수를 사용하여 Amazon DynamoDB 테이블에서 트랜잭션 데이터를 읽고 쓰는 샘플 애플리케이션을 사용하겠습니다. Amazon API Gateway는 이 애플리케이션의 프런트엔드이며 GET
및 PUT
요청을 위한 리소스가 있어 해당 GET
및 PUT
Lambda 함수로 트래픽을 전달합니다. API Gateway 리소스와 Lambda 함수에는 AWS X-Ray 트레이싱이 활성화되어 있으며 Lambda 함수 내에서 DynamoDB로 이루어지는 API 호출은 AWS X-Ray SDK를 사용하여 래핑됩니다. 코드를 측정하고 AWS X-Ray를 사용하는 방식에 대한 자세한 내용은 개발자 안내서를 참조하십시오.
오류 조건이 애플리케이션에 대한 경보를 트리거했으므로, 첫 번째로 가야 할 곳은 Amazon CloudWatch 콘솔입니다. 여기에서 [Alarm] 링크를 클릭합니다. 하나 이상의 API Gateway 리소스에 가용성 문제가 있는 것을 볼 수 있습니다.
어떤 일이 발생하고 있는지 세부 정보를 살펴보겠습니다. 먼저 실행 중인 애플리케이션에 대한 개요를 얻고자 하므로, 왼쪽 탐색 패널의 [ServiceLens] 아래에서 [Service Map]을 클릭합니다. 이 맵은 애플리케이션의 분산 리소스를 나타내는 노드를 표시합니다. 노드의 상대 크기는 각 노드의 링크 두께와 마찬가지로 각 노드가 수신하는 요청 양을 나타냅니다. [Requests mode]를 표시하는 맵과 [Latency mode]를 표시하는 맵 사이를 전환할 수 있습니다. 동일한 드롭 다운을 사용하여 노드의 상대 크기를 변경하는 옵션도 전환할 수 있습니다. [Request mode] 또는 [Latency mode]에 표시되는 데이터는 먼저 조사할 노드를 격리하는 데 도움이 됩니다. [View connections]를 클릭하면 수신 및 송신되는 호출과 이러한 호출이 개별 노드에 미치는 영향을 이해할 수 있으므로 프로세스에 도움이 될 수 있습니다.
스크린샷에는 모든 노드가 잘 보이도록 맵 범례를 닫혀 있습니다. 참고로 해당 범례는 다음과 같습니다.
맵을 보면 프런트엔드 게이트웨이가 트리거된 경보의 출처임을 바로 알 수 있습니다. 노드에 있는 빨간색 표시자는 리소스와 연관된 5xx
장애가 있음을 표시하며 원주에 대한 표시자의 상대 길이는 성공적인 요청에 비해 얼마나 많은 요청에 장애가 있는지 대략적으로 알 수 있게 해 줍니다. 두 번째로, API를 통해 PUT 요청을 처리하는 Lambda 함수가 4xx
오류를 표시하고 있습니다. 마지막으로, DynamoDB 테이블이 조절이 발생하고 있음을 가리키는 자주색 표시자가 표시되어 있습니다. 이제 어떤 일이 발생하고 있는지에 대해 상당한 정보를 확보했지만 CloudWatch ServiceLens가 무엇을 입증하는 데 도움이 되는지 더 자세히 살펴보겠습니다.
사용자는 [Map view] 외에 List view]로 전환할 수도 있습니다. 이 보기는 모든 노드의 평균 지연 시간, 장애 및 분당 요청 수를 한 눈에 볼 수 있게 해 주며 기본적으로 [descending by fault rate – descending by number of alarms in alarm – ascending by Node name]의 정렬 순서를 사용하여 “가장 심각한” 노드를 먼저 표시하도록 구체적으로 정렬되어 있습니다.
[Map view]로 돌아가서 API 프런트엔드를 나타내는 노드 위에 마우스 커서를 올려도 해당 노드의 트래픽 및 장애 요청 비율에 대한 비슷한 정보를 얻을 수 있습니다.
특정 노드에 대해 더 많은 데이터를 보려면 해당 노드를 클릭하여 맵 아래에 해당 리소스에 대한 그래프 형식의 데이터를 포함하는 하위 섹션이 열립니다. 아래 스크린샷에서는 ApiGatewayPutLambdaFunction 노드를 클릭한 경우입니다.
각 리소스에 대한 이 하위 섹션은 해당 리소스의 로그([View logs]), 트레이스([View traces]) 또는 대시보드([View dashboard])를 볼 수 있는 링크를 제공합니다. 아래는 동일한 Lambda 함수에 대해 [View dashboard]를 클릭한 경우입니다. 해당 리소스에 대해 표시된 데이터를 스크롤링하면서 실행 시간이 길지 않으며 모든 호출이 연이어 호출 상태가 되는 것을 볼 수 있습니다.
요청 트레이스를 살펴보기 위해 경보를 표시하고 있는 API 프런트엔드로 돌아가 노드를 클릭하여 하위 섹션을 연 다음 [View traces]를 클릭합니다. 이미 맵을 통해 애플리케이션이 수신하는 PUT
요청에 의해 선택된 코드 경로에서 5xx
및 4xx
상태 오류가 생성된다는 것을 알고 있으므로 [Filter type]을 [Status code]로 전환한 다음 목록에서 502
및 504
항목을 선택하고 마지막으로 [Add to filter]를 클릭합니다. [Traces] 보기가 전환되어 해당 오류 코드를 유발한 트레이스, 응답 시간 분포 및 일련의 트레이스를 표시합니다.
이제 문제 원인에 가까워지고 있습니다! 첫 번째 트레이스 ID를 클릭하면 해당 요청에 대한 예외 메시지를 비롯한 풍부한 데이터를 얻게 됩니다. 하나의 스크린샷으로 모두 보여드릴 수 없을 만큼 많은 정보입니다! 예를 들어, 요청의 일부로 추적된 각 세그먼트의 타임라인을 볼 수 있습니다.
아래로 더 스크롤하면 예외 세부 정보를 볼 수 있습니다(그 아래에는 해당 트레이스의 로그 메시지도 표시). 여기에 처음 맵에서 보았던 조절 표시자를 확인해 주는 답이 기다리고 있습니다. 페이지 맨 아래에 표시된 트레이스에 해당하는 로그 데이터에서도 이 예외 메시지를 볼 수 있습니다. 이전에는 전체 애플리케이션에 대한 로그를 스캔해야 했기 때문에 이 메시지를 찾아내기가 어려웠으므로, 맵에서 드릴다운할 수 있는 기능은 상당한 시간을 절약해 줍니다.
이제 문제를 수정하고 경보를 해결하는 방법을 알아냈습니다. 테이블에 대한 쓰기 프로비저닝을 증가하는 것입니다!
CloudWatch ServiceLens와 더불어, Amazon CloudWatch는 고객에게 발생한 문제에 대해 신속하게 알림을 받을 수 있도록 24시간 연중무휴 실행되는 Canary를 사용하여 엔드포인트의 모니터링을 돕는 CloudWatch Synthetics의 미리 보기도 출시했습니다. 이는 [서비스 맵]에도 시각화되며 위 단계처럼 트레이스로 드릴다운하여 Canary에서 시작된 트랜잭션을 볼 수 있습니다. 운영 장애 또는 경보에 대한 상세한 통합 보기로 빠르게 이동할수록 문제의 근본 원인을 더 빠르게 찾을 수 있고 문제 해결 시간을 단축하며 고객에게 미치는 영향을 완화할 수 있습니다.
Amazon CloudWatch ServiceLens는 이제 모든 상용 AWS 리전에서 사용할 수 있습니다.