AWS X-Ray
- 애플리케이션이 제공하는 요청에 대한 데이터를 수집하고 해당 데이터를 보고, 필터링하고, 통찰력을 확보하여 문제와 최적화 기회를 식별하는데 사용할 수 있는 도구를 제공
- 마이크로 서비스 아키텍처, 서버리스 같은 분산 애플리케이션 분석 및 디버깅
- "성능 추적(Tracing) → 트레이스 저장 → 서비스 맵 보기 → 문제 분석 "
- 장점:
- 애플리케이션의 전반적인 과정을 추적할 수 있다
- 애플리케이션의 문제를 시각적으로 확인이 가능하다
- bottleneck이 어디서 걸리는지 알고 이를 성능 향상으로 이어지게 할 수 있다
- X-Ray Daemon:
- Amazon Linux AMI, RHEL, Ubuntu, OS X 및 윈도 서버 설치 가능
- {서버 내부에 X-Ray SDK - (Localhost UDP) - X-Ray Daemon} - (HTTPS) - X-Ray API
- 비용:
- 프리티어(영구): 100,000개의 트레이스 저장 / 1,000,000개의 스캔 및 검색
- 추가 요금: 1백만 트레이스 저장 당 $5 / 1백만 트레이스 스캔 및 검색 당 $0.5
- Trace: 클라이언트 부터 전체 서비스 기록(최대 크기 500KB / 저장 기간 30일)
- Segments: 개별 서비스에서 생성된 데이터
- Sub-segments: 원격 호출이나 개별 서비스 내 데이터 처리
- Annotations: 별도 필터로 추적가능한 사용자 정의 데이터
- Metadata: 필터로 추적하지 않는 비즈니스 데이터
- Errors: 정규화된 오류 메시지
DynamoDB 테이블 생성
- Table name: x-ray-demo
- Primary key = id (string)
- 나머지는 default
- create item 을 대충 해주자.
Lambda 함수 생성
- Function name= x-ray-demo
- Runtime = Node.js 12.x
const AWS = require('aws-sdk')
exports.handler = function(event, context, callback) {
const dynamodb = new AWS.DynamoDB()
var params = {
TableName: 'x-ray-demo'
}
var body
dynamodb.scan(params, function(err, data) {
if (err) {
console.log("error")
console.log(err, err.stack)
callback(err)
} else {
const response = {
statusCode: 200,
body: JSON.stringify(data.Items)
}
callback(null, response)
}
})
}
Lambda 함수를 API Gateway와 연동
Lambda 역할에 DynamoDB의 권한을 추가적으로 부여해주자
후에 API endpoint 클릭하면 DynamoDB의 레코드를 확인할 수 있다.
X-Ray tracing
lambda 설정에서 tracing 활성화
그 다음에 API Endpoint로 여러번 접속한 뒤에 X-Ray 대시보드로 이동해 Service Map과 Traces 확인.
DynamoDB에 대한 정보는 보이지가 않는다..
Lambda Layer
- Name = nodejs-xray-sdk
- s3 link URL = https://saltware-aws-lab.s3.ap-northeast-2.amazonaws.com/msa/node-xray-sdk.zip
해당 layer를 lambda 함수에 적용해주자
const AWSXRay = require('aws-xray-sdk');
const AWS = AWSXRay.captureAWS(require('aws-sdk'));
exports.handler = function(event, context, callback) {
const dynamodb = new AWS.DynamoDB()
var params = {
TableName: 'x-ray-demo'
}
var body
dynamodb.scan(params, function(err, data) {
if (err) {
console.log("error")
console.log(err, err.stack)
callback(err)
} else {
const response = {
statusCode: 200,
body: JSON.stringify(data.Items)
}
callback(null, response)
}
})
}
더보기
위의 코드로 Lambda 함수 코드 수정해준다.
(참고로 Layer 생성할 때 썼던 s3 버킷 안의 코드의 경우 아래와 같은 명령어로 생성)
mkdir nodejs
cd nodejs
npm install aws-xray-sdk
zip node-xray-sdk.zip ../nodejs -r
다시 API Endpoint 몇 번 호출하고 X-Ray에서 변경된 사항을 확인해보자.
만약 MySQL 데이터베이스라면 아래와 같은 코드로 정의하고 사용하면 된다..
const mysql = AWSXRay.captureMySQL(require('mysql'))
전체적으로 어렵거나 하는 부분은 없는 느낌..(개인적으로)
이 서비스를 얼마나 어디에 잘 사용하느냐가 중요한듯
서버리스로 구성하는 경우나 그럴 때 찍어서 지연 시간이나 오류 부분 찾는 것도 나쁘지 않은듯...?!
'Cloud > AWS' 카테고리의 다른 글
[AWS] GPU 인스턴스 Spot Fleet (0) | 2022.11.12 |
---|---|
[AWS] GPU 인스턴스 유형(EC2) (0) | 2022.11.12 |
[AWS] Serverless Service - Lambda 편 (3) (0) | 2022.11.06 |
[AWS] Serverless Service - Lambda 편 (2) (0) | 2022.11.05 |
[AWS] Serverless Service - Lambda 편 (1) (0) | 2022.11.05 |