◇ 공부 기록용으로 작성하였으니 틀린점, 피드백 주시면 감사하겠습니다 ◇
X-Ray는 애플리케이션 간의 요청에 대해서 trace(추적)하는 서비스
AWS X-Ray
애플리케이션에서 생기는 Error를 tracing(추적) 하는 서비스.
AWS 환경에서 어느 리소스 (ex. DB, lambda, ..etc)가 문제의 원인이지 추적할 수 있다.
- X-Ray는 애플리케이션의 동작에 관한 데이터를 수집/분석하는 서비스이다.
- X-Ray는 특히 "Troubleshooting"의 목적으로 이용된다.
- 애플리케이션의 요청(request)을 추적(trace)하여 처리시간이나 응답을 분석해 성능의 병목(bottleneck)이나 에러의 발생원인을 특정할 수 있다.
- 요청이 서비스 간에 어떻게 이동하는지, 응답하는 데 걸리는 시간, 에러의 발생 위치 등을 시각적으로 파악할 수 있다.
▶ Bottleneck(병목 현상)이란?
Bottleneck: 시스템의 성능을 저하시키는 가장 느린 부분 또는 제한 요소를 의미한다
X-Ray 기능
X-Ray는 "Segment"(세그멘트)라는 형식으로 저장한다.
- Segment: 각 요청의 세부 정보가 저장된다. (리소스의 이름과 세부 정보, 수행한 작업에 대한 세부 정보)
- Subsegment: 더 작은 단위로 애플리케이션의 개별 작업이나 외부 리소스와의 상호작용을 추적한다.
- Trace: 하나의 요청당 하나의 trace와 같으며, 요청으로 생긴 segment를 모두 수집한 것이다.
X-Ray의 연동 서비스:
온프레미스 서버, EC2 , ECS , Lambda, Elastic Beanstalk
- EC2/ECS에는 수동으로 설치해야 한다.
- Lambda와 Elastic Beanstalk는 AWS Console에서 X ray를 활성화 버튼을 누르기만 하면 된다.
⚙️ Service Map (서비스 맵)
Service Map는 애플리케이션의 요청에 대한 데이터를 그래프로 시각화하였다.
Service Map의 그래프를 통해 특정 서비스에서의 지연 시간, 에러 비율, bottleneck을 한눈에 확인할 수 있다.
즉, 오류가 어디에서(어느 서비스에서) 발생한지 쉽게 파악할 수 있다.
- 초록색: 정상적으로 처리된 요청.
- 노란색: 경고 또는 느린 응답.
- 빨간색: 에러가 발생한 서비스.
⚙️ Trace (트레이스)
Service map에서는 요청에 대한 전체적인 시각화 그래프를 보여줬다.
Trace는 좀더 세부적으로 각각의 요청에 대한 정보를 보여준다.
⚙️ Analytics
X-Ray Analytics는 X-Ray로 수집된 트레이스 데이터에 대해 시각화 및 분석을 수행하고, 애플리케이션의 성능에 대한 정보(오류 패턴, 지연 발생)를 얻기 위해 사용하는 서비스이다.
이를 통해 대규모 분산 애플리케이션에서 성능 이슈를 손쉽게 파악할 수 있다.
⚙️ Insights
Analytics가 트레이스 데이터를 시각화하고 분석하는 서비스라면, X-Ray Insights는 퍼포먼스에 문제를 파악하고 그 영향을 자동으로 감지해주는 서비스이다.
X-Ray가 자동으로 트레이스에서 이상을 감지한 후에는 EventBridge를 사용해 알림을 보낼 수도 있다.
이 서비스는 현재 default으로 활성화되어 있지 않으며, 직접 활성화해야 한다.
X-Ray 구성 요소
- X-Ray Agent: 로그 파일에서 데이터를 수집하고, X-Ray 서비스로 전송하는 에이전트
- X-Ray SDK: 애플리케이션 안에 X-Ray SDK를 설치하여, X-Ray Daemon에 세그멘트 데이터를 전송한다.
- X-Ray Daemon: UDP (포트 2000)에서 X-Ray SDK로부터 트래픽을 수신하고, 여기서 가공되지 않은 세그먼트 데이터를 수집한다. 이를 X-Ray API를 통해 AWS X-Ray 서비스로 전송한다.
- X-Ray API: 수집한 세그멘트 데이터로 트레이스를 작성한다.
- xray-daemon.config: 이 파일을 디렉토리에 두면 X-Ray Daemon이 활성화됨
⚙️ X-Ray SDK
X-Ray SDK는 애플리케이션의 코드와 통합하여, 애플리케이션의 요청과 응답(예: HTTP 요청, 데이터베이스 쿼리, 함수 호출)에 대한 상세한 수집 데이터를 작성한다.
그리고 X-Ray SDK를 통해 어떤 특정 데이터가 수집되고 전송되는지 세밀하게 제어할 수 있다.
X-Ray SDK는 애플리케이션 안에서 세그멘트 데이터를 작성하고 이를 X-Ray Daemon에 전송한다. (X-Ray Daemon에 전송하기 위한 클래스와 메소드가 있다)
[X-Ray SDK가 지원하는 언어]
Java, Node.js, Python, Go, .NET, Ruby
⚙️ X-Ray Daemon
X-Ray Daemon은 애플리케이션에서 데이터를 수집하여 버퍼링후에 X-Ray API에 정기적으로 전송하는 역할의 소프트웨어이다.
(백그라운드 프로세스로써 유저는 따로 직접 관리하지 않는다.)
UDP 프로토콜의 Port: 2000의 트래픽을 읽고, 가공되지 않은 세그먼트 데이터를 수집하여 X-Ray API를 통해 X-Ray에 데이터를 전송한다.
X-Ray SDK와 연동하여 작동하며, SDK에서 전송된 데이터가 X-Ray 서비스에 도달할 수 있도록 설정한다.
X-Ray를 사용하려면 각 서비스에서 X-Ray Daemon을 실행해야 하며, X-Ray SDK와 연동하여 X-Ray 서비스로 데이터를 전송한다.
⚙️ X-Ray API
수집한 세그멘트 데이터로 Trace(추적)를 작성한다.
X-Ray의 모든 기능에 접근 가능하다.
[이용 방법]
- HTTPS 경유
- AWS SDK 경유
- AWS CLI 경유
🤔 문제
개발자가 개인 식별 정보(PII)를 처리하는 애플리케이션에 AWS X-Ray를 통합하고 있습니다. 애플리케이션은 Amazon EC2 인스턴스에서 호스팅됩니다. 애플리케이션의 추적 메시지에는 암호화된 PII가 포함되어 있으며 Amazon CloudWatch로 전송됩니다. 개발자는 PII가 EC2 인스턴스 외부로 나가지 않도록 해야 합니다.
이 요구사항을 충족할 수 있는 솔루션은 무엇입니까?
- 애플리케이션 코드에서 X-Ray SDK를 수동으로 도구화(수동 삽입)합니다.
- X-Ray 자동 도구화 에이전트를 사용합니다.
- Amazon Macie를 사용하여 PII를 감지하고 숨깁니다. X-Ray API를 AWS Lambda에서 호출합니다.
- AWS Distro for OpenTelemetry를 사용합니다.
정답
정답. 1번
X-Ray SDK를 수동으로 도구화하면, 개발자가 어떤 데이터가 수집되고 전송되는지 더 세밀하게 제어할 수 있다. 이를 통해 PII 데이터가 추적 메시지에 포함되지 않도록 할 수 있다.
참고자료
https://www.youtube.com/watch?v=biYBazxFwxk