AWSサポートへの質問と回答のメモ(監視編)

前回に引き続き、昨年AWSサポートに質問した内容とその回答をまとめていきます。

CloudWatchのアラームがINSUFFICIENT_DATA状態になる条件について

背景と質問

CloudWatchのアラームは、OK、ALARM、INSUFFICIENT_DATAの3つの状態間を遷移します。このうち、OK状態になる条件と、ALARM状態になる条件は、比較的単純でした。例えばALARM状態の場合は、期間を5分間、2期間連続で値が異常な場合はNGと設定すると、0−5分前と5−10分前のそれぞれで値が異常なとき、ALARM状態に遷移します。

ただ、INSUFFICIENT_DATA状態になる条件については、ちょっと複雑でした。例えば、期間を5分間、2期間連続で値が異常ならNGと設定した場合、データが来なくなって10分経過したらINSUFFICIENT_DATA状態に遷移するだろう、と僕は想像していました。しかし試してみると、データが来なくなって20分経過した後でないと、INSUFFICIENT_DATA状態になりませんでした。この点を確認すべく、質問してみました。

回答

CloudWatchはメトリクスの記録の遅延を考慮した設計になっているため、あえてこのような動作にしている、とのことでした。AWSの各サービスでは非同期で行われる処理が少なくないことが背景にあるようです。

動作としては、指定された範囲にデータがない場合、範囲を1〜2期間広げて現在の状態を判定するらしいです。先ほどの例だと、過去10分間データが来ていない場合、まずは範囲を過去15分間に広げて状態判定をするようです。それでもデータが来ていない場合、範囲を過去20分間に広げます。だから試した時は、20分経過しないとINSUFFICIENT_DATA状態に遷移しなかったのですね。

なお、もしINSUFFICIENT_DATA状態になるまでの時間が気になる場合は、データの書き込み頻度を上げつつ、期間を短縮すると良い、とのことでした。個人的には、障害に気づくまでの時間に影響しそうなので、知らないうちに範囲を広げないでほしいと思いましたが。。。

CloudWatchの障害について

背景と質問

あるとき、CloudWatchのアラームがINSUFFICIENT_DATA状態になったという通知が来たのですが、メトリクスを確認してみても、データが途切れている形跡がありませんでした。原因がよくわからなかったので、AWSサポートに質問してみました。

回答

CloudWatchの内部で、メトリクスの更新が遅れる異常が起きていたようです。そのためデータが来ていないとみなされ、アラームがINSUFFICIENT_DATA状態になったようです。後で確認した時にデータが途切れていなかったのは、メトリクスの更新は遅れていただけで、僕が確認した時には既に更新されていたから、とのことでした。

こういう場合に、質問したような謎の現象が起きるんですね。ちなみにこの障害情報はAWSのステータスページに載ってなかった(今も載ってない)ため、ダメ元の質問だったのですが、聞いておいて良かったです。

まとめ

昨年AWSサポートの方に教えていただいたことを、監視関連を中心にまとめてみました。最新のAWSでは事情が異なっている可能性はありますが、参考になれば幸いです。