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

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) などは任意で変更

 

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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
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
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 !

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

採用情報を見る