IaaS/퍼블릭클라우드

(AWS) X-Ray에 대해서

armyost 2022. 3. 17. 06:01
728x90

X-Ray라는 제품군을 보면서 Zipkin과 같이 APIM을 위한 제품이라는 생각을 들었다. 수집은 기본이고 트레이싱을 수행하여 각 구간별 퍼포먼스를 확인할 수 있도록 도와주는 제품으로 이해하면 좋다. APM을 써보신 분들이라면 API 영역도 쉽게 커버할 수 있도록 상향된 제품이라고 생각하면 되겠다.

Zipkin이나 APM툴들을 직접 어플리케이션에 적용해보신 분들은 아시겠지만, 언어에 맞게 SDK를 설치해야 한다. 


동작하는 아키텍처는 다음과 같다. 

1. 어플리케이션에 적용된 X-Ray 컴포넌트가 레코딩을 하여 로그를 생성한다. 

2. 실시간으로 해당로그를 X-Ray 서버에 보내게 되면 오히려 성능상의 부하를 초래할 수 있으므로 로컬에 설치된 X-Ray데몬에 일정량을 적재한다.

3. X-Ray 데몬이 X-Ray 서버에 주기적으로 로그를 전송한다. 

 

 

언어별 적용하는 SDK 레포지토리는 다음과 같다.

Python — https://github.com/aws/aws-xray-sdk-python
Ruby — https://github.com/aws/aws-xray-sdk-ruby
.NET — https://github.com/aws/aws-xray-sdk-dotnet
Java — https://github.com/aws/aws-xray-sdk-java
Node.js — https://github.com/aws/aws-xray-sdk-node
Go — https://github.com/aws/aws-xray-sdk-go

 

예시로 Python SDK와 Flask를 기준은 다음과 같다. 우선 aws-xray-sdk-python 라이브러리를 설치

(venv) $ pip install aws-xray-sdk

 

이제 SDK를 Flask 어플리케이션과 연동하는 것은 꽤 간단합니다. service 와 dynamic_naming 인자로는 각자 적당한 값을 입력해주면 됩니다. 차후 이 이름으로 AWS X-Ray 에서 개별 서비스 컴포넌트를 식별하게 됩니다.

from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.ext.flask.middleware import XRayMiddlewareapp = Flask(__name__)
xray_recorder.configure(
    daemon_address='127.0.0.1:3000',
    service='zeroweb-sample',
    dynamic_naming='*zeroweb.kr')
XRayMiddleWare(app, xray_recorder)

 

모니터링만 하면 의미없고 이걸 관리자나 개발자에게 실시간으로 Notification 해줘야 한다. 

 

 

자세한 내용은 아래 링크를 참조바란다. 

https://aws.amazon.com/ko/blogs/devops/using-amazon-cloudwatch-and-amazon-sns-to-notify-when-aws-x-ray-detects-elevated-levels-of-latency-errors-and-faults-in-your-application/

 

Using Amazon CloudWatch and Amazon SNS to Notify when AWS X-Ray Detects Elevated Levels of Latency, Errors, and Faults in Your A

AWS X-Ray helps developers analyze and debug production applications built using microservices or serverless architectures and quantify customer impact. With X-Ray, you can understand how your application and its underlying services are performing and iden

aws.amazon.com