AWS DVA-C02 #8 X-ray와 온 프레미스
AWS DVA-C02 #8 X-ray와 온 프레미스 — #개발자의도구들 #AWS시험 #AWSDVA-C02 #DVA-c02문제 #DVA-c02덤프 #x-ray 참고: ExamPo...
#개발자의도구들 #AWS시험 #AWSDVA-C02 #DVA-c02문제 #DVA-c02덤프 #x-ray
참고: ExamPotic Disscussion
문제 찾는법 : 여기 최하단
요구사항 분석
- 온프레미스 Linux 서버에서 커스텀 앱 실행, 프런트는 APIGateway로 접근
- API Gateway test stage에 X-Ray tracing 활성화
- 온프레미스 서버(벡엔드)에서도 X-Ray 추적 활성화
이를 구현하는 최소한의 솔루션은?
보기 분석
A. X-Ray SDK를 온프레미스에 설치, 로컬 X-Ray데몬으로 세그먼트를 전송
❌ SDK 혼자서는 X-Ray 서비스로 업로드하지 못한다.
B. X-Ray 데몬을 온프레미스에 설치해서 데이터를 X-Ray에 보낸다.
✅ 앱의 SDK가 보내는 세그먼트/서브세그먼트를 받아 AWS X-Ray 서비스로 전송한다. 온프레미스에서는 데몬만 띄우고, 앱에 최소한의 SDK 설정만 하면 추적 연동이 가장 간단하다.
C. 온프레미스에서 요청 캡처 → Lambda pull 처리 → PutTraceSegment API call
❌ 람다 함수 작성 및 관리로 인한 오버헤드
D. 온프레미스 캡처 → Lambda가 Pull/처리 → PutTelemetryRecords 호출
❌ 오버헤드
❌ 해당 메서드는 트레이스/세그먼트 업로드용 API가 아니다.
개념 정리
X-ray
Trace Segment
- X-Ray 트레이스의 기본단위
- 애플리케이션에서 처리한 작업 단위(요청, 서브요청, 외부 호출 등)에 대한 세부 데이터
👉 포함 내용
- 서비스 이름, 요청/응답 시간
- HTTP 메서드, URL, 상태코드
- 다운스트림 호출
- 에러/예외/타임아웃 정보
- 사용자 지정 메타데이터
API업로드: PutTraceSegments
📌 "누가, 언제, 무엇을 했는지"를 시각적으로 보여주는 트레이스 맵 구성
{
"id": "6e2c6f9f7d3e4e7a",
"name": "MyService",
"start_time": 1733848123.123,
"end_time": 1733848123.789,
"parent_id": "4f2c6f9f7d3e4e7a",
"trace_id": "1-653f5c1f-4c2b3a1e4f2d8b9c0a123456",
"type": "subsegment",
"http": {
"request": {
"method": "GET",
"url": "https://api.example.com/data",
"user_agent": "curl/7.68.0",
"client_ip": "203.0.113.25"
},
"response": {
"status": 200,
"content_length": 1234
}
},
"annotations": {
"customer_id": 12345,
"plan": "premium"
},
"metadata": {
"debug_info": {
"db_query": "SELECT * FROM orders WHERE id=101"
}
}
}
Telemetry Record
X-Ray 데몬/SDK의 상태 및 통계 정보
트레이스 데이터가 아니라 운영 메트릭
👉 내용
- 수집한 세그먼트 개수
- 전송 성공/실패 횟수
- 대기열 길이
- 데몬 메모리 사용량 등
API 업로드: PutTelemetrryRecord
📌 X-Ray 서비스가 수집기/에이전트 상태를 모니터링하고 문제를 진단하는데 사용
{
"id": "6e2c6f9f7d3e4e7a",
"name": "MyService",
"start_time": 1733848123.123,
"end_time": 1733848123.789,
"parent_id": "4f2c6f9f7d3e4e7a",
"trace_id": "1-653f5c1f-4c2b3a1e4f2d8b9c0a123456",
"type": "subsegment",
"http": {
"request": {
"method": "GET",
"url": "https://api.example.com/data",
"user_agent": "curl/7.68.0",
"client_ip": "203.0.113.25"
},
"response": {
"status": 200,
"content_length": 1234
}
},
"annotations": {
"customer_id": 12345,
"plan": "premium"
},
"metadata": {
"debug_info": {
"db_query": "SELECT * FROM orders WHERE id=101"
}
}
}
X-Ray 서비스 간략 정리
역할
- 분산 추적 서비스
-
- 애플리케이션이 처리하는 요청을 엔드 투 엔드로 추적하여 병목 구간, 오류 지점, 지연 원인 파악하기 위해 사용됨
- 마이크로 서비스, 서버리스, 하이브리드(온프레미스 + AWS) 환경 지원
구성요소
| 구성 요소 | 설명 |
|---|---|
| Trace | 전체 요청 흐름 (API Gateway → Lambda → DynamoDB 등) |
| Segment | 각 서비스가 처리한 작업 단위 |
| Subsegment | 세그먼트 내부의 세부 작업 (DB 호출, 외부 API 호출) |
| Annotations | 인덱싱 가능한 키-값 메타데이터 (검색 가능) |
| Metadata | 인덱싱되지 않는 추가 데이터 (로그, 디버그 정보) |
| X-Ray Daemon / ADOT Collector | 애플리케이션에서 수집한 세그먼트를 버퍼링·전송 |
| X-Ray SDK | 애플리케이션 코드 계측, Trace Header 처리, 세그먼트 생성 |
동작흐름
- 애플리케이션 → X-Ray SDK로 요청/응답 계측
- SDK → 로컬 X-Ray Daemon에 세그먼트 전송 (UDP 2000)
- Daemon → X-Ray 서비스 API 호출 (PutTraceSegments, PutTelemtryRecords)
- X-Ray 서비스 → 세그먼트를 병합하여 Trace로 구성
- 콘솔에서 서비스 맵, 타임라인, 오류 상세 확인
추적헤드
- API Gateway, ALB 등 일부 AWS 서비스는 자동으로 X-Amzn-Trace-Id 헤더를 추가
- 벡엔드 서비스에서 이 헤더를 이어 받아 동일 Trace에 연결해야 분산 추적 완성
권한
X-Ray 서비스에 세그먼트 업로드하려면 IAM 권한 필요
- xray:PutTraceSegments
- xray:PutTelemetryRecords
- EC2 / ECS/ EKS → 실행 Role권한 부여
- 온프레미스 → IAM 사용자/역할 기반 자격 증명 사용
보안 & 네트워크
- Daamon → X-Ray 서비스 통신 HTTPs (TCP 443)
- SDK → Daemon은 UDP 2000 포트 (로컬)
- 온프레미스는 아웃바운드 443 허용 필요 (온프레 → AWS)