CloudWatchの複合アラームを仕組みを確認しつつ使ってみた

2021.12.11

こんにちは、CX事業本部 IoT事業部の若槻です。

Amazon CloudWatchの複合アラームを仕組みを確認しつつ使ってみました。

複合アラームとは

Amazon CloudWatchの複合アラーム(composite alarm)とは、すでに作成されているアラーム(子アラーム)の状態を監視対象にできるアラームです。その監視対象のアラームは複数指定でき、様々なルール式を設定できます。

ルール式では各アラームの評価を関数を使用して行います。各関数はTRUEまたはFALSEを返すステートメントとなります。

関数 評価方法
ALARM("alarm") 指定のアラームがALARM状態の場合にTRUE
OK("alarm") 指定のアラームがOK状態の場合にTRUE
INSUFFICIENT_DATA("alarm") 指定のアラームがINSUFFICIENT_DATA状態の場合にTRUE
TRUE 常にTRUE
FALSE 常にFALSE

そして各ステートメントをANDORNOTおよび()を使用して、最終的な評価を行うルール式を作成します。例えば下記のようなルール式が作成できます。

  • ALARM(CPUUtilizationTooHigh) AND ALARM(DiskReadOpsTooHigh)
  • ALARM(CPUUtilizationTooHigh) AND NOT ALARM(DeploymentInProgress)
  • (ALARM(CPUUtilizationTooHigh) OR ALARM(DiskReadOpsTooHigh)) AND OK(NetworkOutTooHigh)

制限として、1つの複合アラームあたりに含められる子アラームは最大100個、要素は最大500個となります。

An AlarmRule expression can specify as many as 100 "child" alarms. The AlarmRule expression can have as many as 500 elements. Elements are child alarms, TRUE or FALSE statements, and parentheses. A pair of parentheses counts as one element.

AlarmRule 式には、最大 100 個の「子」アラームを指定できます。AlarmRule 式には、最大 500 個の要素を含めることができます。要素は、子アラーム、TRUE または FALSE ステートメント、および括弧です。括弧のペアは 1 つの要素としてカウントされます。

やってみた

今回の作成対象は以下の構成のうち複合アラームの部分です。子アラームはすでに作成されている前提とします。

複合アラームの作成

マネジメントコンソールのCloudWatchアラームの一覧で、複合アラームの子アラームとしたいアラームを選択して、[Create composite alarm]をクリックします。

[Conditions]欄で複合アラームの発生条件を指定します。今回はtestAlarmtestAlarm2のいずれかでアラームが発生することを条件とします。

ALARM("testAlarm") OR 
ALARM("testAlarm2")

[Next]をクリックします。

通常のアラームと同じように通知の設定をします。[Next]をクリックします。

現時点では、通知方法はSNSトピックのみ設定可能となっています。

Currently, the only alarm actions that can be taken by composite alarms are notifying SNS topics.

アラーム名を指定して[Next]をクリックします。

プレビューを確認したら、[Create composite alarm]をクリックしてアラームを作成します。

複合アラームが作成できました。通常のアラームと同じ一覧に追加されるようです。

アラームを発生させてみる

子アラームのうちの1つ(testAlarm)に対して手動でアラームを発生させます。

$ aws cloudwatch set-alarm-state \
  --alarm-name testAlarm \
  --state-value ALARM \
  --state-reason "test"

するとtestAlarmでアラームが発生するのに従い、複合アラームでもアラームが発生しました。

通知アクションによるメールも届きました。

参考

以上