CLIによる「CloudWatchAlarm」構築


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

皆様こんにちは。
今回はCLIを利用して高可用性アーキテクトの構築をしていきます。
この記事ではCLIよりCloudWatchAlarmの作成を行います。
このブログはCLIによるCloudWatchAlarmの作成をする上での知識を記事としてまとめ再確認し、皆様と共有するため作成します。

1.高可用性アーキテクト構築目次

目次はこちら

2.CloudWatchとは

Amazon CloudWatch は、DevOps エンジニア、デベロッパー、サイト信頼性エンジニア (SRE)、IT マネージャー、および製品所有者のために構築されたモニタリング/オブザーバビリティサービスです。CloudWatch は、アプリケーションをモニタリングし、システム全体におけるパフォーマンスの変化に対応して、リソース使用率の最適化を行うためのデータと実用的なインサイトを提供します。CloudWatch は、モニタリングおよびオペレーショナルデータをログ、メトリクス、イベントの形式で収集します。
引用:Amazon CloudWatch

Amazon CloudWatch Metrics

メトリクスはシステムのパフォーマンスに関するデータです。デフォルトで多くのAWSリソース (Amazon EC2、Amazon EBS、Amazon RDS など) の無料のメトリクスを提供しています。
CloudWatch Agentを利用して追加のカスタムメトリクスを発行できます。

Amazon CloudWatch Agent

Amazon EC2から内部システムレベルのメトリクスを収集するためにはCloudWatch Agentをデプロイする必要があります。
オンプレミスサーバーもCloudWatch Agentを利用しシステムレベルのメトリクスを収集することが可能です

Amazon CloudWatch Alarm

CloudWatch メトリクスを監視し、特定のしきい値を超えた場合に 1 つ以上のアクションを実行します。アクションでは、Amazon SNS トピックに通知を送信したり、Amazon EC2 アクション、Amazon EC2 Auto Scaling アクションを実行できます。

今回は構築した高可用性アーキテクトを監視するため、CloudWatchAlarmを利用します。
またEC2から追加のカスタムメトリクスを発行したいため、CloudWatchAgentも利用します。

類似の監視サービスにはDatadog Japanの「Datadog」があげられます。

3.フロー図

file
カスタムメトリクスを含むCloudWatchAlarmのアラームの通知を自分のメールアドレスに配信するには上記の図の構成でします。

今回はCLoudwatchAlarm作成までのフローを以下で紹介します。

  1. EC2起動時にユーザーデータでインストールしたCloudWatchAgentの初期設定をします。
  2. 収集したメトリクスを利用して、CloudWatchAlarmの作成をします。

4.CloudWatch Agent初期設定

CloudWatchAgentはEC2起動時にユーザーデータでインストール済みのため、初期設定から始めます。
SSHでEC2インスタンスに接続して、以下のコマンドでセットアップウィザードを実行します。

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

セットアップウィザードの実行内容は以下のようになります。

  • ウィザード起動
================================================================
= Welcome to the Amazon CloudWatch Agent Configuration Manager =
=                                                              =
= CloudWatch Agent allows you to collect metrics and logs from =
= your host and send them to CloudWatch. Additional CloudWatch =
= charges may apply.                                           =
================================================================
  • どのOSでエージェントを使用する予定ですか?
On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [1]:
1

今回はLinuxOSを利用しているので1を選択。

  • EC2またはオンプレミスのホストを使用していますか?
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
1

EC2インスタンスで利用するので1を選択。

  • どのユーザーでエージェントを実行する予定ですか?
Which user are you planning to run the agent?
1. root
2. cwagent
3. others
default choice: [1]:
1

実質的にはroot又はAmazonlinuxのデフォルトユーザーであるec2-userどちらかの選択です。
今回はデフォルトで選択されている1にします。

  • StatsDデーモンを有効にしますか?
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
2

今回はStatsDデーモンは利用しないので2を選択。

  • CollectDからメトリクスを監視しますか?警告:CollectDがインストールされていないと、Agentの起動に失敗します。
Do you want to monitor metrics from CollectD? WARNING: CollectD must be installed or the Agent will fail to start
1. yes
2. no
default choice: [1]:
2

CollectDは利用しないので2を選択します。
CollectDをインストールしてない状態で1を選択すると、エラーで起動に失敗します。

  • CPU、メモリなどを監視したいですか?
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:
1

今回はディスク使用率のカスタムメトリクスを取得したいので1を選択。

  • コアごとのCPUメトリックスを監視したいですか?
Do you want to monitor cpu metrics per core?
1. yes
2. no
default choice: [1]:
2

今回はコアごとのCPUメトリックスを監視する必要はないので2を選択。

  • ec2のディメンション(ImageId, InstanceId, InstanceType, AutoScalingGroupName)が利用可能であれば、すべてのメトリクスに追加しますか?
Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:
1

ディメンションが利用可能であれば追加したいので1を選択。

  • ec2のディメンション(InstanceId)を集約するか?
Do you want to aggregate ec2 dimensions (InstanceId)?
1. yes
2. no
default choice: [1]:
2

今回はメトリクスの集約は必要ないので2を選択。

  • メトリクスを何秒間隔で収集するか?
Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.
1. 1s
2. 10s
3. 30s
4. 60s
default choice: [4]:
4

今回は60秒間隔で十分なのでデフォルトの4を選択。

  • どのようなデフォルトメトリクス設定をご希望ですか?
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
1

今回使用するカスタムメトリクスはBasicで十分取得できるため1を選択。

  • 上記の設定に満足していますか?
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
1. yes
2. no
default choice: [1]:
1

問題ないので1を選択。

  • 既存のCloudWatch Log Agentはありますか?
Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?
1. yes
2. no
default choice: [2]:
2

既存のCloudWatch Log Agentはないので2を選択。

  • ログファイルを監視しますか?
Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
2

今回はログファイルを監視する必要はないので2を選択。

  • 設定したものがJSON形式で提示されます。
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
Current config as follows:
{
        "agent": {
                "metrics_collection_interval": 60,
                "run_as_user": "root"
        },
        "metrics": {
                "append_dimensions": {
                        "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
                        "ImageId": "${aws:ImageId}",
                        "InstanceId": "${aws:InstanceId}",
                        "InstanceType": "${aws:InstanceType}"
                },
                "metrics_collected": {
                        "disk": {
                                "measurement": [
                                        "used_percent"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "mem": {
                                "measurement": [
                                        "mem_used_percent"
                                ],
                                "metrics_collection_interval": 60
                        }
                }
        }
}
Please check the above content of the config.
The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.
Edit it manually if needed.
  • コンフィグをSSMパラメータストアに保存しますか?
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
2

SSMは利用しないので2を選択。

これでウィザードによる設定は完了です。

次に以下のコマンドを使用して、起動します。

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s

最後に起動できたかの確認のため以下のコマンドを使用します。

systemctl status amazon-cloudwatch-agent.service

起動確認できました。
file

上記の方法で両方のEC2インスタンスに設定し、Agentの設定は完了です。

5.CloudWatch Alarm作成

EC2にエラーが起きてないか、EBSのディスクに負荷がかかってないかを監視するためにCloudWatchAlarm(以下CWAlarm)を作成します。

まずシステムエラー時に通知と復旧を行うアラームを作成します。
作成には、[aws cloudwatch put-metric-alarm]コマンドを使用します。

使用するオプション 設定値 説明
--alarm-name umemoto-AR-1
umemoto-AR-2
アラーム名を指定します
--alarm-description "Alarm for monitoring StatusCheckFailed_System" アラームの説明を入力
--metric-name StatusCheckFailed_System 監視するメトリクスを指定
--namespace AWS/EC2 監視するサービスの名前空間を指定
--statistic Maximum 統計に最大を指定
--period 60 迅速なオートリカバリーを考慮し最小値
--threshold 1 1以上でエラー状態とするため
--comparison-operator GreaterThanOrEqualToThreshold 1以上でエラー状態とするため
--dimensions "Name=InstanceId,Value=i-xxxxx" インスタンスIDを指定
--evaluation-periods 2 2回データポイントが越えた時アラーム状態にする
--alarm-actions arn:aws:automate:ap-northeast-2:ec2:recover
arn:aws:sns:ap-northeast-2:xxxxx:umemoto-SNS
通知と復旧のアクションを指定
--treat-missing-data ignore アラーム後のデータ欠落時はなんらかのエラーが起きていることが予想されるため
--tags Key=Name,Value=umemoto-AR-1
Key=Name,Value=umemoto-AR-2
タグを入力

入力

aws cloudwatch put-metric-alarm `
    --alarm-name umemoto-AR-1 `
    --alarm-description "Alarm for monitoring StatusCheckFailed_System" `
    --metric-name StatusCheckFailed_System `
    --namespace AWS/EC2 `
    --statistic Maximum `
    --period 60 `
    --threshold 1 `
    --comparison-operator GreaterThanOrEqualToThreshold  `
    --dimensions "Name=InstanceId,Value=i-xxxxx" `
    --evaluation-periods 2 `
    --alarm-actions arn:aws:automate:ap-northeast-2:ec2:recover arn:aws:sns:ap-northeast-2:xxxxx:umemoto-SNS `
    --treat-missing-data ignore --tags Key=Name,Value=umemoto-AR-1
------
aws cloudwatch put-metric-alarm `
    --alarm-name umemoto-AR-2 `
    --alarm-description "Alarm for monitoring StatusCheckFailed_System" `
    --metric-name StatusCheckFailed_System `
    --namespace AWS/EC2 `
    --statistic Maximum `
    --period 60 `
    --threshold 1 `
    --comparison-operator GreaterThanOrEqualToThreshold  `
    --dimensions "Name=InstanceId,Value=i-xxxxx" `
    --evaluation-periods 2 `
    --alarm-actions arn:aws:automate:ap-northeast-2:ec2:recover arn:aws:sns:ap-northeast-2:xxxxx:umemoto-SNS `
    --treat-missing-data ignore --tags Key=Name,Value=umemoto-AR-2

出力なし

作成できたかの確認のため、[aws cloudwatch describe-alarms]コマンドを使用します。

使用するオプション 設定値 説明
--alarm-name "umemoto-AR-1"
"umemoto-AR-2 "
アラーム名を指定します
--query "MetricAlarms[*].{AlarmName:AlarmName,StateValue:StateValue}"  出力が長くなりすぎるため、名前と状態のみ抽出

入力

aws cloudwatch describe-alarms `
    --alarm-names "umemoto-AR-1" "umemoto-AR-2" `
    --query "MetricAlarms[*].{AlarmName:AlarmName,StateValue:StateValue}"

出力

[
    {
        "AlarmName": "umemoto-AR-1",
        "StateValue": "OK"
    },
    {
        "AlarmName": "umemoto-AR-2",
        "StateValue": "OK"
    }
]

作成の確認ができました。

次はEBSのディスク使用率が70%以上の時にメールで通知してくれるアラームを作成します。
作成には、[aws cloudwatch put-metric-alarm]コマンドを使用します。

使用するオプション 設定値 説明
--alarm-name umemoto-disk-1
umemoto-disk-2
アラーム名を指定します
--alarm-description "Alarm for monitoring DiskUsedPercent" アラームの説明を入力
--metric-name disk_used_percent 監視するメトリクスを指定
--namespace CWAgent 監視するサービスの名前空間を指定
--statistic Average 統計に平均を指定
--period 300 緊急性がないのでデフォルト値
--threshold 70 70%以上でエラー状態とするため
--comparison-operator GreaterThanOrEqualToThreshold 70%以上でエラー状態とするため
--dimensions Name=path,Value=/
Name=InstanceId,Value=i-xxxxx
Name=ImageId,Value=ami-0fa49cc9dc8d62c84
Name=InstanceType,Value=t2.micro
Name=device,Value=xvda1
Name=fstype,Value=xfs
必要な情報を入力
--evaluation-periods 2 2回データポイントが越えた時アラーム状態にする
--alarm-actions arn:aws:sns:ap-northeast-2:xxxxx:umemoto-SNS 通知のアクションを指定
--treat-missing-data missing データ欠落時はデータが欠落していると表示されても問題ないため
--tags Key=Name,Value=umemoto-disk-1
Key=Name,Value=umemoto-disk-2
タグを入力

入力

aws cloudwatch put-metric-alarm `
    --alarm-name umemoto-disk-1 `
    --alarm-description "Alarm for monitoring DiskUsedPercent" `
    --metric-name disk_used_percent `
    --namespace CWAgent `
    --statistic Average `
    --period 300 `
    --threshold 70 `
    --comparison-operator GreaterThanOrEqualToThreshold  `
    --dimensions "Name=InstanceId,Value=i-xxxxx" `
    --evaluation-periods 2 `
    --alarm-actions arn:aws:sns:ap-northeast-2:xxxxx:umemoto-SNS `
    --treat-missing-data missing --tags Key=Name,Value=umemoto-disk-1
-----
aws cloudwatch put-metric-alarm `
    --alarm-name umemoto-disk-2 `
    --alarm-description "Alarm for monitoring DiskUsedPercent" `
    --metric-name disk_used_percent `
    --namespace CWAgent `
    --statistic Average `
    --period 300 `
    --threshold 70 `
    --comparison-operator GreaterThanOrEqualToThreshold  `
    --dimensions "Name=InstanceId,Value=i-xxxxx" `
    --evaluation-periods 2 `
    --alarm-actions arn:aws:sns:ap-northeast-2:xxxxx:umemoto-SNS `
    --treat-missing-data missing --tags Key=Name,Value=umemoto-disk-2

出力なし

作成できたかの確認のため、[aws cloudwatch describe-alarms]コマンドを使用します。

使用するオプション 設定値 説明
--alarm-name "umemoto-disk-1"
"umemoto-disk-2 "
アラーム名を指定します
--query "MetricAlarms[*].{AlarmName:AlarmName,StateValue:StateValue}"  出力が長くなりすぎるため、名前と状態のみ抽出

入力

aws cloudwatch describe-alarms `
    --alarm-names "umemoto-disk-1" "umemoto-disk-2" `
    --query "MetricAlarms[*].{AlarmName:AlarmName,StateValue:StateValue}"

出力

[
    {
        "AlarmName": "umemoto-disk-1",
        "StateValue": "OK"
    },
    {
        "AlarmName": "umemoto-disk-2",
        "StateValue": "OK"
    }
]

作成の確認ができました。

さらにEC2が問題なく動作しているか監視するアラームを作成しましょう。
作成には、[aws cloudwatch put-metric-alarm]コマンドを使用します。

使用するオプション 設定値 説明
--alarm-name umemoto-ec2-1
umemoto-ec2-2
アラーム名を指定します
--alarm-description "Alarm for monitoring StatusCheckFailed" アラームの説明を入力
--metric-name StatusCheckFailed 監視するメトリクスを指定
--namespace AWS/EC2 監視するサービスの名前空間を指定
--statistic Maximum 統計に最大を指定
--period 60 迅速な復旧のため最小値とする
--threshold 1 1以上でエラー状態とするため
--comparison-operator GreaterThanOrEqualToThreshold 1以上でエラー状態とするため
--dimensions "Name=InstanceId,Value=i-xxxxx" インスタンスIDを指定
--evaluation-periods 2 2回データポイントが越えた時アラーム状態にする
--alarm-actions arn:aws:sns:ap-northeast-2:xxxxx:umemoto-SNS 通知のアクションを指定
--treat-missing-data missing データ欠落時はデータが欠落していると表示されても問題ないため
--tags Key=Name,Value=umemoto-ec2-1
Key=Name,Value=umemoto-ec2-2
タグを入力

入力

aws cloudwatch put-metric-alarm `
    --alarm-name umemoto-ec2-1 `
    --alarm-description "Alarm for monitoring StatusCheckFailed" `
    --metric-name StatusCheckFailed `
    --namespace AWS/EC2 `
    --statistic Maximum `
    --period 60 `
    --threshold 1 `
    --comparison-operator GreaterThanOrEqualToThreshold `
    --dimensions "Name=InstanceId,Value=i-xxxxx" `
    --evaluation-periods 2 `
    --alarm-actions arn:aws:sns:ap-northeast-2:xxxxx:umemoto-SNS `
    --treat-missing-data missing `
    --tags Key=Name,Value=umemoto-ec2-1
-----
aws cloudwatch put-metric-alarm `
    --alarm-name umemoto-ec2-2 `
    --alarm-description "Alarm for monitoring StatusCheckFailed" `
    --metric-name StatusCheckFailed `
    --namespace AWS/EC2 `
    --statistic Maximum `
    --period 60 `
    --threshold 1 `
    --comparison-operator GreaterThanOrEqualToThreshold `
    --dimensions "Name=InstanceId,Value=i-xxxxx" `
    --evaluation-periods 2 `
    --alarm-actions arn:aws:sns:ap-northeast-2:xxxxx:umemoto-SNS `
    --treat-missing-data missing `
    --tags Key=Name,Value=umemoto-ec2-2

出力なし

作成できたかの確認のため、[aws cloudwatch describe-alarms]コマンドを使用します。

使用するオプション 設定値 説明
--alarm-name "umemoto-ec2-1"
"umemoto-ec2-2 "
アラーム名を指定します
--query "MetricAlarms[*].{AlarmName:AlarmName,StateValue:StateValue}"  出力が長くなりすぎるため、名前と状態のみ抽出

入力

aws cloudwatch describe-alarms `
    --alarm-names "umemoto-ec2-1" "umemoto-ec2-2" `
    --query "MetricAlarms[*].{AlarmName:AlarmName,StateValue:StateValue}"

出力

[
    {
        "AlarmName": "umemoto-ec2-1",
        "StateValue": "OK"
    },
    {
        "AlarmName": "umemoto-ec2-2",
        "StateValue": "OK"
    }
]

作成の確認ができました。

最後にALBの分散対象のEC2が正常かどうかを監視するアラームを作成します。
作成には、[aws cloudwatch put-metric-alarm]コマンドを使用します。

使用するオプション 設定値 説明
--alarm-name umemoto-ALB アラーム名を指定します
--alarm-description "Alarm for monitoring HealthyHostCount" アラームの説明を入力
--metric-name HealthyHostCount 監視するメトリクスを指定
--namespace AWS/ApplicationELB 監視するサービスの名前空間を指定
--statistic Minimum 統計に最小を指定
--period 60 迅速な復旧のため最小値とする
--threshold 1 1以下でエラー状態とするため
--comparison-operator LessThanOrEqualToThreshold 1以下でエラー状態とするため
--dimensions Name=TargetGroup,Value=targetgroup/umemoto-TGN/xxxxx
Name=LoadBalancer,Value=app/umemoto-ALB/xxxxx
ターゲットグループとロードバランサの情報を指定
--evaluation-periods 2 2回データポイントが越えた時アラーム状態にする
--alarm-actions arn:aws:sns:ap-northeast-2:xxxxx:umemoto-SNS 通知のアクションを指定
--tags Key=Name,Value=umemoto-ec2-1
Key=Name,Value=umemoto-ec2-2
タグを入力

入力

aws cloudwatch put-metric-alarm `
    --alarm-name umemoto-ALB `
    --alarm-description "Alarm for monitoring HealthyHostCount" `
    --metric-name HealthyHostCount `
    --namespace AWS/ApplicationELB `
    --statistic Minimum `
    --period 60 `
    --threshold 1 `
    --comparison-operator LessThanOrEqualToThreshold  `
    --dimensions Name=TargetGroup,Value=targetgroup/umemoto-TGN/xxxxx Name=LoadBalancer,Value=app/umemoto-ALB/xxxxx`
    --evaluation-periods 2 `
    --alarm-actions arn:aws:sns:ap-northeast-2:xxxxx:umemoto-SNS `
    --treat-missing-data missing `
    --tags Key=Name,Value=umemoto-ALB

出力なし

作成できたかの確認のため、[aws cloudwatch describe-alarms]コマンドを使用します。

使用するオプション 設定値 説明
--alarm-name "umemoto-ALB" アラーム名を指定します
--query "MetricAlarms[*].{AlarmName:AlarmName,StateValue:StateValue}"  出力が長くなりすぎるため、名前と状態のみ抽出

入力

aws cloudwatch describe-alarms `
    --alarm-names "umemoto-ALB" `
    --query "MetricAlarms[*].{AlarmName:AlarmName,StateValue:StateValue}"

出力

[
    {
        "AlarmName": "umemoto-ALB",
        "StateValue": "OK"
    }
]

作成の確認ができました。

これですべてのアラームが作成できました。

6.検証

ここまでできたら今回設定したCloudwatchAgentとCloudwatchAlarm、前回設定したSNSが正常に機能するかの検証を行います。

6-1.CloudWatchAgent起動確認

検証はCloudWatchAgentを設定した2つのEC2にSSHで接続してCloudWatchAgentが起動しているかの確認を行います。

2つのEC2にSSHで接続して以下のコマンドでCloudWatchAgentの起動を確認します。

systemctl status amazon-cloudwatch-agent.service

出力

[ec2-user@ip-10-0-1-10 ~]$ systemctl status amazon-cloudwatch-agent.service
● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
   Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2022-06-02 02:39:29 UTC; 13min ago
-----
[ec2-user@ip-10-0-2-20 ~]$ systemctl status amazon-cloudwatch-agent.service
● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
   Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2022-06-02 02:39:44 UTC; 14min ago

両方のEC2でCloudWatchAgentの起動を確認できました。

6-2.CloudWatchAlarm、SNS動作検証

検証は二つのEC2の片方を停止してHealthyHostCountの値が1になった際、それを監視しているアラームがSNSにアラーム状態になったことのメールを通知し、SNSを通じてエンドポイントである私のメールアドレスに配信されるかで機能確認します。

①まず最初に現在のアラームの状態を以下のコマンドで確認します。

aws cloudwatch describe-alarms `
    --alarm-names "umemoto-ALB" `
    --query "MetricAlarms[*].{AlarmName:AlarmName,StateValue:StateValue}"

出力

[
    {
        "AlarmName": "umemoto-ALB",
        "StateValue": "OK"
    }
]

OK状態であることが確認できました。

②二つあるEC2インスタンスの片方を以下のコマンドで停止させます。

aws ec2 stop-instances --instance-ids [instance_id]

出力

{
    "StoppingInstances": [
        {
            "CurrentState": {
                "Code": 64,
                "Name": "stopping"
            },
            "InstanceId": "i-02bf73f895701498e",
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}

③停止できたか、以下のコマンドを使用して確認します。

aws ec2 describe-instances `
    --instance-ids i-02bf73f895701498e `
    --query "Reservations[].Instances[].[Tags[].{Name:Value},State.{InstanceStatus:Name}]"

出力

[
    [
        [
            {
                "Name": "umemoto-wordpress-2"
            }
        ],
        {
            "InstanceStatus": "stopped"
        }
    ]
]

停止を確認できました。

④数分時間を置き、以下のコマンドでアラームの状態を再度確認します。

aws cloudwatch describe-alarms `
    --alarm-names "umemoto-ALB" `
    --query "MetricAlarms[*].{AlarmName:AlarmName,StateValue:StateValue}"

出力

[
    {
        "AlarmName": "umemoto-ALB",
        "StateValue": "ALARM"
    }
]

アラーム状態になっていることを確認できました。

⑤最後に自分のメールアドレスにアラームのメールが配信されているかの確認をします。

file

自分のメールアドレスに配信されていることを確認できました。

これで検証を終わります。

6-3.Disk監視アラーム検証

最後に今回作成したディスク使用率を監視するアラームが正常に動作するかの検証をしていきます。

検証のためEC2インスタンスにSSHで接続し、ダミーファイルを作成します。

①EC2にSSHで接続出来たら、以下のコマンドを使用して4GBのダミーファイルを作成します。

dd if=/dev/zero of=4G.dummy bs=1MD count=4000

②しばらく時間を置いた後、マネコンからアラーム状態になっていることを確認します。
file
確認できました。

③自分のメールアドレスにアラームのメールが配信されているかの確認をします。
file
確認できました。

④最後に、今回作成したダミーファイルを以下のコマンドで削除します。

rm 4G.dummy

これで検証を終わります。

7.感想

CloudWatchAlarmの作成はオプションが多く大変でしたが良い経験になりました。
次回もよろしくお願いします。

8.参照

AWS CLI Command Reference – cloudwatch
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/index.html

Last modified: 2022-06-13

Author