23-06-01 Sprint

업데이트:     Updated:

카테고리:

태그:

Auto Scaling + CloudWatch를 이용한 알림


추가적으로 모니터링을 통해 모든 지표를 항상 관찰할 수 없으므로, 주요 메트릭의 임계치, 또는 장애 발생 예상 시점(예를 들어, CPU 사용량이 80%에 도달할 경우)을 경보의 형태로 제공해야 합니다. 이를 기존에 익혔던 SNS 및 람다를 통해 구현해 봅시다.


💡 Bare Minimum Requirement

  • EC2 서버를 ASG를 통해 구성합니다. 구성은 다음을 따릅니다.
  • CloudWatch 알람을 통해 ASG의 스케일 인/아웃을 진행합니다.
  • 스케일 인/아웃이 진행될 때 디스코드에 알림을 보냅니다.
  • 메트릭을 바탕으로 장애 발생 예상 시점에 디스코드에 알림을 보냅니다.
    • CPU 사용률(CPUUtilization) 값이 특정 값 이상일 때 경보가 발생하게 하세요.

💡 알림 및 경보 아키텍처

alert

EC2 수집 주기의 기본값은 5분입니다. ASG의 경우 [지표 수집 활성화]를 통해 지표를 CloudWatch에 기록합니다.

이러한 기록을 이용해 시간에 따른 메트릭 추이를 확인할 수 있습니다. 이때 경보를 통해 임계치에 따른 메시지가 SNS로 전달됩니다. 또한 ASG에서 발생하는 스케일링 이벤트를 트리거하기 위해 경보 두 개(스케일 인/아웃)를 자동으로 생성합니다.

참고로, CloudWatch의 메트릭 보존 기간은 수집 주기에 따라 다릅니다. 세부 모니터링 옵션을 활성화하여 수집 주기를 조절할 수 있습니다. 자세한 내용은 CloudWatch FAQ를 통해 확인하세요.



🏷 시작 템플릿 구성

ASG를 위한 시작 템플릿 구성은 다음을 따릅니다.

  • 그룹 정보

    • 원하는 용량: 1
    • 최소 용량: 1
    • 최대 용량: 3
  • 시작 템플릿은 다음 구성을 따릅니다.

    • Ubuntu Server (LTS)

    • t2.nano

    • 기존 혹은 신규 키 페어를 사용합니다

    • 보안 그룹: 인바운드 HTTP 및 SSH 허용

    • 사용자 데이터

      1
      2
      3
      4
      5
      
      #!/bin/bash
      echo "Hello, World" > index.html
      sudo apt update
      sudo apt install stress
      nohup busybox httpd -f -p 80 &
      


image


  • 템플릿 이름 쓰기


image


image


  • 요구 사항 대로 우분투 LTS 버전 생성 및 t2.nano


image


  • 키페어 및 네트워크 설정


image


  • 고급 세부 정보 제일 아래 쪽 사용자 데이터에 내용 추가

image


  • 템플릿 생성 버튼 누르면 생성 완료

image



  • 만들어진 템플릿으로 Auto Scaling 그룹 생성

image


image


image


image


image


image



image

  • Auto Scaling 그룹 생성 완료

  • Cloud Watch 경보 메시지 발송을 위한 SNS 주제 생성

image


🏷 CloudWatch와 조정 정책

  • CloudWatch를 통한 Auto Scaling 그룹 지표 수집 활성화 필요
  • Scale-in 조건: CPU 40% 이하
  • Scale-out 조건: CPU 50% 이상

  • CloudWatch 경보 생성

image


image


image


image


image

  • 같은 내용으로 Scale in 경보 추가 생성

image

image


image


  • 경보가 울리면 자동으로 인스턴스 생성, 추가를 할 수 있도록 Auto Scaling 그룹에서 추가 정책 생성

image


image

  • 마찬가지로 Scale in 정책도 추가 생성

image


image



Lambda 코드

  • Python 3.x 버전의 언어로 작성된 코드가 준비되어 있습니다. 이를 이용해 람다 함수를 생성하세요.
  • 디스코드 웹훅 URL은 HOOK_URL 환경변수를 이용해 추가하며, 다음 URL을 입력해 넣습니다.
1
https://discord.com/api/webhooks/1102396954543128618/785PFD5H5ORooihWDdipYdVsFQdSwETMypye-X9EavBTrhXGg8DyBLRJW66EGad6XIpD
  • 코드의 username 부분에 CloudWatch Monitoring 대신, 여러분의 이름을 적어 넣으세요.

이 함수는, cloudwatch-alarm-to-slack-python 블루프린트를 기반으로 작성되었습니다.


🏷 람다 함수 생성

image


image

  • 함수 코드 넣고 요구 사항대로 작성 후 Deploy

image

  • SNS 로 메시지가 도착하면 람다가 트리거 될 수 있도록 구성

image

  • 환경 변수에 웹훅 URL 주소 추가

이걸로 필요한 구성은 전부 만들었기 때문에 테스트만 진행 하면 된다.


부하 테스트

부하 테스트를 위해서 stress 명령어를 사용합니다. 다음 명령어를 이용하면, CPU를 100%를 사용하도록 만들 수 있습니다. top명령어를 통해서 정말 100%를 사용하는지 확인해 보세요.

1
$ stress -c 1
  • AWS CLI 로 EC2 접속 후 스트레스 테스트 진행

image

image image

  • CPU 사용률에 따라 Discord 에 알림이 간다.




Sprint 카테고리 내 다른 글 보러가기 🤠

댓글남기기