目次
1.この記事を書いた経緯
2.アラーム登録コマンド紹介
注意事項
ステータスチェック_システム
ステータスチェック_インスタンス
cpu使用率
メモリ使用率_linux
メモリ使用率_windows
ディスク使用率_linux
ディスク残量_windows
3.作業実施後
1. この記事を書いた経緯
CloudWatchアラーム(以降CWアラームと表記)はシステムの保守・運用に不可欠な存在ですが、AWSマネジメントコンソールから登録するためには
①監視対象のメトリクスを選ぶ
②アラート条件を設定
③アクションを設定
④アラーム名を設定
と大まかに4つの作業を実施する必要があります。
私が参加していたプロジェクトではCWアラームの数が50個ほどあったためミスなく設定するために気を遣いまくり、神経を削られておりました。
そこでCWアラーム登録をCloudshellからコマンド実行できるようにしたところ、素早く正確にストレス少なく登録できるようになりました。
今回は私と同じようにしんどい思いをしている人&これからする人の一助になればと思い、CWアラーム登録コマンドの例を記載していきたいと思います。EC2の特定のメトリクス限定の紹介になってしまいますが、お役に立てば幸いです。
2. アラーム登録コマンド紹介
注意事項
-
アラーム共通の設定について
- 状態がアラーム・OKに変わった際、SNSトピックに登録したメールアドレスに発報する
- 期間は1分
- データポイントは1/1(評価期間の中で1個のデータポイントのうち1個が閾値を
上回った/下回った時に状態遷移する) - 取得できないメトリクスは「データ不足」として扱う
※ここら辺の設定は結構適当なので、必要に応じて変えて下さい。
-
コマンドに出現する置換対象は<>で囲ったものになります。Excelの文字列結合で置換対象を
セル参照できるようにしておくと、インスタンスIDなどを簡単に入れ替えられるので楽です。
ステータスチェック_システム
- AWSの物理ホストに異常発生を監視するメトリクス
- 最小値が0を上回った場合アラーム状態に遷移
- アラーム状態遷移時のアクションとして、メール発報に加えてインスタンスを再起動する
aws cloudwatch put-metric-alarm \
--alarm-name "<アラーム名>" \
--alarm-description "" \
--alarm-actions "<SNSトピックのARN>" "arn:aws:swf:<リージョン>:<アカウントID>:action/actions/AWS_EC2.InstanceId.Reboot/1.0" \
--ok-actions "<SNSトピックのARN>" \
--namespace "AWS/EC2" \
--dimensions "Name=InstanceId,Value=<EC2のインスタンスID>" \
--metric-name "StatusCheckFailed_System" \
--threshold 0.0 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 1 \
--datapoints-to-alarm 1 \
--period 60 \
--statistic "Minimum" \
--treat-missing-data missing
aws cloudwatch put-metric-alarm \
--alarm-name "test1" \
--alarm-description "" \
--alarm-actions "arn:aws:sns:ap-northeast-1:123456789012:cwalarm-test" "arn:aws:swf:ap-northeast-1:123456789012:action/actions/AWS_EC2.InstanceId.Reboot/1.0" \
--ok-actions "arn:aws:sns:ap-northeast-1:123456789012:cwalarm-test" \
--namespace "AWS/EC2" \
--dimensions "Name=InstanceId,Value=i-0f7846263346a65b2" \
--metric-name "StatusCheckFailed_System" \
--threshold 0.0 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 1 \
--datapoints-to-alarm 1 \
--period 60 \
--statistic "Minimum" \
--treat-missing-data missing
ステータスチェック_インスタンス
- EC2のソフトウェアとネットワークの異常発生を監視するメトリクス
- メトリクス名以外は、ステータスチェック_システムと同じ設定
aws cloudwatch put-metric-alarm \
--alarm-name "<アラーム名>" \
--alarm-description "" \
--alarm-actions "<SNSトピックのARN>" "arn:aws:swf:<リージョン>:<アカウントID>:action/actions/AWS_EC2.InstanceId.Reboot/1.0" \
--ok-actions "<SNSトピックのARN>" \
--namespace "AWS/EC2" \
--dimensions "Name=InstanceId,Value=<EC2のインスタンスID>" \
--metric-name "StatusCheckFailed_Instance" \
--threshold 0.0 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 1 \
--datapoints-to-alarm 1 \
--period 60 \
--statistic "Minimum" \
--treat-missing-data missing
cpu使用率
- 最大値が閾値90%を上回った場合アラート状態に遷移
aws cloudwatch put-metric-alarm \
--alarm-name "<アラーム名>" \
--alarm-description "" \
--alarm-actions "<SNSトピックのARN>" \
--ok-actions "<SNSトピックのARN>" \
--namespace "AWS/EC2" \
--dimensions "Name=InstanceId,Value=<EC2のインスタンスID>" \
--metric-name "CPUUtilization" \
--threshold 90.0 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 1 \
--datapoints-to-alarm 1 \
--period 60 \
--statistic Maximum \
--treat-missing-data missing
メモリ使用率_linux
- 最大値が閾値90%を上回った場合アラート状態に遷移
※ 名前空間はデフォルトで設定されるCWAgentとしております。環境に応じて変えてください
aws cloudwatch put-metric-alarm \
--alarm-name "<アラーム名>" \
--alarm-description "" \
--alarm-actions "<SNSトピックのARN>" \
--ok-actions "<SNSトピックのARN>" \
--namespace "CWAgent" \
--dimensions "Name=host,Value=<インスタンスのホスト名>" \
--metric-name "mem_used_percent" \
--threshold 90.0 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 1 \
--datapoints-to-alarm 1 \
--period 60 \
--statistic Maximum \
--treat-missing-data missing
メモリ使用率_windows
- 最大値が閾値90%を上回った場合アラート状態に遷移
aws cloudwatch put-metric-alarm \
--alarm-name "<アラーム名>" \
--alarm-description "" \
--alarm-actions "<SNSトピックのARN>" \
--ok-actions "<SNSトピックのARN>" \
--namespace "CWAgent" \
--dimensions "Name=host,Value=<インスタンスのホスト名>" "Name=objectname,Value=Memory" \
--metric-name "Memory % Committed Bytes In Use" \
--threshold 90.0 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 1 \
--datapoints-to-alarm 1 \
--period 60 \
--statistic Maximum \
--treat-missing-data missing
ディスク使用率_linux
aws cloudwatch put-metric-alarm \
--alarm-name "<アラーム名>" \
--alarm-description "" \
--alarm-actions "<SNSトピックのARN>" \
--ok-actions "<SNSトピックのARN>" \
--namespace "CWAgent" \
--dimensions \
"Name=path,Value=<パス名>" \
"Name=host,Value=<インスタンスのホスト名>" \
"Name=device,Value=<デバイス名>" \
"Name=fstype,Value=<fstype名>" \
--metric-name "disk_used_percent" \
--threshold 90.0 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 1 \
--datapoints-to-alarm 1 \
--period 60 \
--statistic Maximum \
--treat-missing-data missing
aws cloudwatch put-metric-alarm \
--alarm-name "test-disk" \
--alarm-description "" \
--alarm-actions "arn:aws:sns:ap-northeast-1:123456789012:cwalarm-test" \
--ok-actions "arn:aws:sns:ap-northeast-1:123456789012:cwalarm-test" \
--namespace "CWAgent" \
--dimensions \
"Name=path,Value=/" \
"Name=host,Value=cwalarm-test" \
"Name=device,Value=xvda1" \
"Name=fstype,Value=xfs" \
--metric-name "disk_used_percent" \
--threshold 90.0 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 1 \
--datapoints-to-alarm 1 \
--period 60 \
--statistic Maximum \
--treat-missing-data missing
ディスク残量_windows
- 最小値が閾値10%を下回った場合アラート状態に遷移
aws cloudwatch put-metric-alarm \
--alarm-name "<アラーム名>" \
--alarm-description "" \
--alarm-actions "<SNSトピックのARN>" \
--ok-actions "<SNSトピックのARN>" \
--namespace "CWAgent" \
--dimensions \
"Name=instance,Value=<パス名>" \
"Name=host,Value=<インスタンスのホスト名>" \
"Name=objectname,Value=LogicalDisk" \
--metric-name "LogicalDisk % Free Space" \
--threshold 10.0 \
--comparison-operator LessThanThreshold \
--evaluation-periods 1 \
--datapoints-to-alarm 1 \
--period 60 \
--statistic Minimum \
--treat-missing-data missing
3. 作業実施後
各インスタンスに紐づいていることを確認するため、テストを実施してみてください。
おすすめはClassmethod様の設定した CloudWatch Alarm をテストする方法にあるやり方で、cloudshellからお手軽に実行できます。ただしステータスチェック系に対して実行するとインスタンスが再起動してしまうことにはご注意ください。