Help us understand the problem. What is going on with this article?

AWS EC2でメモリ利用率をCloud Watchで監視する

More than 5 years have passed since last update.

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_Management_Console.png

設定を終えてしばらくしてから、
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

masarufuruya
Webメインのフリーランスエンジニア。フロント、バック、スマホアプリの実務経験あり。React/React Native/Vue/Ruby/PHP
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away