【CloudFormation】CloudWatchアラートでMetric Mathを利用して、複数メトリクスを合算した閾値を作成する

本記事では、CloudFormationによる、CloudWatchアラートでMetric Mathを利用して、複数メトリクスを合算した閾値を作成する方法について、コード付きで解説します。

dashboard

前提

Kafkaは事前に作成する。

リソースの名前は下記。

・Kafka:test-kafka

説明

Amazon MSKでは、ブローカーの合計CPU使用率(CPU User + CPU System) を60%未満に維持することを推奨している。

CloudWatch Alramにて、複数メトリクスの合計値を閾値としてアラームを作成する場合、[1] のようなMetric Mathを使用することで実現可能。

[1] Metric Math を使用する

Expressionはm1,m2を足し合わせる数式を表し、m1,m2にて具体的なメトリクスについて指定をしている。

実際のコード

AWSTemplateFormatVersion: "2010-09-09"

#####################################################################
#
# Parameters
#
#####################################################################
Parameters:
  SNSTopicName:
    Type: String
    Default: test-sns
  KafkaClusterName:
    Type: String
    Default: test-kafka
  KafkaBrokerID:
    Type: String
    Default: 1

Resources:
#####################################################################
#
# Kafka Broker 1
#
#####################################################################
  KafkaCPUUtilizationAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName
      AlarmName: !Sub Kafka CPU_Utilization
      EvaluationPeriods: 2
      Threshold: 60 #閾値
      TreatMissingData: breaching  # データ欠損時はアラート状態とする
      OKActions:
        - !Ref SNSTopicName
      ComparisonOperator: GreaterThanThreshold
      Metrics: #メトリクスとしてm1とm2を足すことを表現している
        - Expression: m1 + m2
          Id: result
          Label: CPU_Utilization
          ReturnData: true
        - Id: m1
          Label: CpuUser
          MetricStat:
            Metric:
              MetricName: CpuUser
              Dimensions:
              - Name: Cluster Name
                Value: !Ref KafkaClusterName
              - Name: Broker ID
                Value: !Ref KafkaBrokerID
              Namespace: AWS/Kafka
            Period: 300
            Stat: Average
          ReturnData: false
        - Id: m2
          Label: CpuSystem
          MetricStat:
            Metric:
              MetricName: CpuSystem
              Dimensions:
              - Name: Cluster Name
                Value: !Ref KafkaClusterName
              - Name: Broker ID
                Value: !Ref KafkaBrokerID
              Namespace: AWS/Kafka
            Period: 300
            Stat: Average
          ReturnData: false