기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
이상치 감지를 사용한 장애 감지
여러 가용 영역에서 상관관계가 없는 이유로 발생하는 오류율이 높아지면 이전 접근 방식과 한 가지 차이가 발생할 수 있습니다. 3개의 가용 영역에 EC2 인스턴스를 배포하고 가용성 경보 임계값이 99% 인 시나리오를 상상해 보십시오. 그렇게 되면, 단일 가용 영역 장애가 발생하여 많은 인스턴스가 격리되고 해당 영역의 가용성이 55%로 떨어집니다. 동시에 다른 가용 영역에서는 단일 EC2 인스턴스가 해당 EBS 볼륨의 모든 스토리지를 소진하여 더 이상 로그 파일을 쓸 수 없게 됩니다. 이로 인해 오류가 반환되기 시작하지만 로드 밸런서 상태 검사를 통과하면 로그 파일 작성이 트리거되지 않기 때문에 여전히 로드 밸런서 상태 검사를 통과합니다. 그 결과 해당 가용 영역의 가용성이 98%로 떨어집니다. 이 경우 여러 가용 영역에서 가용성에 영향을 미치기 때문에 단일 가용 영역 영향 경보가 활성화되지 않습니다. 하지만 손상된 가용 영역을 제거하면 거의 모든 영향을 완화할 수 있습니다.
일부 유형의 워크로드 내에서 이전 가용성 지표가 유용하지 않을 수 있는 모든 가용 영역에서 일관되게 오류가 발생할 수 있습니다. AWS Lambda 예를 들어 보겠습니다. AWS 고객이 Lambda 함수에서 실행할 자체 코드를 생성할 수 있습니다. 서비스를 사용하려면 종속성을 포함하여 ZIP 파일에 코드를 업로드하고 함수의 진입점을 정의해야 합니다. 그러나 고객이 이 부분을 잘못 이해하는 경우가 있습니다. 예를 들어 ZIP 파일의 중요한 종속성을 잊어버리거나 Lambda 함수 정의에서 메서드 이름을 잘못 입력할 수 있습니다. 이로 인해 함수 호출이 실패하고 오류가 발생합니다. AWS Lambda 이런 종류의 오류가 항상 나타나지만, 그렇다고 해서 반드시 비정상인 것은 아닙니다. 하지만 가용 영역 장애와 같은 원인으로 인해 이러한 오류가 나타날 수도 있습니다.
이러한 종류의 노이즈에서 신호를 찾으려면 이상치 감지를 사용하여 가용 영역 간의 오류 수에 통계적으로 유의한 편차가 있는지 확인할 수 있습니다. 여러 가용 영역에서 오류가 발생하긴 하지만 그 중 하나에 실제로 장애가 발생한 경우 해당 가용 영역에서 다른 가용 영역에 비해 오류율이 훨씬 높거나 더 낮을 수 있습니다. 하지만 얼마나 높거나 낮을까요?
이 분석을 수행하는 한 가지 방법은 카이 제곱
카이 제곱 테스트는 결과의 일부 분포가 발생할 확률을 평가합니다. 이 경우에는 정의된 일부 집합에 오류가 분포되어 있는지 살펴보겠습니다. AZs 이 예제에서는 계산을 더 쉽게 하기 위해 가용 영역 4개를 고려해 보겠습니다.
먼저 기본 결과가 무엇이라고 생각하는지 정의하는 귀무가설을 설정합니다. 이 테스트에서 귀무가설은 오류가 각 가용 영역에 고르게 분포될 것으로 예상한다는 것입니다. 그런 다음 오류가 균등하게 분포되지 않아 가용 영역이 손상되었다는 대안가설을 설정합니다. 이제 메트릭의 데이터를 사용하여 이러한 가설을 테스트할 수 있습니다. 이를 위해 5분 동안 지표를 샘플링해 보겠습니다. 해당 창에 1,000개의 게시된 데이터 포인트가 있고 총 100개의 오류가 표시된다고 가정해 보겠습니다. 균등한 분포를 사용하면 네 가용 영역 각각에서 25%의 시간 동안 오류가 발생할 것으로 예상됩니다. 다음 표에 예상한 내용과 실제로 본 내용이 비교되어 나타난다고 가정해 보겠습니다.
표 1: 발생한 예상 오류와 실제 오류 비교
AZ | 예상 | 실제 |
---|---|---|
use1-az1 |
25 | 20 |
use1-az2 |
25 | 20 |
use1-az3 |
25 | 25 |
use1-az4 |
25 | 35 |
따라서 실제 분포는 균일하지 않다는 것을 알 수 있습니다. 하지만 샘플링한 데이터 포인트가 어느 정도 무작위적이기 때문에 이런 일이 발생했다고 가정할 수 있습니다. 표본 집합에서 이러한 유형의 분포가 발생할 확률은 어느 정도 있지만 귀무가설이 참이라고 가정할 수 있습니다. 이는 다음과 같은 질문으로 이어집니다. 적어도 이 극단적인 결과를 얻을 확률은 얼마일까요? 해당 확률이 정의된 임계값보다 낮으면 귀무가설을 기각합니다. 통계적으로 유의하려면
1 Craparo, Robert M. (2007). ‘중요도 수준’. Salkind, Neil J. 측정 및 통계 백과사전 3. 캘리포니아 주 사우전드 옥스: SAGE 간행물. 889~891쪽. ISBN1-412-91611-9.
이 결과가 나올 확률은 어떻게 계산할까요? 매우 잘 연구된 분포를 제공하는 χ2 통계를 용하여 이 극단적 또는 더 극단적인 결과가 나올 확률을 결정하는 데 이를 사용할 수 있습니다.
이 예제의 결과는 다음과 같습니다.
그렇다면 확률 측면에서 6
은 무엇을 의미할까요? 적절한 자유도를 가진 카이-제곱 분포를 살펴봐야 합니다. 다음 그림은 다양한 자유도에 대한 여러 카이 제곱 분포를 보여줍니다.
자유도는 테스트에서 선택한 항목 수보다 하나 적은 것으로 계산됩니다. 이 경우 가용 영역이 4개이므로 자유도는 3입니다. 그 다음 k = 3 그림의 x ≥ 6에 대한 곡선 아래 면적(적분) 을 구해보겠습니다. 일반적으로 사용되는 값이 포함된 미리 계산된 표를 사용하여 해당 값의 근사치를 계산할 수도 있습니다.
표 2: 카이 제곱 임계값
자유도 | 임계값보다 낮은 확률 | ||||
---|---|---|---|---|---|
0.75 | 0.90 | 0.95 | 0.99 | 0.999 | |
1 | 1.323 | 2.706 | 3.841 | 6.635 | 10.828 |
2 | 2.773 | 4.605 | 5.991 | 9.210 | 13.816 |
3 | 4.108 | 6.251 | 7.815 | 11.345 | 16.266 |
4 | 5.385 | 7.779 | 9.488 | 13.277 | 18.467 |
자유도가 3인 경우 카이-제곱 값인 6은 확률 열 0.75와 0.9 사이에 속합니다. 이것이 의미하는 바는 이 분포가 발생할 확률이 10% 이상이며, 이는 5% 임계값 이상이라는 것입니다. 따라서 귀무가설을 받아들이고 가용 영역 간의 오류율에 통계적으로 유의한 차이가 없다고 판단합니다.
카이 제곱 통계 테스트 수행은 CloudWatch 메트릭 수학에서 기본적으로 지원되지 않으므로 CloudWatch Lambda와 같은 컴퓨팅 환경에서 해당하는 오류 메트릭을 수집하고 테스트를 실행해야 합니다. MVC컨트롤러/액션, 개별 마이크로서비스 수준 또는 가용 영역 수준에서 이 테스트를 수행할지 결정할 수 있습니다. 가용 영역 장애가 각 컨트롤러/액션 또는 마이크로서비스에 동일하게 영향을 미칠지, 또는 장애와 같은 문제가 처리량이 높은 서비스가 아닌 처리량이 낮은 서비스에 영향을 미쳐 집계했을 때 그 영향을 가릴 수 있는지 고려해야 합니다. DNS 어느 경우든 적절한 차원을 선택하여 쿼리를 생성합니다. 세분화 수준은 생성한 결과 경보에도 영향을 미칩니다. CloudWatch
지정된 기간 내에 각 AZ 및 컨트롤러/작업에 대한 오류 수 지표를 수집합니다. 먼저 카이-제곱 테스트 결과를 참(통계적으로 유의한 편차가 있음) 또는 거짓(존재하지 않았으므로 귀무가설 성립)으로 계산합니다. 결과가 거짓이면 메트릭 스트림에 0 데이터 포인트를 게시하여 각 가용 영역에 대한 카이 제곱 결과를 얻습니다. 결과가 참인 경우, 예상 값에서 가장 멀리 떨어진 오류가 있는 가용 영역에 대해 1 데이터 포인트를 게시하고 나머지는 0으로 게시합니다 (Lambda 함수 내에서 사용할 수 있는 샘플 코드는 부록 B — 카이 제곱 계산의 예 참조). Lambda 함수에서 생성되는 데이터 포인트를 기반으로 3연속 CloudWatch 측정치 경보 및 CloudWatch 5점 중 3점 측정치 경보를 생성하여 이전 가용성 경보와 동일한 접근 방식을 따를 수 있습니다. 이전 예시처럼 이 접근 방식을 수정하여 더 짧거나 긴 기간에 더 많거나 적은 데이터 포인트를 사용할 수 있습니다.
그 다음, 다음 그림에 표시된 컨트롤러 및 작업 조합에 대한 기존 가용 영역 가용성 경보에 이러한 경보를 추가합니다.
앞서 언급했듯이 워크로드에 새 기능을 온보딩할 때는 새 기능에 맞는 적절한 CloudWatch 메트릭 경보를 생성하고 이러한 경보를 포함하도록 복합 경보 계층 구조의 다음 계층을 업데이트하기만 하면 됩니다. 나머지 경보 구조는 정적으로 유지됩니다.