

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 複合警示
<a name="alarm-combining"></a>

使用 CloudWatch 時，您可將多個警示合併為一個*複合警示*，以針對整個應用程式或資源群組建立摘要性的彙總運作狀態指標。複合警示可監控其他警示的狀態來判斷其狀態。您可使用布林邏輯來定義規則，以合併這些受監控警示的狀態。

您可使用複合警示來減少警示雜訊，但只能在彙總層級執行動作。例如，您可建立一個複合警示，以在與 Web 伺服器相關的任何警示觸發時，向 Web 伺服器團隊傳送通知。若其中任何警示進入 ALARM 狀態，複合警示會自行進入 ALARM 狀態，並向您的團隊傳送通知。如果與您的 Web 伺服器相關的其他警示也進入 ALARM 狀態，您的團隊不會因新的通知而超載，因為複合警示已通知其現有情況。

您還可使用複合警示來建立複雜的警示條件，並且只有在滿足許多不同條件時才會執行動作。例如，您可建立合併 CPU 警示和記憶體警示的複合警示，並且只有在 CPU 警示和記憶體警示都觸發時才會通知您的團隊。

**使用複合警示**

您在使用複合警示時有兩個選項：
+ 設定您只想在複合警示層級執行的動作，並建立不含處理動作的基礎監控警示
+ 在複合警示層級設定不同的動作集。例如，在出現普遍問題的情況下，複合警示動作可能會讓不同的團隊參與。

複合警示僅可執行下列動作：
+ 通知 Amazon SNS 主題
+ 調用 Lambda 函數
+ 在 Systems Manager Ops Center 中建立 OpsItems
+ 在 Systems Manager Incident Manager 中建立事件

**注意**  
複合警示中的所有基礎警示皆必須與您的複合警示處於相同帳戶和相同區域。但是，如果您在 CloudWatch 跨帳戶觀察功能的監控帳戶中設定複合警示，則基礎警示可監看不同來源帳戶和監控帳戶本身中的指標。如需詳細資訊，請參閱[CloudWatch 跨帳戶觀察功能](CloudWatch-Unified-Cross-Account.md)。  
 每個複合警示可以監控 100 個基礎警示，150 個複合警示可以監控單一個基礎警示。

**規則表達式**

所有複合警示都包含規則表達式。規則表達式會告訴複合警示要監控哪些其他警示，並從何判斷其狀態。規則表達式可以參照指標警示和複合警示。當您參照規則表達式中的警示時，您可以為警示指定一個函數，以決定警示將處於下列三種狀態中的哪一種：
+ ALARM (警示)

  如果警示處於 ALARM 狀態，則 ALARM (“alarm-name 或 alarm-ARN”) 為 TRUE。
+ OK

  如果警示處於 OK 狀態，則 OK (“alarm-name 或 alarm-ARN”) 為 TRUE。
+ INSUFFICIENT\_DATA

  如果給定的警示處於 INSUFFICIENT\_DATA 狀態，則 INSUFFICIENT\_DATA (“alarm-name 或 alarm-ARN”) 為 TRUE。

**注意**  
TRUE 永遠評估為 TRUE，FALSE 永遠評估為 FALSE。

**警示參考**

參考警示時，使用警示名稱或 ARN，規則語法可以支援在警示名稱或 ARN 周圍使用或不使用引號 (") 參考警示。
+ 如果指定沒有引號，警示名稱或 ARNs 不得包含空格、圓括號或逗號。
+ 如果在引號內指定，警示名稱或*包含*雙引號 (") ARNs 必須使用反斜線逸出 (\\) 字元括住 "，以正確解譯參考。

**語法**

您用來將多個警示結合成一個複合警示的表達式語法使用布林值邏輯和函數。下表說明規則表達式中可用的運算子和函數：


| 運算子/函數 | Description | 
| --- | --- | 
| 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))`

  表達式指定當 4 個 Web 伺服器 CPU 警示中至少有 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)`

  表達式指定`ALARM`當 3 個可用區域運作狀態警示中有至少 2 個處於 `ALARM` 狀態，且維護時段警示不在 時，複合警示會進入 `ALARM`。這結合了 AT\_LEAST 函數和其他邏輯運算子，用於更複雜的監控案例。