본문 바로가기
AWS(Amazon Web Service)/CloudWatch

[AWS] CloudWatch, Web Application Monitoring

by Haengsin 2021. 11. 8.

CloudWatch, Web Application Monitoring

Architecture

(요약)

  • ALB: 로드 밸런서에서 생성된 5XX 오류
  • ALB: EC2 인스턴스에서 실행 중인 애플리케이션에서 발생하는 5XX 오류
  • ALB: 로드 밸런서에서 EC2 인스턴스에서 실행되는 애플리케이션까지의 지연 시간
  • ALB: 로드 밸런서의 과부하로 인해 거부된 연결
  • RDS: 여유 저장 공간
  • SQS: 작업 대기열에서 가장 오래된 메시지의 수명
  • SQS: 배달 못한 편지 대기열의 메시지 수

 

1. ALB(Application LoadBalancer) Monitoring

 

(1) 서버 오류(5xx)

5xx 응답 상태 코드는 서버가 들어오는 요청에 응답할 수 없음을 의미한다. 일반적으로 5xx 오류는 고객에게 오류 메시지를 표시한다. 5xx 서버 오류에 대한 알림을 받으려면 두 개의 CloudWatch 경보가 필요하다.

 

HTTPCode_ELB_5XX_Count

 

로드 밸런서는 수신 요청을 EC2 인스턴스 중 하나로 전달할 수 없을 때마다 5xx 오류를 생성하고 클라이언트에 반환한다. 예를 들어, 로드 밸런서에 등록된 정상 EC2 인스턴스가 없는 경우이다. 로드 밸런서에서 생성된 5xx 서버 오류에 대한 알림을 받으려면 다음 CloudWatch 경보를 생성한다.

 

  • 측정항목 네임스페이스: AWS/ApplicationELB
  • 측정항목 이름: HTTPCode_ELB_5XX_Count
  • 측정기준: LoadBalancer
  • 측정 기간: 1 minute
  • 기간 수: 5 또는1 out of 5
  • 통계량: Sum
  • 경보 상태: > 1

HTTPCode_Target_5XX_Count

 

로드 밸런서가 5xx 오류를 생성할 뿐만 아니라 애플리케이션도 그렇게 하고 있다. 예를 들어, 애플리케이션이 RDS 데이터베이스에 액세스할 수 없는 경우이다. 따라서 다음과 같이 다른 CloudWatch 경보를 생성한다.

 

  • 측정항목 네임스페이스: AWS/ApplicationELB
  • 측정항목 이름: HTTPCode_Target_5XX_Count
  • 측정기준: LoadBalancer
  • 측정 기간: 1 minute
  • 기간 수: 5 또는1 out of 5
  • 통계량: Sum
  • 경보 상태: > 1

Latency(지연 시간)

Client에 긴 대기 시간을 제공할 수 있기 때문에, 로드 밸런서와 EC2 인스턴스에서 실행되는 애플리케이션 간의 지연 시간도 모니터링해야 한다.

  • 측정항목 네임스페이스: AWS/ApplicationELB
  • 측정항목 이름: TargetResponseTime
  • 측정기준: LoadBalancer
  • 측정 기간: 1 minute
  • 기간 수: 5 또는1 out of 5
  • 통계: p99또는 Average분당 요청이 1000개 미만인 경우
  • 알람 조건: > 0.2초

Rejected Connections(거부된 연결)

ALB는 자동으로 확장한다. 그러나, 새 연결 수가 매우 빠르게 증가하면 ALB가 충분히 빠르게 확장되지 않을 수 있다. 이 경우 새 요청이 거부되고 고객은 애플리케이션에 전혀 액세스할 수 없다. 따라서 Rejected Connections도 모니터링해야 한다.

  • 측정항목 네임스페이스: AWS/ApplicationELB
  • 측정항목 이름: RejectedConnectionCount
  • 측정기준: LoadBalancer
  • 측정 기간: 1 minute
  • 기간 수: 5 또는1 out of 5
  • 통계량: Sum
  • 경보 상태: > 1

 

(참고) 애플리케이션이 실행 중인 EC2 인스턴스를 모니터링할 필요가 없다. 모든 장애 조건으로 인해 이미 로드 밸런서에서 모니터링 중인 5xx 오류 또는 긴 대기 시간이 발생한다.

 

2. 관계형 데이터베이스 서비스:RDS Monitoring

RDS를 사용하여 관계형 데이터베이스를 운영하는 문제를 AWS에 아웃소싱한다. 남은 작업은 각 데이터베이스 인스턴스에 대해 사용 가능한 리소스를 모니터링하는 것이다. 데이터베이스에 CPU, 메모리, I/O 또는 네트워크 용량이 부족하면 대기 시간이 길어지거나 서버 오류가 발생할 수도 있다. 이러한 종류의 문제를 감지하기 위해 이미 ALB를 모니터링하고 있다.

 

그러나 데이터베이스 인스턴스에 여유 저장 공간이 부족하면 데이터베이스가 실패하고 데이터가 손실되거나 손상될 수도 있다. 따라서 스토리지가 부족하지 않도록 CloudWatch 경보를 생성하는 것이 좋다.

  • 측정항목 네임스페이스: AWS/RDS
  • 측정항목 이름: FreeStorageSpace
  • 측정기준: DBInstanceIdentifier
  • 측정 기간: 1 minute
  • 기간 수: 5 또는1 out of 5
  • 통계량: Minimum
  • 경보 조건: < 1000000000바이트

 

3. SQS Monitoring

보고서 생성, 주문 확인 전송 또는 콘텐츠 게시와 같은 일괄 작업이 실패하면 고객은 긴장하게 된다. SQS 대기열에서 가장 오래된 메시지의 수명을 모니터링하는 알람이 트릭을 수행다.

  • 측정항목 네임스페이스: AWS/SQS
  • 측정항목 이름: ApproximateAgeOfOldestMessage
  • 측정기준: QueueName
  • 측정 기간: 5 minutes
  • 기간 수: 5 또는1 out of 5
  • 통계량: Maximum
  • 알람 조건: < 500초

일반적으로 각 작업 대기열에 대해 배달 못한 편지 대기열(DLQ)도 생성한다. 작업자가 대기열에서 작업을 여러 번 처리하지 못하면 작업이 작업 대기열에서 제거되고 DLQ에 추가됩니다. 따라서 DLQ의 길이도 모니터링해야 한다.

  • 측정항목 네임스페이스: AWS/SQS
  • 측정항목 이름: ApproximateNumberOfMessagesVisible
  • 측정기준: QueueName
  • 측정 기간: 5 minutes
  • 기간 수: 5 또는1 out of 5
  • 통계량: Maximum
  • 경보 상태: > 0

 

※ 출처 : https://marbot.io/blog/the-simplest-way-to-monitor-a-web-application-on-aws.html