AWS Lambda를 통해 서버리스 애플리케이션을 실행하는 경우, 애플리케이션 성능 문제를 효과적으로 진단하는 방법이 필요합니다. 본 세션에서는 분산 애플리케이션 성능 문제 발생 위치를 파악하고 디버깅 할 수 있는 추적 서비스인 AWS X-Ray를 소개합니다. X-Ray를 사용한 동적 스택 추적 및 디버깅, 호출에 대한 시각적 그래프를 사용하여 서버리스 애플리케이션을진단하는 방법을 설명합니다..
2. 일반적인 개발 과정 단계
• 타 시스템과
통합 테스트
• 부하 테스트
• UI 테스트
• 침투 테스트
• 소스 코드 커밋
• 코드 상호 검토
(peer review)
• 코드 컴파일
• 유닛 테스트
• 스타일 검증
• 빌드 테스트
• 콘테이너
이미지 제작
• 프로덕션
환경으로 배포
Source Build Test Production
3. DevOps란 무엇일까요?
개발 사이클 속도를 높이는 것 = 잦은 실험 및 혁신 = 서비스 성공
developers customers
releasetestbuild
plan monitor
배포 파이프라인
피드백 메카니즘
민첩한 소프트웨어 개발 사이클을 위한 자동화
4. DevOps를 위한 개발 아키텍처 및 개발 문화
Microservices Two-Pizza Team Automation
작은 서비스 개발
단위로 쪼개 API로
연동하여 개발 민첩성
및 독립적 배포 가능
서비스 개발 및 배포
운영 등을 모두 맡는
자율적이고 오너쉽을
가진 팀 구성 및 문화
개별팀이 자신의
서비스 개발 에만
집중할 수 있는 자동화
도구 제공
5. DevOps 개발 프로세스 개념
지속적 통합: Continuous integration
지속적 전달: Continuous delivery
지속적 배포: Continuous deployment
Source Build Test Production
6. Source Build Test Production
AWS 기반 DevOps 개발 도구
Third Party
Tooling
AWS CodeCommit AWS CodeBuild AWS CodeDeploy
AWS Elastic Beanstalk
AWS CloudFormation
AWS CodePipeline
AWS CodeStar
AWS IAM
Amazon
CloudWathch
3rd Party Extensions
7. AWS 기반 DevOps 개발 도구
AWS CodeCommit
AWS CodeDeploy
AWS CodePipeline
AWS CodeBuild
AWS CodeStar
Amazon CloudWatch AWS CloudTrail
AWS Config AWS X-Ray
EC2 System Manager
AWS CloudFormation
AWS OpsWorks AWS OpsWorks for
Chef Automate
AWS ElsticBeanstalk
EC2 Container Service
8. 전통적인 소프트웨어 디버깅
소프트웨어 디버깅 과정
• 코드 개발 시 문제 재현 코드 및 로그 삽입
• 로컬에서 코드에 중단점을 설정하여 실행을 중지하고, 변수 및 호출 스택 검사
• 테스트 환경으로 (필요에 따라) 추가 로그를 삽입 후, 애플리케이션 재배포
• (해결될 때 까지) 무한 반복
문제점
• 전통적인 디버깅 프로세스는 로컬 개발, 테스트 배포 및 정식 서비스에서
나오는 문제를 전반적으로 확인하기 어려움
• 마이크로 서비스 또는 서버리스 같은 최신 분산 아키텍처에서 활용이 어려움
• 개발자에게 지루하고 반복적이며 시간이 많이 걸림
• 그냥 QA 엔지니어에게 맡긴다면? 해결 될까
9. AWS X-Ray 서비스
성능 추적(Tracing)
애플리케이션 서비스를 통과하는
모든 요청에 대한 데이터 수집
트레이스 저장
생성된 모든
데이터를 저장
서비스맵 보기
지연 속도, HTTP
상태, 메타데이터를
시작적으로 표시
문제 분석
비 정상적인 동작
및 원인 파악
AWS 기반 마이크로 서비스 아키텍처나 서버리스 같은
분산 애플리케이션을 분석하고 디버깅하는데 유용한 서비스
10. AWS X-Ray 소개
EC2 (ECS), ElasticBeanstalk, ELB, API Gateway, Lambda
등의 다양한 AWS 클라우드 환경에서 사용 가능
(복수 AWS 계정 및 리전의 서비스 추적 가능)
손쉽게 X-Ray SDK (Node.js, Java, Go, Python 및 .NET) 및 클라이언트
프로그램으로 엔드-투-엔드 추적 가능
(관리 콘솔, AWS CLI, SDK 접속 지원 및 X-Ray API 맞춤 백오피스 구축 가능)
http://docs.aws.amazon.com/ko_kr/xray/latest/devguide/xray-gettingstarted.html
AWS IAM 연동을 통한 보안 및 권한 관리
서비스 맵을 통한 시각적 구성 및 트레이스 상세 도표를 제공하며,
서버와 클라이언트 사이드의 지연 속도, 데이터 필터링 및 검색 가능
11. AWS X-Ray Daemon
Amazon Linux AMI, RHEL, Ubuntu, OS X 및 윈도 서버 설치 가능
App & X-Ray
SDK
EC2 Instance
X-Ray
Daemon
Localhost
UDP
X-Ray API
HTTPS
HTTPS
Console
App & X-Ray
SDK
Server
X-Ray
Daemon
Localhost
UDP
IAM Role AWS
Credentials
DevOps Team
HTTPS
13. AWS X-Ray 개념 설명
user
Amazon API
Gateway
AWS Lambda
Amazon
DynamoDB
Amazon
SQS queue
Trace 클라이언트 부터 전체 서비스 기록 Annotations 별도 필터로 추적가능한 사용자 정의 데이터
Segments 개별 서비스에서 생성된 데이터 Metadata 필터로 추적하지 않는 비지니스 데이터
Sub-segments 원격 호출이나 개별 서비스 내 데이터 처리 Errors 정규화된 오류 메시지
14. AWS X-Ray SDK
Node.js, Java, Go, Python 및 .NET 지원 가능하며, 간단한 코드
삽입만으로 각 서비스의 메타데이터를 자동으로 수집 가능
• AWS services using the AWS SDK
• Non-AWS services over HTTP and HTTPS
• Databases (MySQL, PostgreSQL, and Amazon DynamoDB)
• Queues (Amazon SQS)
Amazon
ECS
Amazon
EC2
AWS
Elastic
Beanstalk
Amazon
SQS
Amazon
SNS
Amazon
RDS: Postgres,
MySQL, Aurora
Amazon
API
Gateway
Amazon
DynamoDB
AWS
Lambda
22. 예제: X-Ray기반 이미지 인식 서비스 성능 측정
https://github.com/awslabs/aws-xray-rekognition-lambda-sample
23. AWS X-Ray 비용
프리티어 (12개월 이후에도 종료하지 않음)
• 100,000개의 트레이스 저장
• 1,000,000개의 스캔 및 검색
추가 요금
• 1백만 트레이스 저장 당 5달러
• 1백만 트레이스 스캔 및 검색 당 0.5달러
참고 사항
• 고객이 직접 샘플링 비율을 선택 가능
트레이스의
최대 크기
500KB
트레이스의
저장 기간
30일
24. AWS X-Ray 비용 산정 사례
Q: 시간당 2,000건의 요청을 수신하는 애플리케이션이 있고 10%를
샘플링해서 저장한 후, 매일 100개의 쿼리를 수행해서 최슨 1시간 단위의
200개를 스캔해서 50개를 검색하는 경우
25. 참고 자료
서비스 홈페이지: https://aws.amazon.com/xray
정식 출시 (4월 20일)
• https://aws.amazon.com/ko/blogs/korea/aws-x-ray-update-general-
availability-including-lambda-integration/
기술 문서: http://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html
• .NET 샘플 코드: https://github.com/awslabs/aws-xray-dotnet-webapp
• Java 샘플 코드: https://github.com/awslabs/eb-java-scorekeep/tree/xray
• Node.js 샘플 코드: https://github.com/awslabs/eb-node-express-sample/tree/xray
• CloudWatch Log 수집: https://github.com/awslabs/cloudwatch-xray-apm-demo