웹사이트 오류 감지하고 복구하기

AWSBeginner
지금 연습하기

소개

실제 오류로 CloudWatch 경보를 발생시키고 설정 복구 후 사이트와 OK 상태를 확인합니다.

앞선 포트폴리오 실습을 먼저 완료하세요. 새 환경에는 앞 단계의 기능과 별도 리소스가 준비되어 있습니다. 이전 서버, 파일이나 자격 증명을 보관할 필요가 없습니다.

자격 시험과 연결

자격 시험 과제 실습 내용
AWS Certified Cloud Practitioner (CLF-C02) Task 3.8 메트릭과 경보로 오류와 복구를 관찰합니다.

실습 개요

실제 오류로 CloudWatch 경보를 발생시키고 설정 복구 후 사이트와 OK 상태를 확인합니다.

오류 경보 만들기

이 단계에서는 로그는 개별 사건, 메트릭은 수치, 경보는 조건을 계속 평가합니다. 앱은 실패에 Errors=1, 성공에 0을 보냅니다. 알림이나 자동 복구는 설정하지 않습니다. 이 Errors 메트릭은 /website 페이지 요청만 측정합니다. 이미지와 다른 파일은 별도 로그 이벤트를 만듭니다.

프로젝트로 이동합니다.

cd /home/labex/project

식별자를 읽습니다.

source website.env
echo "$INSTANCE_ID"

설정을 읽습니다. Namespace는 계열 분류, Application=portfolio 차원은 이 앱을 선택합니다. 고해상도 메트릭을 10초 Sum으로 평가하고 0보다 크면 ALARM입니다.

cat website-alarm.json

JSON으로 경보를 만듭니다.

aws cloudwatch put-metric-alarm --cli-input-json file://website-alarm.json

상태를 읽습니다.

aws cloudwatch describe-alarms --alarm-names portfolio-errors

처음에는 INSUFFICIENT_DATA일 수 있습니다. TreatMissingData=missing은 데이터 없음을 성공으로 처리하지 않습니다. 경보가 앱을 복구하지는 않습니다.

실제 오류 감지하기

이 단계에서는 잘못된 JSON을 게시하여 실제 오류를 만듭니다.

잘못된 파일을 읽습니다.

cat profile-broken.json

SCP로 프로필을 덮어씁니다.

scp -F ssh_config profile-broken.json ubuntu@"$PUBLIC_IP":/home/ubuntu/portfolio/profile.json

사이트를 새로고침하여 Website unavailable을 확인한 뒤 정확한 문구로 503 로그를 읽습니다.

aws logs filter-log-events --log-group-name "$LOG_GROUP" --filter-pattern '"status=503"'

약 10초 평가 기간을 기다리고 페이지를 새로고침한 뒤 경보를 읽습니다.

aws cloudwatch describe-alarms --alarm-names portfolio-errors

실제 /website status=503과 ALARM을 확인합니다. SSH와 서버가 실행돼도 앱은 실패할 수 있습니다. 수동 상태 변경은 사용하지 않습니다.

실제 실습의 확인 예시입니다. 리소스 ID는 환경마다 다릅니다.

사이트 복구하고 회복 확인하기

이 단계에서는 정상 프로필을 게시하여 앱과 모니터링을 각각 확인합니다.

정상 파일을 읽습니다.

cat profile-working.json

SCP로 복원합니다.

scp -F ssh_config profile-working.json ubuntu@"$PUBLIC_IP":/home/ubuntu/portfolio/profile.json

페이지를 새로고침하여 Alex Morgan과 이미지를 확인한 뒤 200 로그를 읽습니다.

aws logs filter-log-events --log-group-name "$LOG_GROUP" --filter-pattern '"status=200"'

새 성공 요청만 있는 평가 기간을 기다리고 새로고침한 뒤 경보를 읽습니다.

aws cloudwatch describe-alarms --alarm-names portfolio-errors

이전 503은 남지만 새로운 /website status=200과 OK가 회복을 보여 줍니다. 데이터 없는 상태로 OK를 대신할 수 없습니다.

실제 실습의 확인 예시입니다. 리소스 ID는 환경마다 다릅니다.

실습 모니터링과 사이트 정리하기

이 단계에서는 지정한 실습 리소스만 삭제합니다.

인스턴스를 종료합니다.

aws ec2 terminate-instances --instance-ids "$INSTANCE_ID"

종료를 기다립니다.

aws ec2 wait instance-terminated --instance-ids "$INSTANCE_ID"

portfolio-errors 경보를 삭제합니다.

aws cloudwatch delete-alarms --alarm-names portfolio-errors

실습 로그 그룹을 삭제합니다.

aws logs delete-log-group --log-group-name "$LOG_GROUP"

준비된 버킷, 이미지, 역할, 참조 로그와 네트워크는 유지합니다.

요약

실제 503으로 ALARM을 확인하고 프로필 복구 후 200과 OK를 확인한 뒤 실습 리소스를 정리했습니다.

공식 문서: CloudWatch alarms, high-resolution custom metrics.