ECS Fargate 에서 Datadog 연결하기

devyu·2024년 12월 8일
0
post-thumbnail

안녕하세요, devyu입니다.

오늘은 DevOps의 핵심 요소 중 하나인 모니터링에 대해 이야기해보려고 합니다. 특히 AWS ECS Fargate 환경에서 Datadog을 활용하여 애플리케이션 로그 및 상태를 모니터링하는 방법을 소개하겠습니다.

  • 이 포스트는 이 글 과 이어지는 내용으로, fargate 구축 이후 모니터링을 개선한 과정을 소개합니다.

안녕하세요, devyu입니다.

오늘은 DevOps의 핵심 요소 중 하나인 모니터링에 대해 이야기해보려고 합니다. 특히 AWS ECS Fargate 환경에서 Datadog을 활용하여 애플리케이션 로그 및 상태를 모니터링하는 방법을 소개하겠습니다.

최종적으로 제가 작성한 구조는 다음과 같습니다.

전체 구조 이해하기

먼저, ECS에서 구동되는 애플리케이션의 로그와 상태를 Datadog으로 모니터링하는 전체적인 구조를 살펴보겠습니다.

ECS는 AWS의 컨테이너 관리 서비스로, Fargate를 이용하면 서버를 직접 관리할 필요 없이 컨테이너를 실행할 수 있습니다. 그리고 Datadog은 서비스 전반에 대한 End-to-End 모니터링을 제공하여, 다양한 인프라와 플랫폼의 로그를 통합하여 관리할 수 있도록 도와줍니다.

Datadog을 활용한 모니터링 개요

Datadog은 애플리케이션과 인프라를 모니터링할 수 있는 강력한 솔루션입니다. AWS 환경에서 ECS Fargate와 연동하면, 별도의 서버를 운영하지 않고도 애플리케이션 로그, 상태 및 성능을 실시간으로 분석할 수 있습니다.

이제 본격적으로 ECS Fargate에서 Datadog을 연결하는 과정을 살펴보겠습니다.

준비 사항

Datadog을 ECS Fargate에 적용하기 위해 필요한 요소는 다음과 같습니다:

  • Datadog Agent (공식 컨테이너 이미지 사용)
  • Datadog Access Key (Datadog에서 생성)
  • Docker 기반의 애플리케이션 컨테이너

ECS Task에 Datadog Agent 컨테이너 추가하기

(이미지 캡처를 못해서, 문장으로 설명 대체했습니다..)
1. AWS Console에서 ECS에 접속하여 Datadog Agent를 적용할 Task를 선택합니다.
2. Task를 선택한 후 "Create New Version"을 클릭하여 Task를 업데이트할 수 있도록 설정합니다.
3. "Container Definition" 섹션에서 "Add Container"를 클릭하여 Datadog Agent 컨테이너를 추가합니다.
4. Datadog Agent 컨테이너는 별도의 이미지를 생성할 필요 없이 공식 이미지를 사용할 수 있습니다.

  • 이미지 주소: public.ecr.aws/datadog/agent:latest
  • 포트: 8125/8126
  1. Datadog Agent 실행을 위한 환경 변수를 추가합니다.

주요 환경 변수 설정

변수명설명
DD_ENV애플리케이션 환경 (dev, local, production)
DD_SERVICE애플리케이션 서비스 명칭
DD_PROFILING_ENABLEDContinuous Profiler 활성화 여부
DD_LOG_INJECTIONMDC key injection 활성화

여기까지 완료되었다면, ECS Task에 Datadog Agent 컨테이너가 추가된 것입니다. 이제 애플리케이션에서 로그 및 성능 데이터를 Datadog으로 전송하기 위한 설정을 진행합니다.

컨테이너 애플리케이션의 Entrypoint 수정

JVM 기반 애플리케이션에서 Datadog Tracing Agent를 활성화하려면, ENTRYPOINT를 수정해야 합니다.

# 기존 설정 (AS-IS)
ENTRYPOINT ["java", "-Dspring.profiles.active=production", "-jar", "/app.jar"]

# 변경된 설정 (TO-BE)
ENTRYPOINT ["java", "-javaagent:/usr/agent/dd-java-agent.jar", "-Ddd.agent.host=localhost",
"-Ddd.profiling.enabled=true","-XX:FlightRecorderOptions=stackdepth=256", "-Ddd.logs.injection=true",
"-Ddd.service=my-app", "-Ddd.env=prod", "-Dspring.profiles.active=production", "-jar", "/app.jar"]

Datadog Agent가 ECS Task 내에 포함되었기 때문에, -Ddd.agent.host=localhost로 설정하여 애플리케이션에서 로컬 Datadog Agent로 데이터를 보낼 수 있도록 합니다.

네트워크 모드 이해하기

ECS에서 Task를 실행할 때 사용할 수 있는 네트워크 모드는 다음과 같습니다.

Bridge Mode

  • 기본 설정이며, Fargate에서는 사용 불가능
  • 컨테이너 내부의 포트를 호스트의 다른 포트에 매핑 가능
  • Docker 네트워크를 가상화하여 네트워크 성능이 다소 떨어짐

Host Mode

  • 컨테이너 포트를 EC2 네트워크 인터페이스에 직접 매핑
  • 성능이 우수하지만, 모든 컨테이너가 동일한 IP를 공유하는 문제가 있음

AWSVPC Mode

  • Fargate의 기본 네트워크 모드
  • 각 Task마다 독립적인 ENI(Elastic Network Interface)를 할당받아 네트워크 성능이 뛰어남
  • 다른 Task의 컨테이너와 통신할 때, 할당된 ENI의 IP 주소를 직접 사용해야 함

Datadog을 활용한 모니터링 결과

모든 설정이 완료되면 Datadog에서 다음과 같은 데이터를 실시간으로 확인할 수 있습니다.

애플리케이션 지표

  • 서비스 응답 속도 및 에러율
  • API 요청 횟수 및 응답 지연 시간
  • JVM Heap 메모리 사용량

ECS 레벨 지표

  • 컨테이너 리소스 사용량 (CPU, Memory)
  • Task 및 Cluster 단위의 상태 정보

마무리

오늘은 AWS ECS Fargate에서 Datadog을 활용하여 애플리케이션을 모니터링하는 방법을 살펴봤습니다. CI/CD 환경에서 모니터링을 효과적으로 설정하면, 장애 감지 및 문제 해결이 훨씬 수월해집니다.

profile
티스토리와 벨로그 사이 줄타기....

0개의 댓글