프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

 

 

 

 

Fargate를 위한 실시간 모니터링

 

ECS의 Fargate도 모니터링은 Container insight를 활용하면 Cloud Watch에서도 각 Task의 지표 정보를 수집할 수 있다.

하지만 Cloud Watch의 한계로 지표를 확인할 때까지 1분 이상의 지연이 발생한다.

예를 들면 12분 0초의 지표가 13분에야 확인이 된다.

 

실시간 모니터링이 필요하다면, Container insight와 Cloud watch만으로는 한계가 있다.
만약 EC2 Base의 ECS라면 EC2 자체에 Prometheus Agent를 설치하여 지표를 수집할 수 있지만, Fargate는 OS에 커스텀을 할 수가 없다.

 

그러므로 Task내에 지표 수집 및 전송을 제공하는 Side Car를 배치하여 실시간 모니터링을 제공해보자.

 

 

 

 

 

 

 

Side Car인 AWS Distro for OpenTelemetry (otel)

 

ADOT는 CNCF의 OpenTelemetry의 AWS버전으로, AWS의 다양한 자원의 지표를 AWS 서비스(다른 곳도 가능)로 전송가능하다.

 

 

https://aws-otel.github.io/docs/introduction

 

Introduction | AWS Distro for OpenTelemetry

Welcome to the AWS Distro for OpenTelemetry docs

aws-otel.github.io

 

 

 

 

 

지표를 전송할 대상은 AMP(AWS Managed for Prometheus)이다. 지표 데이터라면 Opensearch(AWS의 Elastic Search)보다는 Prometheus가 적절하다.

AWS X-ray 또한 지표 데이터의 수집 및 모니터링을 제공하지만, 지표보다는 트랜잭션 로그 데이터의 수집과 분석에 특화된 듯하다. 따라서 AWS Prometheus와 AWS Grafana를 통해 실시간 모니터링을 제공해 보자.

 

모니터링 구성도

 

 

 

 

 

 

Task 정의에 otel side car설정

 

Task 정의에 Application 컨테이너에 추가적으로 아래의 정보로 Side car 컨테이너를 넣어주자.

Otel의 공식 이미지를 사용하는데, NAT GW가 없는 Private 망에서 ECS를 사용한다면 Private Repository에 해당 이미지를 옮겨서 사용하면 된다.

 

 

이미지 URL

https://public.ecr.aws/aws-observability/aws-otel-collector:latest

 

 

명령어에 아래와 같이 otel이 사용할 기본 config의 위치를 제공해 주자.

 

 

 

 

 

실제 config yaml은 다음과 같다.

https://github.com/aws-observability/aws-otel-collector/blob/main/config/ecs/ecs-amp.yaml

 

 

 

확인해 보면 AWS Prometheus의 주소를 환경변수로 요구하고 있다.

 

 

 

 

AMP를 생성한 후, 해당 엔드포인트 주소를 제공해 주면 된다.

 

이를 위해서 AMP 세팅이 필요한데 관리형 서비스라 굉장히 편리하게 생성된다.

 

 

 

 

 

 

 

AMP(AWS Managed Service for Prometheus) 설정

 

관리형 서비스이기 때문에 지표를 전송과 쿼리 양만큼만 비용을 제공하기 때문에, 테스트로 생성해도 문제는 없을 것이다.

 

 

 

이 데이터만 넣어주면 생성이 된다.

 

 

생성된 후, 원격 쓰기 URL을 otel의 amp 엔드포인트 환경 변수로 넣어주면 된다.

 

 

 

 

 

 

Task 실행 결과

 

세팅이 정상적으로 준비되면 실행시켜 확인해 보자.

 

side car가 정상적으로 동작한다.

 

 

로그에서도 otel이 지표 정보를 보내고 있는 것이 확인된다.

 

확인 결과 0.25 vCPU, 0.5GB Memory에서 트래픽 부하가 없을 때 2~4% 정도의 사용률을 보인다.

Otel side car는 경량화 수집이기 때문에 Task의 성능에는 부담이 없는 듯하다.

 

 

 

 

 

 

지표 커스텀

 

내부의 config 정보를 사용할 수도 있지만 직접 커스텀할 수도 있다.

ECS의 컨테이너 환경변수는 Value From으로 Parameter Store에서 정보를 가져오는 기능이 있다.

 

 

AOT_CONFIG_CONTENT의 값으로 otel-collector-config로 세팅해 주자.

 

 

otel-collector-config라는 파라미터를 Systems Manager의 Parameter store에 세팅해 주자.

 

 

config 내용은 아래의 yaml에서 수정해서 넣어주면 된다.


https://github.com/aws-observability/aws-otel-collector/blob/main/config/ecs/ecs-amp.yaml

 

aws-otel-collector/config/ecs/ecs-amp.yaml at main · aws-observability/aws-otel-collector

AWS Distro for OpenTelemetry Collector (see ADOT Roadmap at https://github.com/orgs/aws-observability/projects/4) - aws-observability/aws-otel-collector

github.com

 

 

 

 

 

 

Task 정의 json

 

json으로 정의하는 경우 아래와 같이 해주자.

 

 

 

 

 

 

 

다음글에서는 AWS Grafana와 연동을 진행해보자.

 

 

다음글

AWS ECS Fargate 모니터링 (2) - AWS Grafana(SAML)

 

AWS ECS Fargate 모니터링 (2) - AWS Grafana(SAML)

이전글에서 AMP를 세팅한데 이어서 AWS Grafana를 통해 시각화를 해보자.   AWS ECS Fargate 모니터링 (1) - Side car (otel), AMP AWS ECS Fargate 모니터링 (1) - Side car (otel), AMPFargate를 위한 실시간 모니터링 ECS

everenew.tistory.com

 

 

 

 

참조

Otel ecs Fargate amp 워크샵

https://catalog.workshops.aws/observability/en-US/aws-managed-oss/amp/ecs/ingest-custom

Otel 공식 ecs Fargate amp 세팅 문서

https://aws-otel.github.io/docs/getting-started/prometheus-remote-write-exporter

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함