X-Ray
- 여러 애플리케이션 간 시각적 분석 제공
- 애플리케이션 성능 트러블슈팅 / 병목현상 식별 / MSA에서 MS간 의존관계 파악
- 서비스 문제를 짚어줌
- 요청 - 응답 한눈에 파악 가능
- 오류와 예외 응답 확인 가능
- 지연시간 등을 통해 SLA를 준수하는지 확인 가능
- 어떤 서비스로 인해 지연이 발생하고 스로틀링이 발생하는지 발견 가능
- 어떤 사용자들이 오류에 영향을 받는지 식별 가능
- 호환성 좋음 : 람다, Beanstalk, ECS, ELB, API Gateway, EC2, 어떤 애플리케이션 서버든 (온프레미스 포함)
X-Ray - Leverages Tracing
- 엔드투엔드 방식으로 요청을 추적
- 요청 시 이를 처리하는 각 컴포넌트가 각자 트레이스를 추가
- 트레이스는 세그먼트로 구성 (세그먼트는 하위 세그먼트로 구성)
- 트레이스에 어노테이션을 추가해 추가정보 제공 가능
- IAM 접근 보안 / 미사용 데이터에 대해서는 KMS 암호화 제공
- enable 방법
- 1) 코드 상에서 AWS X-Ray SDK 임포트
- 2) SDK가 AWS 서비스 호출 / HTTP 요청 / DB 요청 / 대기열 요청에 대해 기록
- 3) 서버에 X-Ray Daemon 설치 또는 X-Ray AWS Integration 활성화
- 이미 X-Ray와 통합된 람다와 같은 서비스 사용 시 알아서 데몬 실행
- 각 애플리케이션은 X-Ray에 데이터를 쓸 수 있는 IAM 권한 필요
- X-Ray가 동작하지 않을 시 (EC2)
- EC2 IAM 역할 확인
- EC2 인스턴스에서 X-Ray Daemon 실행중인지 확인
- X-Ray가 동작하지 않을 시 (Lambda)
- Lambda IAM 역할 확인
- 코드에 X-Ray가 임포트되었는지 확인
- 람다에서 X-Ray 활성 추적(Acitve Tracing) 옵션 활성화 확인
X-Ray 관련 용어
- 세그먼트 : 각 애플리케이션/서비스가 보내는 데이터
- 서브세그먼트 : 세그먼트를 세분화하기 위해 정의 (세그먼트에 세부 사항 기록)
- 추적(Trace) : 모든 세그먼트를 모아 API 호출의 엔드투엔드(종단 간) 뷰 형성
- 샘플링 : X-Ray로 보내지는 요청의 양을 줄여 비용 감소
- default : 모든 첫번째 요청 기록 / 이후 5% 추가 요청 기록
- 첫번째 요청 : 리저버 (reservoir)
- 5% : 비율 (rate)
- 주석(Annotation) : k-v 쌍, 추적 인덱싱 가능, 필터링 용도
- 메타데이터 : k-v 쌍, 인덱싱 불가능, 검색 용도
X-Ray API
- Write
- PutTraceSegments : 세그먼트를 X-Ray에 업로드
- PutTelementryRecords : 데몬이 수신/거절 세그먼트 수, 백엔드 연결오류 업로드
- GetSamplingRules : 데몬이 샘플링 규칙을 자동으로 업데이트해 적용하기 위해 샘플링 규칙을 읽어올 권한
- Read
- GetServiceGraph : 메인 그래프 읽기
- BatchGetTraces : ID로 지정된 추적 목록 검색
- GetTraceSummaries : 추적을 위해 특정 시간에 사용할 수 있는 ID와 주석을 읽음
- GetTraceGraph : 하나 이상의 추적 ID와 관련된 서비스 그래프 검색
AWS CloudTrail
- AWS 계정에 대한 규정 준수 및 감사 수행
- 기본적으로 활성화
- AWS 계정의 콘솔 / SDK / CLI / AWS Service에 대한 이벤트 / API 요청 기록을 얻을 수 있음
- 로그를 CloudWatch Logs / S3로 보낼 수 있음
- 모든 리전(기본값) 또는 단일 리전에 적용되도록 할 수 있음
CloudTrail - 이벤트 종류
- 관리 이벤트 (Management Event)
- AWS 계정의 리소스에서 수행되는 작업
- 보안 설정 / 라우팅 설정 / 로그 설정 등
- 기본값 : 어떤 경우에도 기록하도록 구성
- 읽기 이벤트를 쓰기 이벤트에서 분리 가능
- 데이터 이벤트 (Data Event)
- 기본값 : 로그 남기지 않음 (대용량 작업이므로)
- S3 객체레벨 활동 (GetObject, DeleteObject, PutObject) : 읽기/쓰기 이벤트 분리 가능
- 람다 기능 수행 활동 (Invoke)
- 인사이트 이벤트 (Insight Event)
- 유료, 이벤트 분석 및 계정 내 비정상적인 활동 감지
- 부정확한 리소스 프로비저닝 / 서비스 제한 초과 / IAM 작업 버스트 / 주기적인 유지보수 활동의 격차
- 정상적인 관리 이벤트를 분석해 기준선(baseline) 생성 -> 지속적으로 이벤트가 정상적인 유형인지 분석 (변경 / 변경시도)
- 콘솔에서 확인 가능 / S3에 전송 가능 / EventBridge 이벤트 생성 가능 (자동화)
- ex) 사용자가 dynamoDB에서 DeleteTable API 호출 시마다 SNS 알림이 필요
- 테이블 삭제 API 호출 시 EventBridge 규칙 생성
- 해당 이벤트를 EventBridge -> SNS 얼럿
- 이벤트는 기본적으로 90일간 보관 후 삭제
- 90일 이상 보관 필요한 경우 S3에 보내고 Athena를 통해 분석
CloudTrail vs CloudWatch vs X-Ray
- CloudTrail (API 호출)
- 사용자, 서비스, AWS 콘솔 등 계정에서 이루어진 API 호출 감시
- 승인되지 않은 호출 감지 / API 호출로 인한 변경의 근본적 원인을 찾을 때 유용
- CloudWatch (모니터링)
- 모니터링을 위해 지표 사용
- 애플리케이션 로그 저장
- Alarm(경보) 를 통해 예상치 못한 지표에 대해 알림 전송
- X-Ray (자동화된 추적분석, 시각화, 분산서비스에 대한 세부적 분석)
- 추적 자동화 / 중앙 서비스 맵 시각화 제공
- 분산서비스에서 큰 숲을 보기 용이
Reference