

# 복합 경보
<a name="alarm-combining"></a>

CloudWatch를 사용하면 여러 경보를 하나의 *복합 경보*로 결합하여 전체 애플리케이션 또는 리소스 그룹에 대해 요약되고 집계된 상태 지표를 생성할 수 있습니다. 복합 경보는 다른 경보의 상태를 모니터링하여 상태를 확인하는 경보입니다. 사용자는 Boolean 논리를 사용하여 모니터링되는 경보의 상태를 결합하는 규칙을 정의합니다.

복합 경보를 사용하면 집계된 수준에서만 조치를 실행하므로 경보 노이즈를 줄일 수 있습니다. 예를 들어, 웹 서버와 관련된 경보가 트리거되는 경우 복합 경보를 생성하어 웹 서버 팀에 알림을 보낼 수 있습니다. 이러한 경보 중 하나라도 ALARM 상태로 전환되면 복합 경보는 스스로 ALARM 상태가 되어 팀에 알림을 보냅니다. 웹 서버와 관련된 다른 경보가 ALARM 상태로 전환되더라도 복합 경보가 이미 기존 상황에 대해 알렸기 때문에 팀에 새 알림이 과도하게 오지 않습니다.

또한 복합 경보를 사용하여 복잡한 경보 조건을 생성하고 여러 조건이 충족될 때만 조치를 취할 수 있습니다. 예를 들어, CPU 경보와 메모리 경보를 결합하여 CPU와 메모리 경보가 모두 트리거된 경우에만 팀에 알리는 복합 경보를 생성하 수 있습니다.

**복합 경보 사용**

복합 경보를 사용하는 경우 두 가지 옵션이 있습니다.
+ 복합 경보 수준에서만 수행할 작업을 구성하고, 조치가 없는 기본 모니터링 경보를 만듭니다
+ 복합 경보 수준에서 다양한 작업의 조합을 구성합니다. 예를 들어, 복합 경보 작업에서는 문제가 광범위하게 발생하는 경우 다른 팀을 참여시킬 수 있습니다.

복합 경보는 다음과 같은 작업만 수행할 수 있습니다.
+ Amazon SNS 주제 알림
+ Lambda 함수 간접 호출
+ Systems Manager Ops Center에 OpsItem 생성
+ Systems Manager Incident Manager에 인시던트 생성

**참고**  
복합 경보의 모든 기본 경보는 복합 경보와 동일한 계정 및 동일한 리전에 있어야 합니다. 그러나 CloudWatch 크로스 계정 관측성 모니터링 계정에서 복합 경보를 설정하면 기본 경보가 다른 소스 계정과 모니터링 계정 자체에서 지표를 관찰할 수 있습니다. 자세한 내용은 [CloudWatch 크로스 계정 관측성](CloudWatch-Unified-Cross-Account.md) 섹션을 참조하세요.  
 단일 복합 경보로 100개의 기본 경보를 모니터링할 수 있고, 150개의 복합 경보로 단일 기본 경보를 모니터링할 수 있습니다.

**규칙 표현식**

모든 복합 경보에는 규칙 표현식이 포함됩니다. 규칙 표현식은 모니터링하고 상태를 확인할 다른 경보를 복합 경보에 알려줍니다. 규칙 표현식은 지표 경보 및 복합 경보를 참조할 수 있습니다. 규칙 표현식에서 경보를 참조할 경우, 다음 세 가지 상태 중 경보가 어떤 상태로 전환될지를 결정하는 함수를 경보에 지정합니다.
+ 경보

  경보가 ALARM 상태인 경우 ALARM ("alarm-name or alarm-ARN")이 TRUE입니다.
+ 정상

  경보가 OK 상태인 경우 OK ("alarm-name or alarm-ARN")가 TRUE입니다.
+ INSUFFICIENT\_DATA

  명명된 경보가 INSUFFICIENT\_DATA 상태인 경우 INSUFFICIENT\_DATA ("alarm-name or alarm-ARN")가 TRUE입니다.

**참고**  
TRUE는 항상 TRUE로 평가되고 FALSE는 항상 FALSE로 평가됩니다.

**경보 참조**

경보 이름 또는 ARN을 사용하여 경보를 참조할 경우, 규칙 구문에서는 경보 이름 또는 ARN을 따옴표(")로 묶거나 묶지 않아도 경보를 참조하도록 지원할 수 있습니다.
+ 따옴표 없이 지정한 경우 경보 이름 또는 ARN에 공백, 둥근 괄호 또는 쉼표를 포함해서는 안 됩니다.
+ 따옴표 내에 지정한 경우, 참조가 올바르게 해석되려면 큰따옴표(")가 *포함된* 경보 이름 또는 ARN은 큰따옴표(")를 백슬래시 이스케이프(\\) 문자로 묶어야 합니다.

**구문**

여러 경보를 하나의 복합 경보로 결합하는 데 사용하는 표현식의 구문에서는 부울 로직과 함수를 사용합니다. 다음 표에서는 규칙 표현식에서 사용할 수 있는 연산자와 함수를 설명합니다.


| 연산자/함수 | 설명 | 
| --- | --- | 
| AND | 논리적 AND 연산자. 지정된 모든 조건이 TRUE일 때 TRUE를 반환합니다. | 
| OR | 논리적 OR 연산자. 지정된 조건 중 하나 이상이 TRUE일 때 TRUE를 반환합니다. | 
| NOT | 논리적 NOT 연산자. 지정된 조건이 FALSE일 때 TRUE를 반환합니다. | 
| AT\_LEAST | 지정된 경보의 최소 개수 또는 백분율이 원하는 상태일 때 TRUE를 반환하는 함수. 형식: AT\_LEAST(M, STATE\_CONDITION, (alarm1, alarm2, ...alarmN)) 여기서 M은 절대 수 또는 백분율(예: 50%)일 수 있으며 STATE\_CONDITION은 ALARM, OK, INSUFFICIENT\_DATA, NOT ALARM, NOT OK 또는 NOT INSUFFICIENT\_DATA일 수 있습니다. | 

괄호를 사용하여 조건을 그룹화하고 복잡한 표현식에서 평가 순서를 제어할 수 있습니다.

**예제 표현식**

요청 파라미터 `AlarmRule`은 논리 연산자 `AND`, `OR`, `NOT`, `AT_LEAST` 함수를 지원하므로 작업자가 여러 함수를 단일 표현식으로 결합할 수 있습니다. 다음 예제 표현식은 복합 경보의 기본 경보를 구성하는 방법을 보여줍니다.
+ `ALARM(CPUUtilizationTooHigh) AND ALARM(DiskReadOpsTooHigh)`

  이 표현식은 `CPUUtilizationTooHigh`와 `DiskReadOpsTooHigh`가 `ALARM` 상태인 경우에만 복합 경보를 `ALARM` 상태로 전환하도록 지정합니다.
+ `AT_LEAST(2, ALARM, (WebServer1CPU, WebServer2CPU, WebServer3CPU, WebServer4CPU))`

  표현식은 웹 서버 CPU 경보 4개 중 2개 이상이 `ALARM` 상태일 때 복합 경보가 `ALARM`으로 전환되도록 지정합니다. 이렇게 하면 모든 리소스가 경보 상태에 있어야 하거나, 하나의 리소스만 경보 상태에 있어야 할 필요 없이 영향을 받은 리소스의 임곗값에 따라 알림을 트리거할 수 있습니다.
+ `AT_LEAST(50%, OK, (DatabaseConnection1, DatabaseConnection2, DatabaseConnection3, DatabaseConnection4))`

  표현식은 데이터베이스 연결 경보의 50% 이상이 `OK` 상태일 때 복합 경보가 `ALARM`으로 전환되도록 지정합니다. 백분율을 사용하면 모니터링되는 경보를 추가하거나 제거할 때 규칙을 동적으로 조정할 수 있습니다.
+ `ALARM(CPUUtilizationTooHigh) AND NOT ALARM(DeploymentInProgress)`

  이 표현식은 `CPUUtilizationTooHigh`가 `ALARM` 상태이고 `DeploymentInProgress`가 `ALARM` 상태인 경우에만 복합 경보를 `ALARM` 상태로 전환하도록 지정합니다. 배포 기간 동안 경보 노이즈를 줄이는 복합 경보의 예입니다.
+ `AT_LEAST(2, ALARM, (AZ1Health, AZ2Health, AZ3Health)) AND NOT ALARM(MaintenanceWindow)`

  표현식은 가용 영역 상태 경보 3개 중 2개 이상이 `ALARM` 상태이고 유지 관리 기간 경보가 `ALARM` 상태가 아닐 경우 복합 경보가 `ALARM`으로 전환되도록 지정합니다. 이렇게 하면 더 복잡한 모니터링 시나리오를 위해 AT\_LEAST 함수가 다른 논리 연산자와 결합됩니다.