この記事は公開されてから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.フロー図
カスタムメトリクスを含むCloudWatchAlarmのアラームの通知を自分のメールアドレスに配信するには上記の図の構成でします。
今回はCLoudwatchAlarm作成までのフローを以下で紹介します。
- EC2起動時にユーザーデータでインストールしたCloudWatchAgentの初期設定をします。
- 収集したメトリクスを利用して、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
起動確認できました。
上記の方法で両方の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"
}
]
アラーム状態になっていることを確認できました。
⑤最後に自分のメールアドレスにアラームのメールが配信されているかの確認をします。
自分のメールアドレスに配信されていることを確認できました。
これで検証を終わります。
6-3.Disk監視アラーム検証
最後に今回作成したディスク使用率を監視するアラームが正常に動作するかの検証をしていきます。
検証のためEC2インスタンスにSSHで接続し、ダミーファイルを作成します。
①EC2にSSHで接続出来たら、以下のコマンドを使用して4GBのダミーファイルを作成します。
dd if=/dev/zero of=4G.dummy bs=1MD count=4000
②しばらく時間を置いた後、マネコンからアラーム状態になっていることを確認します。
確認できました。
③自分のメールアドレスにアラームのメールが配信されているかの確認をします。
確認できました。
④最後に、今回作成したダミーファイルを以下のコマンドで削除します。
rm 4G.dummy
これで検証を終わります。
7.感想
CloudWatchAlarmの作成はオプションが多く大変でしたが良い経験になりました。
次回もよろしくお願いします。
8.参照
AWS CLI Command Reference – cloudwatch
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/index.html