Search

X-Ray

X-Ray
애플리케이션 간의 요청에 대해서 trace(추적)하는 서비스
AWS 환경에서 어느 리소스 (ex. DB, lambda, ..etc)가 문제의 원인이지 추적할 수 있다.
X-Ray는 애플리케이션의 동작에 관한 데이터를 수집/분석하는 서비스이다.
X-Ray는 특히 "Troubleshooting"의 목적으로 이용된다.
애플리케이션의 요청(request)을 추적(trace)하여 처리시간이나 응답을 분석해 성능의 병목(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 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의 모든 기능에 접근 가능하다.