2
2

More than 1 year has passed since last update.

AWS CloudWatchでディスク容量とメモリ使用量を監視&アラート時に通知設定手順

Last updated at Posted at 2021-10-26

CloudWatchでディスク容量やメモリ使用量まで含めて監視設定しようと思うたびにあっちこっちのサイトを見て時間を浪費してしまっていたので手順を記載します。
Linuxサーバで構築している前提の話です。

おおまかな手順

  1. EC2インスタンスにsshで入る
  2. perlモジュールのインストール
  3. curlコマンドを実行してモニタリングスクリプトをダウンロード
  4. ダウンロードしたモニタリングスクリプトをインストール
  5. IAMユーザーを作成
  6. 認証を設定
  7. Cronを設定
  8. 通知用SNSを作成
  9. アラートの作成

1. EC2インスタンスにsshで入る

使っているec2サーバ内にsshコマンドで入ります。
スクリーンショット 2021-10-26 1.19.41.png

2. perlモジュールのインストール

サーバの情報をCloudWatchへ送る際にそれぞれ必要なモジュールが存在するためにインストールします。

sudo yum install perl-Switch perl-Sys-Syslog perl-LWP-Protocol-https perl-DateTime
sudo yum install gcc make perl-CPAN perl-Time-HiRes perl-XML-Parser mod_perl cpanminus

3. curlコマンドを実行してモニタリングスクリプトをダウンロード

curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O

4. ダウンロードしたモニタリングスクリプトをインストール

解凍とzipファイルの削除とディレクトリ移動を同時に行なっています。

unzip CloudWatchMonitoringScripts-1.2.2.zip && \
rm CloudWatchMonitoringScripts-1.2.2.zip && \
cd aws-scripts-mon

失敗するとわかっていますがここで動作テストしてみます。
CloudWatch にデータを送信しない簡単なテストです。

./mon-put-instance-data.pl --mem-util --verify --verbose

失敗します。
EC2インスタンスとIAMロールが関連づけられていないことが原因です。

MemoryUtilization: 9.57435398335551 (Percent)
No credential methods are specified. Trying default IAM role.
ERROR: No IAM role is associated with this EC2 instance.
For more information, run 'mon-put-instance-data.pl --help'

5. IAMユーザーを作成

AWSのIAMのサービスページにて「ユーザを追加」を選択

スクリーンショット 2021-10-26 1.31.24.png

ユーザ名は今回は「CloudWatch」にします。
AWS 認証情報タイプの選択はアクセスキーさえチェックが入っていればOKですがここでは2つとも入れてます。
次のステップへ。

スクリーンショット 2021-10-26 1.33.33.png

既存のポリシーを直接アタッチを選択し、「CloudWatchAgentAdminPolicy」を選択し次のステップへ。

スクリーンショット 2021-10-26 1.36.36.png

タグはいらないのでスキップしてユーザの作成をする

スクリーンショット 2021-10-26 1.38.27.png

「.csvのダウンロード」を押して作成したIAMの情報を保存
この画面で出てくるアクセスキーIDとシークレットアクセスキーは後ほど使用します。

スクリーンショット 2021-10-26 1.39.33.png

6. 認証を設定

IAMユーザーを作成したら、アクセスキーIDとシークレットアクセスキーを設定します。解凍されたファイルの中に、awscreds.templateというファイルがあるのでawscreds.confという名前でコピーして編集します。 先程追加したIAMユーザーのアクセスキーIDとシークレットキーを設定します。

cp awscreds.template awscreds.conf
vi awscreds.conf

# 先ほど保存したアクセスキーIDとシークレットアクセスキーを挿入します
AWSAccessKeyId=[アクセスキーID]
AWSSecretKey=[シークレットキー]

ここで動作確認をします。
さきほどと同じようにCloudWatch にデータを送信せずに簡単なテストを実行します。

./mon-put-instance-data.pl --mem-util --verify --verbose

動作テストに成功します

MemoryUtilization: 11.2770928669156 (Percent)
Using AWS credentials file <./awscreds.conf>
Endpoint: https://monitoring.ap-northeast-1.amazonaws.com
Payload: {"MetricData":[{"Timestamp":1635180338,"Dimensions":[{"Value":"i-025913bb8d07e4678","Name":"InstanceId"}],"Value":11.2770928669156,"Unit":"Percent","MetricName":"MemoryUtilization"}],"Namespace":"System/Linux","__type":"com.amazonaws.cloudwatch.v2010_08_01#PutMetricDataInput"}

Verification completed successfully. No actual metrics sent to CloudWatch.

7. Cronを設定

cron スケジュールを設定します。crontab -e コマンドを使用して crontab の編集を開始します。5 分ごとにメモリとディスクスペースの使用状況を CloudWatch にレポートします。

crontab -e

*/5 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron

8. 通知用SNSを作成

AmazonSNSのサービスページにて「トピック作成」を選択

スクリーンショット 2021-10-26 1.48.45.png

タイプをスタンダードにして名前と表示名はわかりやすい名前にします。
「プロジェクト名_alert」とかで自分は結構付けます。
トピックの作成をします。

スクリーンショット 2021-10-26 1.49.17.png

次に通知の送信先を設定するためにサブスクリプションの作成をします。
「サブスクリプションの作成」を選択します。

スクリーンショット 2021-10-26 1.49.30.png

トピックARNはデフォルトのままでプロトコルをEメールにします。
エンドポイントには設定したいメールアドレスを設定します。
サブスクリプションの作成。

スクリーンショット 2021-10-26 1.50.08.png

サブスクリプションが作成されましたが、ステータスがまだ保留中です。
設定したメールアドレスに確認メールが届いていますのでそちらを許可します。

スクリーンショット 2021-10-26 1.50.30.png

このようなメールが届いていますので「Confirm subscription」を押して許可します。

スクリーンショット 2021-10-26 2.00.03.png

この画面が出てればOKです。

スクリーンショット 2021-10-26 2.02.29.png

9. アラートの作成

やっとアラートの設定です。
CloudWatchのサービスページにてアラームの作成を選択します。

スクリーンショット 2021-10-26 2.05.16.png

メトリクスの選択画面でSystem/Linuxの項目ができていることがわかります。

スクリーンショット 2021-10-26 2.06.16.png

DiskSpaceUtilization(ディスク使用率)やMemoryUtilization(メモリ使用率) をメトリクスとして選択できるようになっています。

スクリーンショット 2021-10-26 2.08.52.png

統計を最大にして期間はデフォルト最短の5分にします。
1分にしても拡張アラート(有料)にしていないと1分ごとには測定してくれないのと無闇に欠落データをつくってしまって正確な測定結果が得られない可能性があるため5分推奨です。

スクリーンショット 2021-10-26 2.11.09.png

今回はディスク使用率90%以上になるように設定します。
欠落データは無視するようにします。

スクリーンショット 2021-10-26 2.11.25.png

さきほどAmazon SNSで設定したトピックを選択してアラート時の通知先設定をします。
他の設定は特に不要であれば次へ。

スクリーンショット 2021-10-26 2.14.27.png

名前と説明を入力し次へを選択し内容を確認してアラームの作成

スクリーンショット 2021-10-26 2.16.41.png

アラート作成まで完了

これで以上になります。
作成直後は状態がデータ不足ですが5分ごとにメトリクスをサーバから送信しているため5分後に状態がOKかアラートになるかと思います。

スクリーンショット 2021-10-26 2.18.24.png

参考

AWS CloudWatchでディスク容量チェック
CloudWatchでリソースを監視する手順。メモリやディスクの使用率を可視化しよう!

2
2
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
2
2