こんにちは、インフラエンジニアの綿引です。
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 系のブログをいくつか書いてきましたが、一旦の集大成です。
よろしければお使いください。