LoginSignup
0

More than 3 years have passed since last update.

AWS CloudWatch - Alarm 異常検出 のテンプレート

Last updated at Posted at 2019-12-15

こちらの記事はケーシーエスキャロット Advent Calendar 2019の15日目の記事です。
ちょっと遡って5日前の記事はgaramanさんのくずし字を読む (準備編)でした。
子供の頃、百人一首をやった記憶はありますが、普通の日本語で書かれていました。
その為、くずし字をあまり見た記憶がありませんが、プログラムで解析しようとする発想がスゴいです。

さて、本日はメトリクスの値を監視する AWS CloudWatch - Alarm に関して記載してみようと思います。

CloudWatch - Alarm の監視方法としては、指定した閾値を

  • 以上 (GreaterThanOrEqualToThreshold)
  • 以下 (LessThanOrEqualToThreshol)
  • より上 (GreaterThanThreshold)
  • より下 (LessThanThreshold)

となった場合にアラーム状態へ遷移する静的しきい値のみだったのですが、今年の夏ごろから異常検出という方法も可能になりました。

この異常検出をコンソールから設定する方法は、異常検出に基づいて CloudWatch アラームを作成する等のサイトに記載がありますが、CloudFormation でデプロイする際のテンプレート記載例が見当たらなかった(探し方が悪いかもですが)ので記載してみようと思います。

CPU 使用率アラームを異常検出へ書き換えた例。

template.yml
CPUAlarmForAnomaly:
  Type: AWS::CloudWatch::Alarm
  Properties:
    AlarmName: anomaly-alarm
    AlarmDescription: CPU alarm for my instance
    AlarmActions: Ref: "logical name of an AWS::SNS::Topic resource"
    Metrics:
    - Id: m1
      ReturnData: true
      MetricStat:
        Period: 60
        Stat: Average
        Metric:
          MetricName: CPUUtilization
          Namespace: AWS/EC2
          Dimensions:
          - Name: InstanceId
            Value: Ref: "logical name of an AWS::EC2::Instance resource"
    - Id: a1
      Expression: ANOMALY_DETECTION_BAND(m1, 2)
    EvaluationPeriods: 3
    ThresholdMetricId: a1
    ComparisonOperator: GreaterThanUpperThreshold

以上! …だとそっけなさ過ぎるので、簡単に説明を記載すると、

    - Id: m1
      ReturnData: true
      MetricStat:
        Period: 60
        Stat: Average
        Metric:
          MetricName: CPUUtilization
          Namespace: AWS/EC2
          Dimensions:
          - Name: InstanceId
            Value: Ref: "logical name of an AWS::EC2::Instance resource"

の部分が監視するメトリクスの宣言となります。
注意点としては、静的しきい値と比較すると統計方法の記載が異なる(StatisticStat)ことです。

そして、

    - Id: a1
      Expression: ANOMALY_DETECTION_BAND(m1, 2)

の部分で、監視対象メトリクスの値を異常検出と見なす想定値の範囲を指定(2)しています。
Anomaly_Detection_Graph2.png
異常検出方式で Alarm として設定してみると、上図のような感じで実際のメトリクスの値に沿って想定値の範囲(グレーの部分)が設定(想定)されます。

詳細はCloudWatch の異常検出の使用を参照。

因みに、監視方法(ComparisonOperator)も静的しきい値と異なっていて

  • 想定値の範囲を上回った場合 (GreaterThanUpperThreshold)
  • 想定値の範囲を下回った場合 (LessThanLowerThreshold)
  • 想定値の範囲を上回った or 下回った場合 (LessThanLowerOrGreaterThanUpperThreshold)

の3つから指定可能です。

この異常検出の使いどころとしては、しきい値が設定しにくい(時間帯や日によって異なる等)場合に良いかもしれませんね。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0