CloudWatch Alarmの設定項目がよく分からなかったので図にしてみた
はじめに
CloudWatch AlarmでEC2のCPUメトリクスによるアラームを作成しようとした際に、思った通りにアラームが発生せずに苦労しました。
原因は設定項目の意味をよく理解できていなかったことでした。
なので今回はCloudWatch Alarmの設定内容を図にしながら解説してみます。
まずは設定項目の動きを理解した後、EC2のメトリクスを扱う際の注意点を紹介します。
難しい設定項目
まずはCloudWatch Alarmの設定項目です。
私は強調した部分が特に分かり辛いと思いました。
では一つずつ見ていきましょう。
統計と期間
まずは統計と期間を考えます、上の画像では
統計:平均値
期間:1分
としています。
これはどういうことでしょうか?
まず、今回の場合は「期間」1分
というのは1分間のEC2のCPU使用率ということです。
図にするとこのような感じです。
図では10秒毎にプロットしていますが、実際には何秒に一回プロットしているかは分かりません。
そして、「統計」という項目で設定した平均値
は
この1分間のデータを平均して一つのポイントとする、ということです。
この状態だと、まだ何のために平均を取得したのか分かりづらいです。
では同じように次の1分、また次の1分...と続けていきます。
そうするとどうなりますか?
各1分間毎のデータが蓄積されてもう一つのグラフができます。
これがアラームの状態を判断するためのグラフになります。
仮に、アラームを20%以上は異常状態としましょう。
すると、このようになります。
これでアラームを検知するためのグラフが完成しました。
アラームを実行するデータポイント
グラフができたので、次はどのタイミングでアラームを出すか設定していきます。
それが「アラームを実行するデータポイント」です。
この設定は
直近何ポイントのうち、何ポイントがしきい値を超えたらアラームを発生するか
という設定です。
例えば1/1なら(期間を1分としている場合)
直近1ポイントのうち1つでもしきい値を超えたら異常と判断します。
2/3なら(期間を1分としている場合)
直近3つのポイントのうち2つがしきい値を超えた時点で異常と判断します。
こちらは3ポイントなければ判断ができません。
アラームを作成してから最初の2分間は判断ができないことに注意して下さい。
仮に期間を5分
、データポイントを2/3
とすると
最初は15分待たなければ正常、異常の判定がされません。
欠落データの処理
CloudWatchに送られてくるデータの中には、必要なポイント数が足りない欠落データというものがあります。
これは例えばEC2がトラブルにより停止している場合などにCloudWatchにデータが送られてこないことにより発生します。
この「欠落データの処理」という項目では、そういったデータをどのように扱うか設定します。
かなり大雑把な説明をしましたが、意外とこちらも奥が深い設定です。
こちらの記事がとても参考になりましたので載せておきます。
EC2のCPU使用率の監視
ではEC2のCPU使用率をCloudWatch Alarmを使って監視する場合の注意点を書いていきます。
私は1分に1回CPUの使用率を監視したいと考えて、以下のように設定しました。
これで1分に1回データを収集して、20%を超えるとアラームが発生すると思っていました。
しかし、CPU使用率が1%にも満たないのにアラームが発生していました。
なぜでしょうか?
それはEC2側のデータ送信頻度の問題でした。
EC2はデフォルトで5分に1回CloudWatchに対してデータを送ります。
CloudWatch側は1分に1回のデータを期待していますが、データは5分毎にしか送られてきません。
この場合、CloudWatchの判定はどうなるのでしょう?
実際にやってみました。
すると、データ不足と正常が交互になっています。(グレーがデータ不足、緑が正常)
欠落データを不正とする場合にはアラームと正常が交互になります。(赤が異常)
この状態から、おそらくEC2がデータを出力するまでの5分間はデータが欠落しており、
5分後に出力したデータが正常となっていると予測されます。
にしては赤と緑の割合が合わないような気がする...
どちらにしても望む結果ではないですね。
ではどうすればいいのでしょうか。
この場合は、EC2のデータ出力の時間を1分にすることで解決します。
それが次のモニタリング設定です。
モニタリング
EC2のモニタリングには標準モニタリングと詳細モニタリングがあります。
この違いは以下のようになります。
標準モニタリング:EC2からCloudWatchへのメトリクス出力が1回/5分
詳細モニタリング:EC2からCloudWatchへのメトリクス出力が1回/1分
ピンときますね。
EC2を詳細モニタリングに設定すれば良いのです。
ではやってみましょう。
対象のEC2の「詳細モニタリングを有効化」を選択します。
有効化にチェックを入れます。
これだけで完了です。
ではCloudWatchの方を確認してみましょう。
想定通り1分に1回のペースでデータが出力されました。
EC2に負荷をかけてアラームが発生することも確認しておきます。
大体1分ほど待つとアラームが確認できました。
めでたしめでたし。
まとめ
CloudWatch Alarmを考える際、EC2から出力されるデータとCloudWatchが判断するデータがありますが、それらは間接的には繋がっていますが、別のグラフとして考えるとイメージしやすいと思いました。
CloudWatchはAWSを使用する上で欠かせないサービスだと思うので、少しずつでも使い方を覚えていきたいと思います。
参考資料
Discussion