CloudWatchにAnomaly detection(異常検出)が追加されました(Open preview)

87件のシェア(ちょっぴり話題の記事)

CloudWatchで、Anomaly detection(異常検出)を行う機能がOpen previewで追加されたというアナウンスがありました。 一部リージョンを除くほとんどのリージョンですでに利用可能です(もちろん東京リージョンでも使えます)

公式ドキュメントはこちらです:

CloudWatch Anomaly Detection

少し触ってみたので、紹介してみたいと思います。

概要

機能としてはCloudWatchで収集したメトリックの過去データを機械学習。モデルを作成して、正常と思われる値の上限値/下限値の範囲を予測できます。 この上限値・下限値(どちらか一方でもOK)を超えた値を異常値とみなしアラームを上げることができます。

またCloudWatchダッシュボード上のグラフでも、正常とみなされる範囲を表示し、視覚的に異常を確認することもできます。

設定方法

現状、機械学習モデルは異常検出のアラームを作成すると作られます。

  1. CloudWatchメニューから新しいアラームを作成します。
  2. 監視したいメトリクスを選びます。ここまではこれまでのアラーム作成と変わリません。
  3. 「メトリクスと条件の指定」画面で、異常検出の項目が増えています。
  4. 「しきい値の種類」として「異常検出」を選択します。
  5. アラームの条件は、「バンド(=予測の範囲)の外」「バンドより大きい」(=範囲の上限を超えた場合のみ)、「バンドより小さい」(=範囲の下限を下回った場合のみ)から選択します。
  6. 異常検出のしきい値は、予測の範囲の幅である「バンド」の幅のサイズを指定します。値が大きいほど予測の上限値と下限値の幅が広がり、正常とみなされる範囲が広がることになります。

なお機械学習を行う範囲は2週間で、daily・hourly・weeklyでトレンドのパターンをそれぞれ学習するようです。2週間分データが溜まっていなくてもこの異常検出の機能は利用することができます。

確認

設定後、予測データが利用可能になるまでは15分程度要します。 利用できるようになると、CloudWatchダッシュボード上のグラフで確認できるようになります。

予測されたグラフを作成する手順は以下の通りです。

  1. ダッシュボードから「ウィジェットの追加」を選びます。ウィジェットの種類の選択になりますが、この例では折れ線グラフを選びます。
  2. 先ほど異常検出のアラートを設定したメトリクスを選択します。学習モデルが存在するメトリクスにはそれを示すテキストが表示されます。例ではCPU Utilizationに「1 model」と表示されています。
  3. 最後に「ウィジェットの作成」をクリックし、グラフのウィジェットをダッシュボードに追加します。

実際に追加されたグラフは次のようなものでした。灰色の部分が予測の範囲、赤が実際の値となります。

この検証では、あるEC2インスタンスのCPU使用率を学習の対象としたのですが、CPUを全然使っていなかったところでCPUのスパイクを起こしました。結果としては期待通り「予測の範囲を超えた」ということでアラームも生成されました。

ちなみに、グラフのメトリクス選択の際、下記のように学習モデルのみを選択してみると、予測の上限値・下限値がそれぞれ別系列となったグラフも作成することができました。学習モデルの予測値がどうなっているのかを詳しく確認したい場合は良いかもしれません。

ところで、上記の例で予測の範囲でマイナスの値に入ってしまっているところがあります。バンド幅によって予測の上限・下限の幅が広がるので、下限については予測値が低い場合にはマイナスになる可能性はあるかなと思いますが、上限値でもマイナスの値が見られる箇所がありました。推測するに、前の時間からの増減を予測しているのではと思います。そのため、前の値が小さく、かつ減少傾向である場合は、そのような結果になる場合もあるのかもしれません。

終わりに

アラームのトリガーのしきい値の設定は難しいので、こうした機械学習の結果によって異常を検出をできるというのは嬉しいところです。実際の精度が気になる、という方も一度試して見てはいかがでしょうか。

以上、CloudWatchで新しく追加された異常検出の機能について紹介でした。