CloudWatchでリソース監視する手順(メモリ / CPU / ディスクの使用率)

AWSでEC2インスタンスを立ち上げればAmazon CloudWatchが基本的なリソース監視をしてくれているといいのですが、デフォルトで取得する項目は、CPU使用率、デイスク、ネットワークI/Oのグラフとなっています。メモリ使用率とディスク使用率については、別途、設定が必要になります。

そこでこの記事では、CloudWatchでメモリ使用率、ディスク使用率を取得する手順を詳しく紹介します。また、無料かつ5分でリソース監視を始める方法も紹介しますので参考にしてみてください。

目次

CloudWatchでリソース監視する手順

今回はAWSの以下のインスタンスにCloudWatchを設定してメモリ使用率とディスク使用率を取得します。

Platform type AMI(OS) Type
Linux Amazon Linux 2 AMI (HVM), SSD Volume Type t2.micro
Windows Microsoft Windows Server 2019 Base t2.micro

LinuxWindows、それぞれ設定し、各環境差異も見ていきましょう。最後に通知設定の手順も紹介します。

Linuxのメモリ使用率・ディスク使用率

LinuxはEC2インスタンスにターミナルからログインして設定していきます。

1. EC2のインスタンスにターミナルからログインします。AmazonLinuxにログインするとこのような画面になります。

2. yumコマンドで必要なパッケージをインストールします。

$ sudo yum install -y perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA.x86_64

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

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

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

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

5. CloudWatch にデータを送信せずに簡単なテストを実行します。

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

以下のようなメッセージが出力されました。このEC2インスタンスに関連するIAMロールがないというメッセージになります。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'

6. IAMユーザーを作成します。

今回は「CW」というユーザーを作成します。

「既存のポリシーを直接アタッチ」を選択し「CloudWatchAgentAdminPolicy」を選択します。

特に設定なく次に進みます。

設定内容を確認して作成します。

この画面で出てくるアクセスキーIDとシークレットアクセスキーを後ほど使用しますのでコピーしておきます。

7. 認証を設定します。

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

$ cp awscreds.template awscreds.conf
$ vi awscreds.conf


AWSAccessKeyId=[アクセスキーID]
AWSSecretKey=[シークレットキー]

8. 動作を確認します。

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

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

以下のようにVerification completed successfullyというメッセージがでてればOKです。

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

Verification completed successfully. No actual metrics sent to CloudWatch.

9. 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

10. グラウを確認します。

CloudWatchのメトリクスにメモリ使用率とディスク使用率のグラフが表示されるようになります。

無料かつ5分でリソース監視を始める方法はこちら

Windowsのメモリ使用率・ディスク使用率

WindowsはAWS Systems Managerというサービスがあるのでそのサービスを使って設定します。AWS Systems Managerを使って設定する前にIAMロールの作成をします。

1. IAMロールを作成します。

インスタンスがCloudWatchへアクセスすることを許可するIAMロールを作成します。

「AWSサービス」を選択し「EC2」を選択します。

アタッチするアクセス権限は「CloudWatchAgentAdminPolicy」と「AmazonEC2RoleforSSM」になります。検索窓に入力して選択します。

特に設定なく次に進みます。

ここではロール名を「CloudWatch」とします。

作成したIAMロールをEC2のインスタンスに設定します。EC2のサービスから設定するWindowsマシンのインスタンスにIAMロールを紐付けます。

先程作成した「CloudWatch」を入力します。

これでAWS Systems Managerを使うことができるようになります。

2. AWS Systems Managerを設定していきます。

ドキュメントから「AWS-ConfigureAWSPackage」を選択します。

選択したらコマンドを実行します。

以下のような画面から進めてていきます。

インストールするパッケージは 「AmazonCloudWatchAgent」になります。

ターゲットは「インスタンスを手動で選択する」を選択してWindowsのインスタンスIDを選択します。IAMロールをインスタンスに設定していないとここで項目が出てこないので注意です。

スクロールを下に進めて実行します。

以下のような画面になればOKです。

3. AWS Systems ManagerからCloudWatchAgentを設定します。

セッションマネージャーをからセッションの開始をします。

セッションを開始するとブラウザからコマンドを実行することができます。

以下はコマンドで実行していきます。以下のようにCloudWatchAgentの実行ファイルがおいてあるディレクトリに移ってexeファイルを実行します。

cd "C:\Program Files\Amazon\AmazonCloudWatchAgent"
.\amazon-cloudwatch-agent-config-wizard.exe

対話式で選択していきます。OSがWindowsかLinuxか選択します。今回はWindowsなので「2」を選択します。

=============================================================
= Welcome to the AWS CloudWatch Agent Configuration Manager =
=============================================================
On which OS are you planning to use the agent?
1. linux
2. windows
default choice: [2]:
2

EC2かオンプレかを選択します。今回はEC2なので「1」を選択します。

Trying to fetch the default region based on ec2 metadata...
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
1

StatsD daemon(Node.js上で稼働するデータ収集デーモン)の有効化をするかです。今回は不要なので「2」を選択します。

Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
2

CloudWatch Log Agentの設定ファイルをインポートするかです。今回は不要なので「2」を選択します。

Do you have any existing CloudWatch Log Agent configuration file to import for migration?
1. yes
2. no
default choice: [2]:
2

CPUやメモリも監視するかなので、「1」を選択します。

Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:
1

CPUのコアごとに監視するかです。今回は「1」にしました。

Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply.
1. yes
2. no
default choice: [1]:
1

EC2 の イメージID や インスタンスID なども項目に追加したいかです。デフォルトの「1」でよいかと思います。

Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:
1

メトリクスの収集間隔です。デフォルトの60sにしています。

Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in t
he output json file.
1. 1s
2. 10s
3. 30s
4. 60s
default choice: [4]:
4

メトリクスの種類の選択になります。今回はメモリとディスク使用率のみなのでBasicを選択します。他にも取得する場合はStandardかAdvancedを選択します。

Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
1

今までの設定が出力され、問題ないかと聞かれますので 「1」を指定します。

Current config as follows:
{
        "metrics": {
                "append_dimensions": {
                        "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
                        "ImageId": "${aws:ImageId}",
                        "InstanceId": "${aws:InstanceId}",
                        "InstanceType": "${aws:InstanceType}"
                },
                "metrics_collected": {
                        "LogicalDisk": {
                                "measurement": [
                                        "% Free Space"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "Memory": {
                                "measurement": [
                                        "% Committed Bytes In Use"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "statsd": {
                                "metrics_aggregation_interval": 60,
                                "metrics_collection_interval": 10,
                                "service_address": ":8125"
                        }
                }
        }
}
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
1. yes
2. no
default choice: [1]:
1

カスタムログファイルの設定です。今回は設定がないので「2」を選択します。

Do you want to monitor any customized log files?
1. yes
2. no
default choice: [1]:
2

イベントログもモニターしないので「2」を選択します。

Do you want to monitor any Windows event log?
1. yes
2. no
default choice: [1]:
2
Saved config file to config.json successfully.
Current config as follows:
{
        "metrics": {
                "append_dimensions": {
                        "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
                        "ImageId": "${aws:ImageId}",
                        "InstanceId": "${aws:InstanceId}",
                        "InstanceType": "${aws:InstanceType}"
                },
                "metrics_collected": {
                        "LogicalDisk": {
                                "measurement": [
                                        "% Free Space"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "Memory": {
                                "measurement": [
                                        "% Committed Bytes In Use"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "statsd": {
                                "metrics_aggregation_interval": 60,
                                "metrics_collection_interval": 10,
                                "service_address": ":8125"
                        }
                }
        }
}
Please check the above content of the config.
The config file is also located at config.json.
Edit it manually if needed.

設定をSSMパラメータストアに保存するかです。保存するの「1」で選択します。

Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
1

パラメータストアに保存する際の、”パラメータストアの名前”を指定します。デフォルトの「AmazonCloudWatch-windows」にしています。`その他はデフォルトで大丈夫です。

What parameter store name do you want to use to store your config? (Use 'AmazonCloudWatch-' prefix if you use our managed AWS policy)
default choice: [AmazonCloudWatch-windows]

Trying to fetch the default region based on ec2 metadata...
Which region do you want to store the config in the parameter store?
default choice: [ap-northeast-1]

Which AWS credential should be used to send json config to parameter store?
1. xxxxxxxxxxxxxxxxxx(From SDK)
2. Other
default choice: [1]:

Successfully put config to parameter store AmazonCloudWatch-windows.
Please press Enter to exit...

Program exits now.
PS C:\Program Files\Amazon\AmazonCloudWatchAgent>

ここまででCloudWatchAgentの設定は完了です。

4. CloudWatchエージェントを起動します。

AWS Systems Manager から 「Run Command」 を選択し、検索窓に「ManageAgent」 と入力後、表示された項目にチェックをつけます。

先程”パラメータストアの名前”で設定した「AmazonCloudWatch-windows」を入力します。

対象のWindowsのインスタンスを選択して実行します。

問題なければコマンドのステータスが以下のように成功になります。

5. グラフを確認します。

CloudWatchのメトリクスにメモリ使用率とディスク使用率のグラフが表示されるようになります。

無料かつ5分でリソース監視を始める方法はこちら

通知設定

さて、ここからは通知設定をしていきます。まず、Amazon SNSで通知設定をしていきます。

ここでは「CloudWatchTest」という名前で作成しています。

サブスクリプションの作成をします。

プロトコルに「Eメール」をえらび、エンドポイントにメールアドレスを設定します。

メールが届き、リンクをクリックすると有効になります。

その後CloudWatchのアラーム設定をしていきます。

メトリクスの選択を選びます。

今回はディスクの使用率に対してアラートの設定をします。

メトリクスの条件の指定ではデフォルトのまま下にスクロールします。

しきい値の設定をします。今回はディスク使用率が80%よりも大きくなったらアラートを上げるようにしました。

さきほどAmazonSNSで作成した「CloudWatchTest」を選択します。

名前と説明を記載します。

確認で問題なければ設定の完了です。

ディスク使用率が80%を超えるとアラートが通知されるようになりました。

以下のようなメールが通知されます。

ここまで、CloudWatchでメモリ使用率・ディスク監視を設定する手順を紹介しましたが、いかがでしたでしょうか。非常に設定項目が多く、細かい設定ができますが、メモリ・ディスクの使用率を監視できるようになるまでに多くの時間を要しました。

無料かつ5分でリソース監視を始める方法

CloudWatchによる監視にトライして、わずらわしさや難しさを感じた方もいるかもしれません。そんな方はここで紹介する方法も試してみてください。

数あるサーバー監視ツールの中でも、監視を開始するまでの工数が最もかからないもののひとつがSaaS型ツールの「Site24x7(サイトトゥエンティーフォーセブン)」です。無料で始められる上、スモールスタートできるのも好評で、今ユーザーが増えています。

ここからは、そのSite24x7でメモリ使用率・ディスク使用率を監視する手順を紹介します。

アカウントの作成

まず、フリープランのサインアップフォーム(https://www.site24x7.jp/signup.html?pack=1&l=ja)からSite24x7にサインアップします。サインアップフォームは非常にシンプルで、メールアドレスとパスワードを入力するのみです。

サインアップするのに1分もかかりません。フリープランを試すのにクレジットカードの入力が不要なので、サブスクリプションタイプにありがちな課金停止漏れが発生しない安心設計となっています。

Linuxのメモリ使用率・ディスク使用率

Linuxのメモリ使用率・ディスク監視は監視は監視は以下の画面から進みます。

Linuxサーバー監視の項目を選びます。

画面に表示されているコマンドを実行するだけです。

Linuxのサーバーに接続して、先程のコマンドをコピペで実行します。たった2回のコマンドでOKです。

管理コンソールに戻ります。すでにしきい値の設定がされています。

これだけでもうグラフが取得されていることが確認できます。

Windowsのメモリ使用率・ディスク使用率

WindowsもLinuxと同じようにホーム画面から進みます。

今度はWindowsサーバー監視を選びます。

エージェントをダウンロードします。デバイスキーは後ほど使いますのでこの画面のままにしておきます。

リモートデスクトップでWindowsサーバーへ接続し、ダウンロードしたエージェントを実行します。

デバイスキーの入力を求められますので、先程のキーを入力します。

もしProxyを使っている場合は設定します。今回はデフォルトです。

インストールフォルダーの設定です。デフォルトのままとしました。

これで完了です。

設定したインスタンスをみるとすでにしきい値が設定されています。

Windowsもエージェントをインストールするだけでグラフを確認することができました。

通知設定

次に、通知設定をしてみます。通知設定は、デフォルトでは管理者のメールアドレスにされているのでそのまま使えます。追加設定をする場合は、「管理」の「ユーザーとアラートの管理」から設定します。

細かいアラートの設定ができます。

さて、今回しきい値を変更してみます。インスタンスを選択します。

ディスク監視のしきい値を変えてみます。

「/」のディスク監視を変更します。

ここで「/」ディスクの空き容量が20%以下になったら通知する設定にしてみます。

アラート画面でアラートとして表示されていることが確認できました。

このように、簡単にメモリ使用率とディスク使用率の監視ができるようになり、以下のようなメールが通知されました。

CloudWatchの場合は英語のメールでしたが、Site24x7のメールはデフォルト設定で日本語になっていますので、このままで十分運用することが可能です。

まとめ

CloudWatchでメモリ監視・ディスク監視の設定をするために、AWSのいろいろなサービスを組み合わせて設定しました。AWSではいろいろなサービスと組み合わせることでカスタマイズする事が可能ですが、選択肢が多すぎて基本的なサーバー監視運用に必要なグラフだけでも取得するだけでも苦労しました。一方、Site24x7は簡単な設定のみで、わずか5分でサーバー監視運用に必要な設定をすることができました。

Site24x7はスモールスタートも可能です。特に、小さく始めて大きく育てるようなWebサービスにおいては、Amazon CloudWatchと合わせてSaaS型の監視ソリューションであるSite24x7を採用してみてはいかがでしょうか。

プランと価格の詳細はこちら:
https://www.site24x7.jp/pricing.html

フリープランのサインアップはこちら:
https://www.site24x7.jp/signup.html?pack=1&l=ja

関連記事

 

免責事項:ここに記載されているすべての著作権、商標、商号は、元の所有者の所有物です。このWebページに含まれる情報は、一般的な情報提供のみを目的としており、そのような情報は、正確性、信頼性、または完全性について調査、監視、または確認されていません。 当社は、ここに含まれる情報への依存に起因する誤り、または損失に対する責任を明示的に否認します。