[Amazon CloudWatch] カスタムメトリクスにアラームを設定してみた(AWS CDK)

2021.11.16

こんにちは、CX事業本部 IoT事業部の若槻です。

今回は、Amazon CloudWatchに発行したカスタムメトリクスに対するアラームをAWS CDKで設定してみました。

カスタムメトリクスとは

Amazon CloudWatchでは、既定で多くのAWSサービスのリソース(Lambda関数、DynamoDBテーブルなど)の利用状況やエラーのメトリクスが記録されます。加えて、CloudWatchのPutMetricDataAPIを使用することにより独自のメトリクスを発行することができます。これをカスタムメトリクスと言います。

いずれのメトリクスもAmazon CloudWatchのマネジメントコンソールやAPIを使用して検索やグラフ表示が可能です。またメトリクスデータはAWSアカウント上に15ヶ月保持されます。

今回はこのカスタムメトリクスにアラームを設定してみます。

カスタムメトリクスへのアラーム設定

準備

準備として、以下のブログをもとに、カスタムメトリクスを定期的に発行する下記の構成を作成します。

発行されるカスタムメトリクスは下記の通りです。

  • 名前空間:StateMachinePublish
  • メトリクス名:StateMachinePublish
  • ディメンジョン:なし

グラフ表示もできています。

CDKコード

作成したメトリクスに対するアラームをAWS CDKで作成します。10以下が30分継続したらアラーム状態となるアラームです。対象のメトリクスの指定はnew cloudwatch.Metric()で行います。

lib/aws-cdk-app-stack.ts

import * as cdk from '@aws-cdk/core';
import * as cloudwatch from '@aws-cdk/aws-cloudwatch';

export class AwsCdkAppStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new cloudwatch.Alarm(this, 'myAlarm', {
      alarmName: 'myAlarm',
      metric: new cloudwatch.Metric({
        namespace: 'StateMachinePublish',
        metricName: 'temperature',
      }),
      evaluationPeriods: 30,
      threshold: 10,
      statistic: cloudwatch.Statistic.MAXIMUM,
      comparisonOperator:
        cloudwatch.ComparisonOperator.LESS_THAN_OR_EQUAL_TO_THRESHOLD,
      period: cdk.Duration.minutes(1),
      treatMissingData: cloudwatch.TreatMissingData.NOT_BREACHING,
    });
  }
}

cdk deployを実行してデプロイします。

アラームを作成できました。

ディメンジョンを持つカスタムメトリクスの場合

下記のようなディメンジョンを持つカスタムメトリクスに対するアラームを設定してみます。

  • 名前空間:StateMachinePublish
  • メトリクス名:StateMachinePublish
  • ディメンジョン:
    • 名前:Site
    • 値:site_01

グラフは下記のようになります。

CDKコードは下記のようになります。dimensionsMapプロパティを使用することによりディメンジョンが指定可能です。

lib/aws-cdk-app-stack.ts

import * as cdk from '@aws-cdk/core';
import * as cloudwatch from '@aws-cdk/aws-cloudwatch';

export class AwsCdkAppStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new cloudwatch.Alarm(this, 'myAlarm', {
      alarmName: 'myAlarm',
      metric: new cloudwatch.Metric({
        namespace: 'StateMachinePublish',
        metricName: 'temperature',
        dimensionsMap: { Site: 'site_01' },
      }),
      evaluationPeriods: 30,
      threshold: 10,
      statistic: cloudwatch.Statistic.MAXIMUM,
      comparisonOperator:
        cloudwatch.ComparisonOperator.LESS_THAN_OR_EQUAL_TO_THRESHOLD,
      period: cdk.Duration.minutes(1),
      treatMissingData: cloudwatch.TreatMissingData.NOT_BREACHING,
    });
  }
}

デプロイすると、指定したディメンジョンのカスタムメトリクスに対するアラームを作成できています。

まとめ

Amazon CloudWatchに発行したカスタムメトリクスに対するアラームをAWS CDKで設定してみました。

ディメンジョンを持つカスタムメトリクスに対するアラームの設定方法がわからず少し悩みましたが何とかできて良かったです。

参考

以上