EC2はCPU使用率やネットワークI/Oといった値を5分毎にCloudWatchへ送信しているため、その値に対してアラームを設定することで監視を行うことが可能です。
ただし、デフォルトではメモリ利用率はCloudWatchへデータを送信するようになっていません。
これを行うにはAmazonが提供しているサンプルスクリプトを利用して自分で設定する必要があります。
今回はその手順をまとめます。
監視対象のインスタンスにSSHログイン
ssh -i ~/.ssh/xxx.pem ec2-user@インスタンスのグローバルIPアドレス
必要なパッケージをインストール
sudo yum -y install perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https
スクリプト用ディレクトリの用意
スクリプト用のディレクトリを作成して移動します。
sudo mkdir /usr/local/cloudwatch
cd /usr/local/cloudwatch
スクリプトのダウンロード・解凍
sudo wget http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip
sudo unzip CloudWatchMonitoringScripts-1.2.1.zip
sudo rm CloudWatchMonitoringScripts-1.2.1.zip
設定ファイルの作成
cd aws-scripts-mon
sudo cp awscreds.template awscreds.conf # 雛形からコピーして設定ファイルを作成
sudo vi awscreds.conf
作成した設定ファイルに管理しているAWSアカウントのアクセスキーIDとシークレットキーを記入します。
AWSAccessKeyId=[アクセスキーID]
AWSSecretKey=[シークレットキー]
cronにメモリ利用率を送信する設定を行う
crontab -e
crontabに以下記述を追加
*/5 * * * * /usr/local/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --mem-avail --from-cron
送信したデータを確認する
設定を終えてしばらくしてから、
CloudWatchを開くと左下にLinuxシステム(英語表記はLinux System)という項目が追加されています。
ちゃんと設定できていれば、ここにメモリ利用率(mem-util)、利用メモリ量(mem-used)、利用可能メモリ量(mem-avail)の推移がグラフで表示されるようになります。
今回設定した内容はデフォルトの値ではなく、カスタムメトリクスの扱いになるのでアラームの設定はEC2の画面からではなく、CloudWatchのLinuxシステムの画面から設定する点に注意してください。
他にも同様の手順で、ディスク利用量を監視することも出来ます。次はそちらも試してみようと思います。
何か間違っていたり、もっと良い方法があればぜひコメントで教えて下さい!
追記
上記の手順をシェルスクリプト化してみた
#!/bin/sh
sudo yum -y install perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https
sudo mkdir /usr/local/cloudwatch
cd /usr/local/cloudwatch
sudo wget http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip
sudo unzip CloudWatchMonitoringScripts-1.2.1.zip
sudo rm CloudWatchMonitoringScripts-1.2.1.zip
cd aws-scripts-mon
sudo touch awscreds.conf
sudo chmod 777 awscreds.conf
sudo echo -e "AWSAccessKeyId=[アクセスID]\nAWSSecretKey=[シークレットキー]" > awscreds.conf
sudo touch cron.txt
sudo chmod 777 cron.txt
sudo echo '*/5 * * * * /usr/local/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --mem-avail --from-cron' > cron.txt
crontab cron.txt
sudo rm cron.txt
実際にリクエストした内容の結果を知りたい場合は--verbose
オプションをつける
/usr/local/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --mem-avail --verbose
参考にしたサイト
Amazon EC2 インスタンスのモニタリングスクリプト - Amazon Elastic Compute Cloud http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/mon-scripts.html
Amazon ClouldWatchで始めるAWSのリソース監視、はじめの一歩
http://codezine.jp/article/detail/8100