こんにちは、インフラエンジニアの綿引です。

CloudWatch Alarm で監視したいが、設定が面倒と感じる方も多いのではないでしょうか?

そこで今回は CloudWatch Alarm を AWS CloudFormation で作成したいと思います。

対象の方は以下のような方でしょうか。

 

  • CloudWatch Alarm を手動で作りたくない
  • 監視の内製化を検討している

 

テンプレートファイルの作成

ではテンプレートファイルを作成していきます。

今回も yaml で作成していきます。

前提

その前にまず前提です。

CloudWatch Alarm にて監視するサービスは以下です。

 

  • EC2
  • EC2 ミドルウェアプロセス
  • ALB
  • RDS (Aurora)

 

また今回「プロセス監視」と「アラームを SNS を使って通知させる」ということをやっているため、以下も前提とさせていただきます。

 

  • CloudWatch エージェント を EC2 に導入済みである
  • Amazon SNS を設定済みである

 

CloudWatch エージェントのインストール方法は以下に書いてあるので、よろしければご覧ください。

・CloudWatch で EC2 のメモリ・ディスク使用率を監視する

SNS の設定は以下を参考に実施いただければ、Slack まで通知可能です。

もちろんメールだけでも良ければ SNS だけ設定すれば OK です。

・Amazon CloudWatch + Amazon SNS + AWS Chatbot を使ってアラームを Slack に通知してみる

監視項目とメトリクス一覧

今回 Alarm を設定するメトリクスを一覧にしました。

監視項目(自分で勝手につけました)と対応するメトリクス、名前空間を記載しています。

どのサービスの監視項目かは名前空間を見て頂ければと思います。

監視項目 名前空間 監視メトリクス
EC2 ステータスチェック AWS/EC2 StatusCheckFailed
EC2 CPU クレジットバランス AWS/EC2 CPUCreditBalance
EC2 CPU 使用率 AWS/EC2 CPUUtilization
EC2 メモリ 使用率 CWAgent mem_used_percent
EC2 DISK 使用率 CWAgent disk_used_percent
amazon-cloudwatch-agent プロセス CWAgent procstat_lookup_pid_count
amazon-ssm-agent プロセス CWAgent procstat_lookup_pid_count
chronyd プロセス CWAgent procstat_lookup_pid_count
crond プロセス CWAgent procstat_lookup_pid_count
Apache プロセス CWAgent procstat_lookup_pid_count
rsyslogd プロセス CWAgent procstat_lookup_pid_count
sshd プロセス CWAgent procstat_lookup_pid_count
postfix_master プロセス CWAgent procstat_lookup_pid_count
sssd プロセス CWAgent procstat_lookup_pid_count
td-agent プロセス CWAgent procstat_lookup_pid_count
ALB 正常ターゲット数 AWS/ApplicationELB HealthyHostCount
ALB 接続エラー数 (ALB 最大接続超過) AWS/ApplicationELB RejectedConnectionCount
ALB 接続エラー数 (LB – ターゲット間) AWS/ApplicationELB TargetConnectionErrorCount
ALB TLS接続エラー数 (LB – ターゲット間) AWS/ApplicationELB TargetTLSNegotiationErrorCount
Aurora CPU クレジットバランス AWS/RDS CPUCreditBalance
Aurora DatabaseConnections AWS/RDS DatabaseConnections
Aurora デットロック回数 AWS/RDS Deadlocks
Aurora 空きメモリ容量 AWS/RDS FreeableMemory
Aurora CPU 使用率 AWS/RDS CPUUtilization

構成や環境などによって監視したいメトリクスも異なるかとは思いますので、必要なメトリクスがなかったり、不要なメトリクスがある場合は、任意でカスタマイズして頂ければと思います。

テンプレートファイル

次は実際のテンプレートファイルです。

各種設定を共通化するため「Parameters」を使用しているので、以下の「XXXXXXXX」の部分だけ、ご自身の環境に合わせて変更頂ければ Alarm の設定が可能になっています。

「Parameters」の一番上で定義している「SystemName」だけは、CloudWatch アラームのマネジメントコンソールから見やすいように追加した、必須ではないパラメータなので、もし不要であれば任意で外してしまってください。

※ 外した場合は「Resources」の「!Sub ${SystemName}」も全て消してください。

他にも閾値や閾値超過回数、欠如データの扱いなどもご自身の環境に合わせて変更いただけると良いかと思います。

変更点・注意点を以下に記載しますのでご確認ください。

 

  • 環境に合わせて「Parameters」の XXXX 部分を変更
  • 閾値 (Threshold) や、閾値超過回数 (EvaluationPeriods) などは任意で変更

 

以下がソースになります。

AWSTemplateFormatVersion: "2010-09-09"
Description: CloudWatch Alarm

#####################################################################
# Parameters 設定
#####################################################################
Parameters:
  SystemName:
    Description: EnvironmentName or ServerName
    Type: String
    Default: EnvironmentName  # 環境名やサーバ名を記載
  Ec2InstanceId:
    Description: Ec2 InstanceId
    Type: AWS::EC2::Instance::Id
  Ec2ImageId:
    Description: Ec2 ImageId (AMIID)
    Type: String
    Default: ami-XXXXXXXXXXXX  # EC2 の ImageId を記載
  Ec2InstanceType:
    Description: Ec2 InstanceType
    Type: String
    Default: XXXXXX  # インスタンスタイプを記載
  AlbLoadBalancer:
    Description: AlbLoadBalancer
    Type: String
    Default: app/XXXXXX/XXXXXXXXXXX  # ALB の ARN を記載
  AlbTargetGroup:
    Description: ALB TargetGroup
    Type: String
    Default: targetgroup/XXXXXX/XXXXXXXXXXX  # ターゲットグループの ARN を記載
  RdsDBInstanceIdentifier:
    Description: RDS DBInstanceIdentifier
    Type: String
    Default: XXXXXX  # DB クラスター識別子を記載
  SNSTopicName:
    Description: SNS Topic Name
    Type: String
    Default: arn:aws:sns:XXXXXXXXXXX  # SNS トピック

#####################################################################
# Resources 設定
#####################################################################
Resources:
  # CloudWatchアラームの定義

#####################################################################
# EC2 のアラーム設定
#####################################################################
  EC2StatusCheckFailedAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} EC2 ステータスチェック
      MetricName: StatusCheckFailed
      Namespace: AWS/EC2
      Statistic: Average  # 平均
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 0  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: GreaterThanThreshold  # 閾値より大きい
      Dimensions:
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
  EC2CPUCreditBalanceAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} EC2 CPU クレジットバランス
      MetricName: CPUCreditBalance
      Namespace: AWS/EC2
      Statistic: Average  # 平均
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 200  # 閾値
      TreatMissingData: notBreaching  # 欠落データは良好
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: LessThanOrEqualToThreshold  # 閾値以下
      Dimensions:
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
  EC2CPUUtilizationAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} EC2 CPU 使用率
      MetricName: CPUUtilization
      Namespace: AWS/EC2
      Statistic: Average  # 平均
      Period: 60  # 期間[s]
      EvaluationPeriods: 2  # 閾値超過回数
      Threshold: 95  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: GreaterThanOrEqualToThreshold  # 閾値以上
      Dimensions:
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
  EC2MemUsedPercentAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} EC2 メモリ 使用率
      MetricName: mem_used_percent
      Namespace: CWAgent
      Statistic: Average  # 平均
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 95  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: GreaterThanOrEqualToThreshold  # 閾値以上
      Dimensions:
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
        - Name: ImageId
          Value: !Ref Ec2ImageId
        - Name: InstanceType
          Value: !Ref Ec2InstanceType
  EC2DiskUsedPercentAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} EC2 DISK 使用率
      MetricName: disk_used_percent
      Namespace: CWAgent
      Statistic: Average  # 平均
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 80  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: GreaterThanOrEqualToThreshold  # 閾値以上
      Dimensions:
        - Name: path
          Value: /  # 環境に合わせて変更
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
        - Name: ImageId
          Value: !Ref Ec2ImageId
        - Name: InstanceType
          Value: !Ref Ec2InstanceType
        - Name: device
          Value: nvme0n1p1  # 環境に合わせて変更
        - Name: fstype
          Value: xfs  # 環境に合わせて変更

#####################################################################
# EC2 ミドルウェアプロセスのアラーム設定
#####################################################################
  ProcessAmazonCloudwatchAgentAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} amazon-cloudwatch-agent プロセス
      MetricName: procstat_lookup_pid_count
      Namespace: CWAgent
      Statistic: Maximum  # 最大
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 1  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: LessThanThreshold  # 閾値未満
      Dimensions:
        - Name: exe
          Value: amazon-cloudwatch-agent
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
        - Name: ImageId
          Value: !Ref Ec2ImageId
        - Name: pid_finder
          Value: native
        - Name: InstanceType
          Value: !Ref Ec2InstanceType
  ProcessAmazonSsmAgentAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} amazon-ssm-agent プロセス
      MetricName: procstat_lookup_pid_count
      Namespace: CWAgent
      Statistic: Maximum  # 最大
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 1  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: LessThanThreshold  # 閾値未満
      Dimensions:
        - Name: exe
          Value: amazon-ssm-agent
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
        - Name: ImageId
          Value: !Ref Ec2ImageId
        - Name: pid_finder
          Value: native
        - Name: InstanceType
          Value: !Ref Ec2InstanceType
  ProcessChronydAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} chronyd プロセス
      MetricName: procstat_lookup_pid_count
      Namespace: CWAgent
      Statistic: Maximum  # 最大
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 1  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: LessThanThreshold  # 閾値未満
      Dimensions:
        - Name: exe
          Value: chronyd
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
        - Name: ImageId
          Value: !Ref Ec2ImageId
        - Name: pid_finder
          Value: native
        - Name: InstanceType
          Value: !Ref Ec2InstanceType
  ProcessCrondAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} crond プロセス
      MetricName: procstat_lookup_pid_count
      Namespace: CWAgent
      Statistic: Maximum  # 最大
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 1  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: LessThanThreshold  # 閾値未満
      Dimensions:
        - Name: exe
          Value: crond
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
        - Name: ImageId
          Value: !Ref Ec2ImageId
        - Name: pid_finder
          Value: native
        - Name: InstanceType
          Value: !Ref Ec2InstanceType
  ProcessHttpdAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} Apache プロセス
      MetricName: procstat_lookup_pid_count
      Namespace: CWAgent
      Statistic: Maximum  # 最大
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 1  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: LessThanThreshold  # 閾値未満
      Dimensions:
        - Name: exe
          Value: httpd
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
        - Name: ImageId
          Value: !Ref Ec2ImageId
        - Name: pid_finder
          Value: native
        - Name: InstanceType
          Value: !Ref Ec2InstanceType
  ProcessRsyslogdAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} rsyslogd プロセス
      MetricName: procstat_lookup_pid_count
      Namespace: CWAgent
      Statistic: Maximum  # 最大
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 1  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: LessThanThreshold  # 閾値未満
      Dimensions:
        - Name: exe
          Value: rsyslogd
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
        - Name: ImageId
          Value: !Ref Ec2ImageId
        - Name: pid_finder
          Value: native
        - Name: InstanceType
          Value: !Ref Ec2InstanceType
  ProcessSshdAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} sshd プロセス
      MetricName: procstat_lookup_pid_count
      Namespace: CWAgent
      Statistic: Maximum  # 最大
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 1  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: LessThanThreshold  # 閾値未満
      Dimensions:
        - Name: exe
          Value: sshd
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
        - Name: ImageId
          Value: !Ref Ec2ImageId
        - Name: pid_finder
          Value: native
        - Name: InstanceType
          Value: !Ref Ec2InstanceType
  ProcessPostfixMasterAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} postfix_master プロセス
      MetricName: procstat_lookup_pid_count
      Namespace: CWAgent
      Statistic: Maximum  # 最大
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 1  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: LessThanThreshold  # 閾値未満
      Dimensions:
        - Name: exe
          Value: master
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
        - Name: ImageId
          Value: !Ref Ec2ImageId
        - Name: pid_finder
          Value: native
        - Name: InstanceType
          Value: !Ref Ec2InstanceType
  ProcessSssdAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} sssd プロセス
      MetricName: procstat_lookup_pid_count
      Namespace: CWAgent
      Statistic: Maximum  # 最大
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 1  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: LessThanThreshold  # 閾値未満
      Dimensions:
        - Name: exe
          Value: sssd
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
        - Name: ImageId
          Value: !Ref Ec2ImageId
        - Name: pid_finder
          Value: native
        - Name: InstanceType
          Value: !Ref Ec2InstanceType
  ProcessTdAgentAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} td-agent プロセス
      MetricName: procstat_lookup_pid_count
      Namespace: CWAgent
      Statistic: Maximum  # 最大
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 1  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: LessThanThreshold  # 閾値未満
      Dimensions:
        - Name: exe
          Value: td-agent
        - Name: InstanceId
          Value: !Ref Ec2InstanceId
        - Name: ImageId
          Value: !Ref Ec2ImageId
        - Name: pid_finder
          Value: native
        - Name: InstanceType
          Value: !Ref Ec2InstanceType

#####################################################################
# ALB のアラーム設定
#####################################################################

  ALBHealthyHostCountFtAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} ALB 正常ターゲット数
      MetricName: HealthyHostCount
      Namespace: AWS/ApplicationELB
      Statistic: Average  # 平均
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 1  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: LessThanThreshold  # 閾値未満
      Dimensions:
        - Name: TargetGroup
          Value: !Ref AlbTargetGroup
        - Name: LoadBalancer
          Value: !Ref AlbLoadBalancer
        - Name: AvailabilityZone
          Value: ap-northeast-1a
  ALBRejectedConnectionCountFtAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} ALB 接続エラー数 (ALB 最大接続超過)
      MetricName: RejectedConnectionCount
      Namespace: AWS/ApplicationELB
      Statistic: Average  # 平均
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 0  # 閾値
      TreatMissingData: notBreaching  # 欠落データは良好
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: GreaterThanThreshold  # 閾値より大きい
      Dimensions:
        - Name: LoadBalancer
          Value: !Ref AlbLoadBalancer
  ALBTargetConnectionErrorCountFtAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} ALB 接続エラー数 (LB - ターゲット間)
      MetricName: TargetConnectionErrorCount
      Namespace: AWS/ApplicationELB
      Statistic: Average  # 平均
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 0  # 閾値
      TreatMissingData: notBreaching  # 欠落データは良好
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: GreaterThanThreshold  # 閾値より大きい
      Dimensions:
        - Name: LoadBalancer
          Value: !Ref AlbLoadBalancer
  ALBTargetTLSNegotiationErrorCountFtAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} ALB TLS接続エラー数 (LB - ターゲット間)
      MetricName: TargetTLSNegotiationErrorCount
      Namespace: AWS/ApplicationELB
      Statistic: Average  # 平均
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 0  # 閾値
      TreatMissingData: notBreaching  # 欠落データは良好
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: GreaterThanThreshold  # 閾値より大きい
      Dimensions:
        - Name: LoadBalancer
          Value: !Ref AlbLoadBalancer

#####################################################################
# RDS (Aurora) のアラーム設定
#####################################################################
  RDSCPUCreditBalanceAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} Aurora CPU クレジットバランス
      MetricName: CPUCreditBalance
      Namespace: AWS/RDS
      Statistic: Average  # 平均
      Period: 60  # 期間[s]
      EvaluationPeriods: 3  # 閾値超過回数
      Threshold: 200  # 閾値
      TreatMissingData: notBreaching  # 欠落データは良好
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: LessThanOrEqualToThreshold  # 閾値以下
      Dimensions:
        - Name: DBClusterIdentifier
          Value: !Ref RdsDBInstanceIdentifier
  RDSDatabaseConnectionsAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} Aurora DatabaseConnections
      MetricName: DatabaseConnections
      Namespace: AWS/RDS
      Statistic: Average  # 平均
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 100  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: GreaterThanOrEqualToThreshold  # 閾値以上
      Dimensions:
        - Name: DBClusterIdentifier
          Value: !Ref RdsDBInstanceIdentifier
  RDSDeadlocksAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} Aurora デットロック回数
      MetricName: Deadlocks
      Namespace: AWS/RDS
      Statistic: Average  # 平均
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 0  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: GreaterThanThreshold  # 閾値より大きい
      Dimensions:
        - Name: DBClusterIdentifier
          Value: !Ref RdsDBInstanceIdentifier
  RDSFreeableMemoryAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} Aurora 空きメモリ容量
      MetricName: FreeableMemory
      Namespace: AWS/RDS
      Statistic: Average  # 平均
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 104857600  # 閾値 (100MB)
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: LessThanOrEqualToThreshold  # 閾値以下
      Dimensions:
        - Name: DBClusterIdentifier
          Value: !Ref RdsDBInstanceIdentifier
  RDSCPUUtilizationAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmActions:
        - !Ref SNSTopicName  # アラーム時のアクション
      AlarmName: !Sub ${SystemName} Aurora CPU 使用率
      MetricName: CPUUtilization
      Namespace: AWS/RDS
      Statistic: Average  # 平均
      Period: 60  # 期間[s]
      EvaluationPeriods: 1  # 閾値超過回数
      Threshold: 90  # 閾値
      TreatMissingData: breaching  # 欠落データは不良
      OKActions:
        - !Ref SNSTopicName  # 復旧時のアクション
      ComparisonOperator: GreaterThanOrEqualToThreshold  # 閾値以上
      Dimensions:
        - Name: DBClusterIdentifier
          Value: !Ref RdsDBInstanceIdentifier

実際のソース

ソースは以下 GitHub に上げておきましたので宜しければお使いください。

GitHub : CloudFormation-Templates CloudWatch-Alarm

※ 随時更新しているため上記記載の内容とは若干異なる場合があります

最後に

今回は CloudFormation を使って CloudWatch Alarm を作成しました。

今まで CloudWatch 系のブログをいくつか書いてきましたが、一旦の集大成です。

よろしければお使いください。

Join Us !

ウエディングパークでは、一緒に働く仲間を募集しています!
ご興味ある方は、お気軽にお問合せください(カジュアル面談から可)

採用情報を見る