AWS
CloudWatch

AWS CloudWatch Alarmの判定方法

PutMetricAlarm

documentPeriodEvaluationPeriods の説明があるものの、いまいち理解できず、Alarmの判定方法が理解できていませんでした。
そこで、AWS Supportにこのparameterの関係性について問い合わせを行ったところ、Alarmの判定方法の基本的な事項を説明してもらえました。

CloudWatch アラームは、1分毎に、その時点から Period に指定された期間を遡り、範囲内のデータポイントから Maximum 等の値を算出します。
その際算出した値を閾値と比較し、当該 Period が Breaching、Not breaching、もしくは Missing のいずれかと判定します。こちらの動作を Evaluation Period に指定された回数繰り返し、一番過去の Period が Breaching、それ以降の Period が Not breaching 以外(Breaching もしくは Missing)であると判定された場合、アラームは ALARM 状態へと遷移します。
例えば、Period を 5 分(300 秒)、Evaluation Periods を 3、Statistic を Maximum とした場合、CloudWatch アラームは毎分、過去 15 分間のデータポイントを取得し、5 分毎に閾値を越えているかどうかの判定を行います。01:00 の時点のアラームは、下記の三つの Period のデータポイントを参照し、それぞれの最大値を算出します。
・[00:45 - 00:50]
・[00:50 - 00:55]
・[00:55 - 01:00]
算出された [00:45 - 00:50] の期間の値が、閾値を越えており(Breaching)、[00:50 - 00:55] 及び [00:55 - 01:00] の期間の値が閾値を越えているもしくは欠落している場合(breaching もしくは missing)、アラームは ALARM 状態へと遷移します。そのうち一つでも Not Breaching と判定された Period が存在する場合、アラームは OK 状態となります。
例:
アラーム状態 ALARM
・[00:45 - 00:50] Breaching
・[00:50 - 00:55] Breaching
・[00:55 - 01:00] Breaching

アラーム状態 OK
・[00:45 - 00:50] Breaching
・[00:50 - 00:55] Breaching
・[00:55 - 01:00] Not Breaching

また、前述の通り、CloudWatch アラームは1分毎にアラームの判定を行う為、1分後の 01:01 の時点では、アラームは下記の三つの期間のデータポイントを取得し、これらの値に対して同様の判定を行います。
・[00:46 - 00:51]
・[00:51 - 00:56]
・[00:56 - 01:01]

まとめ

  • PeriodとEvaluationPeriodsの値にかかわらず、Alarmの判定自体は1分毎に行われる
  • 1分毎に過去(Period × EvaluationPeridos)期間に遡り、Statistic(Maximum, Averate等)の値が閾値(Threshold)を超えているかPeriodごとに判断する。
  • 過去 1Periodでも閾値を超えていなければ、AlarmはOK状態に遷移する