このブログは、t2.microを利用しているのですが、t2.nanoでもいいんじゃないかと思っています。しかしながら、リソースの使用率などをモニタリングしているワケではなかったので判断材料のために、Cloudwatchでモニタリングを追加しました。
Cloudwatchで出来るEC2モニタリング
Cloudwatchは、メトリクスと呼ばれる単位でモニタリングすることができますが、Cloudwatchでそのままモニタリング出来るもの、EC2インスタンスから値をputしないと出来ないものがあります。詳細はマニュアルをご覧いただきたいと思いますが、ざっくりは下記のとおりです。
そのまま利用可 | EC2からputが必要 |
---|---|
CPU使用率 | – |
– | メモリ使用率 |
– | 使用中のメモリ |
– | 利用可能なメモリ |
ネットワーク使用率 | – |
ディスクパフォーマンス | – |
– | ディスクスワップ使用率 |
– | ページファイル使用率 |
ディスク読み書き | – |
– | ディスクスペースの使用率 |
– | 使用ディスクスペース |
– | 利用可能なディスクスペース |
メモリモニタリングの追加
前述のとおり、CPU使用率はCloudwatchの標準メトリクスに含まれているので、すぐに利用可能です。今回は、EC2側での作業が必要となるメモリモニタリングについて記載しています。流れは、こちらのマニュアルを参考にしました。
前提条件の準備
私の環境はubuntuでしたので、apt-getコマンドでインストールしています。
$ sudo apt-get update
$ sudo apt-get install unzip
$ sudo apt-get install libwww-perl libdatetime-perl
スクリプトのダウンロード、設定
以下の手順で、EC2 Linuxインスタンスで CloudWatch Monitoring Scripts のダウンロード、設定を行います。
1.展開するフォルダへ移動し、curlコマンドでダウンロードする。
$ cd /usr/local/bin
$ sudo curl http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip -O
2.圧縮ファイルを展開する
$ sudo unzip CloudWatchMonitoringScripts-1.2.1.zip
$ rm CloudWatchMonitoringScripts-1.2.1.zip
3.IAMロールもしくは、通知用アカウントのIAMポリシーに以下を追加します。私の環境では、EC2インスタンスにIAMロールを割り当てていなかったので、Cloudwatch通知用のIAMユーザー、ポリシーを作成しました。
- cloudwatch:PutMetricData
- cloudwatch:GetMetricStatistics
- cloudwatch:ListMetrics
- ec2:DescribeTags
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudwatch:GetMetricStatistics",
"cloudwatch:ListMetrics",
"cloudwatch:PutMetricData"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:DescribeTags"
],
"Resource": [
"*"
]
}
]
}
4.IAMロールを使用しない場合は、先程展開したディレクトリ以下に、awscreds.templateというファイルがありますので、こちらに通知用アカウントのアクセスキー、シークレットキーを記載します。(すでにAWSCLIなどによって、認証情報ファイルを持っている場合は、この手順は不要です)
$ cd aws-scripts-mon
$ vi awscreds.template
AWSAccessKeyId=<アクセスキーIDを記入>
AWSSecretKey=<シークレットキーを記入>
環境変数「AWS_CREDENTIAL_FILE」に認証情報ファイルのパスを定義します。(Cloudwatch通知のスクリプトに埋め込んでも構いません)
$ vi /etc/environment
AWS_CREDENTIAL_FILE=’/usr/local/bin/aws-scripts-mon/awscreds.template’
$ . /etc/environment
5.以下のコマンドでテストランします。(CloudwatchにはデータをPUTしません)
$ ./mon-put-instance-data.pl –mem-util –verify –verbose
MemoryUtilization: 42.2460208756435 (Percent)
Using AWS credentials file </usr/local/bin/aws-scripts-mon/awscreds.template>
Endpoint: https://monitoring.ap-northeast-1.amazonaws.com
Payload: {“MetricData”:[{“Value”:42.2460208756435,”Unit”:”Percent”,”Dimensions”:[{“Name”:”InstanceId”,”Value”:”i-03233e9c”}],”MetricName”:”MemoryUtilization”,”Timestamp”:1483670489}],”Namespace”:”System/Linux”,”__type”:”com.amazonaws.cloudwatch.v2010_08_01#PutMetricDataInput”}Verification completed successfully. No actual metrics sent to CloudWatch.
6.cronに登録し、定期的にCloudwatchへ通知を行います。以下の例では5分毎に、ディスクスペース、メモリ使用率、メモリ使用量、メモリ使用可能量を通知しています。
crontab -e
*/5 * * * * /usr/local/bin/aws-scripts-mon/mon-put-instance-data.pl –mem-util –mem-used –mem-avail –disk-space-util –disk-path=/ –from-cron
以下のメッセージが表示される場合は、エディターを選択して進めてください。以下の例ではviエディターを使うため、「3」を選択しました。
no crontab for bitnami – using an empty one
Select an editor. To change later, run ‘select-editor’.
1. /bin/ed
2. /bin/nano <—- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tinyChoose 1-4 2: 3
CloudWatchで確認
正常に通知が行えておれば、メトリクス内の「Linuxシステム」以下に、ディスク、メモリそれぞれのメトリクスが追加されています。
これでLinuxシステムのメモリ監視もバッチリですね。しばらく様子を見て、負荷が低いことが確認できれば、t2.nanoインスタンスに変更したいと思います。
コメントを残す