LoginSignup
1
1

More than 1 year has passed since last update.

CloudWatchアラームの設定作業で苦しむ人を減らしたい

Posted at

目次

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%を上回った場合アラート状態に遷移
cpu使用率
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としております。環境に応じて変えてください

メモリ使用率_linux
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%を上回った場合アラート状態に遷移
メモリ使用率_windows
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

  • 最大値が閾値90%を上回った場合アラート状態に遷移
  • <パス名>、<デバイス名>、<fstype名>は下記画像のようにメトリクス画面から確認可能
    スクリーンショット 2022-04-16 23.56.29.png
ディスク使用率_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%を下回った場合アラート状態に遷移
ディスク残量_windows
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からお手軽に実行できます。ただしステータスチェック系に対して実行するとインスタンスが再起動してしまうことにはご注意ください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1