Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

Amazon EC2 Linux インスタンスのメモリとディスクのメトリクスのモニタリング

Amazon CloudWatch を使用して、EC2 インスタンスのオペレーティングシステムからメトリクスおよびログを収集できます。

CloudWatch エージェント

CloudWatch エージェントを使用して、Amazon EC2 インスタンスとオンプレミスサーバーからシステムメトリクスとログファイルの両方を収集できます。エージェントでは Windows Server と Linux の両方がサポートされ、CPU あたりのコアのようなサブリソースメトリクスなど、収集するメトリクスを選択できます。メトリクスおよびログは、モニタリングスクリプトを使用せずに、エージェントを使用して収集することをお勧めします。詳細については、『Amazon CloudWatch ユーザーガイド』の「CloudWatch エージェントを使用して Amazon EC2 インスタンスとオンプレミスサーバーからメトリクスを収集する」を参照してください。

CloudWatch モニタリングスクリプト

重要

CloudWatch エージェントを使用してメトリクスおよびログを収集することをお勧めします。古いモニタリングスクリプトを使用して Linux インスタンスから情報を収集しているお客様には、モニタリングスクリプトに関する情報が提供されます。

モニタリングスクリプトは、Amazon CloudWatch のカスタムメトリクスを作成して利用する方法を示しています。これらの Perl スクリプトのサンプルは、Linux インスタンスのメモリ、スワップ、およびディスクスペースの使用状況メトリクスをレポートする、完全に機能する例で構成されます。

Amazon CloudWatch 標準のカスタムメトリクスの利用料金が、これらのスクリプトの使用に適用されます。詳細については、「Amazon CloudWatch 料金表ページ」を参照してください。

サポートされているシステム

モニタリングスクリプトは、次のシステムを使用してインスタンスでテストされました。

  • Amazon Linux 2

  • Amazon Linux AMI 2014.09.2 以降

  • Red Hat Enterprise Linux 6.9 および 7.4

  • SUSE Linux Enterprise Server 12

  • Ubuntu Server 14.04 および 16.04

必要なアクセス許可

IAM ロールをインスタンスに関連付けて、次のアクションを呼び出すアクセス許可がスクリプトにあることを確認します。

  • cloudwatch:PutMetricData

  • cloudwatch:GetMetricStatistics

  • cloudwatch:ListMetrics

  • ec2:DescribeTags

詳細については、「IAM ロールの使用」を参照してください。

必要なパッケージのインストール

Linux の一部のバージョンでは、モニタリングスクリプトを使用する前に、Perl モジュールをインストールする必要があります。

Amazon Linux 2 および Amazon Linux AMI に必要なパッケージをインストールするには

  1. インスタンスにログオンします。詳細については、「Linux インスタンスへの接続」を参照してください。

  2. コマンドプロンプトで以下のようにパッケージをインストールします。

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

Ubuntu に必要なパッケージをインストールするには

  1. インスタンスにログオンします。詳細については、「Linux インスタンスへの接続」を参照してください。

  2. コマンドプロンプトで以下のようにパッケージをインストールします。

    sudo apt-get update sudo apt-get install unzip sudo apt-get install libwww-perl libdatetime-perl

Red Hat Enterprise Linux 7 に必要なパッケージをインストールするには

  1. インスタンスにログオンします。詳細については、「Linux インスタンスへの接続」を参照してください。

  2. コマンドプロンプトで以下のようにパッケージをインストールします。

    sudo yum install perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA --enablerepo="rhui-REGION-rhel-server-optional" -y sudo yum install zip unzip

Red Hat Enterprise Linux 6.9 に必要なパッケージをインストールするには

  1. インスタンスにログオンします。詳細については、「Linux インスタンスへの接続」を参照してください。

  2. コマンドプロンプトで以下のようにパッケージをインストールします。

    sudo yum install perl-DateTime perl-CPAN perl-Net-SSLeay perl-IO-Socket-SSL perl-Digest-SHA gcc -y sudo yum install zip unzip
  3. 昇格されたユーザーとして CPAN を実行します。

    sudo cpan

    次のプロンプトが表示されるまで、各プロンプトで Enter キーを押します。

    cpan[1]>
  4. CPAN プロンプトで、次の各コマンドを実行します。1 つのコマンドを実行してインストールを実行し、CPAN プロンプトに戻ったら次のコマンドを実行します。次の処理に進むことを求めるプロンプトが表示されたら、Enter キーを押します。

    cpan[1]> install YAML cpan[2]> install LWP::Protocol::https cpan[3]> install Sys::Syslog cpan[4]> install Switch

SUSE に必要なパッケージをインストールするには

  1. インスタンスにログオンします。詳細については、「Linux インスタンスへの接続」を参照してください。

  2. SUSE Linux Enterprise Server 12 が実行されているサーバーでは、perl-Switch パッケージのダウンロードが必要な場合があります。次のコマンドを使用して、このパッケージをダウンロードおよびインストールできます。

    wget http://download.opensuse.org/repositories/devel:/languages:/perl/SLE_12_SP3/noarch/perl-Switch-2.17-32.1.noarch.rpm sudo rpm -i perl-Switch-2.17-32.1.noarch.rpm
  3. 次のように、必要なパッケージをインストールします。

    sudo zypper install perl-Switch perl-DateTime sudo zypper install –y "perl(LWP::Protocol::https)"

モニタリングスクリプトをインストールする

以下の手順では、EC2 Linux インスタンスで CloudWatch Monitoring Scripts のダウンロード、解凍、構成を行う方法について示します。

モニタリングスクリプトのダウンロード、インストール、設定を行うには

  1. コマンドプロンプトで、モニタリングスクリプトを保存するフォルダに移動し、次のコマンドを実行してモニタリングスクリプトをダウンロードします。

    curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O
  2. ダウンロードしたモニタリングスクリプトをインストールするには、以下のコマンドを実行します。

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

モニタリングスクリプトのパッケージに、以下のファイルが含まれます。

  • CloudWatchClient.pm – 共通 Perl モジュール。これを使って、他のスクリプトから簡単に Amazon CloudWatch を呼び出すことができます。

  • mon-put-instance-data.pl – Amazon EC2 インスタンス (メモリ、スワップ、ディスクスペースの使用状況) のシステムメトリクスを収集し、Amazon CloudWatch に送信します。

  • mon-get-instance-stats.pl – Amazon CloudWatch に問い合わせて、このスクリプトが実行される EC2 インスタンスの最新の使用状況統計を表示します。

  • awscreds.template – アクセスキー ID とシークレットアクセスキーを保存する AWS 認証情報のファイルテンプレートです。

  • LICENSE.txt – Apache 2.0 のライセンスを含むテキストファイルです。

  • NOTICE.txt – 著作権情報です。

mon-put-instance-data.pl

このスクリプトは、現行システムにあるメモリ、スワップ、ディスクスペースの使用状況のデータを収集します。その後、Amazon CloudWatch へのリモート呼び出しを行って、収集したデータをカスタムメトリクスとしてレポートします。

オプション

名前 説明

--mem-util

MemoryUtilization メトリクスをパーセント (%) 単位で収集し、送信します。このメトリクスには、使用されているアプリケーションとオペレーティングシステムによって割り当てられたメモリがカウントされるほか、--mem-used-incl-cache-buff オプションを指定した場合は、使用されているキャッシュとバッファメモリもカウントされます。

--mem-used

メガバイト (MB) 単位でレポートされる MemoryUsed メトリクスを収集し、送信します。このメトリクスには、使用されているアプリケーションとオペレーティングシステムによって割り当てられたメモリがカウントされるほか、--mem-used-incl-cache-buff オプションを指定した場合は、使用されているキャッシュとバッファメモリもカウントされます。

--mem-used-incl-cache-buff

このオプションを含めると、キャッシュおよびバッファに現在使用されているメモリは、--mem-util--mem-used--mem-avail のメトリクスがレポートされるときに、"used" としてカウントされます。

--mem-avail

メガバイト (MB) 単位でレポートされる MemoryAvailable メトリクスを収集し、送信します。このメトリクスには、使用されているアプリケーションとオペレーティングシステムによって割り当てられたメモリがカウントされるほか、--mem-used-incl-cache-buff オプションを指定した場合は、使用されているキャッシュとバッファメモリもカウントされます。

--swap-util

パーセント (%) 単位でレポートされる SwapUtilization メトリクスを収集し、送信します。

--swap-used

メガバイト (MB) 単位でレポートされる SwapUsed メトリクスを収集し、送信します。

--disk-path=PATH

レポートするディスクを選択します。

PATH では、マウントポイント、またはレポートが必要なファイルシステムのマウントポイントにあるファイルを指定できます。複数のディスクを選択するには、それぞれに対して --disk-path=PATH を指定します。

/ および /home にマウントされたファイルシステムのディスクを選択するには、パラメータを使用します。

--disk-path=/ --disk-path=/home

--disk-space-util

選択したディスクについて、DiskSpaceUtilization メトリクスを収集し送信します。メトリクスはパーセンテージでレポートされます。

このスクリプトによって計算されたディスクの使用状況メトリクスは、df -k -l コマンドによって計算された値とは異なることに注意してください。df -k -l の値のほうが有用であると判断した場合は、スクリプトのほうの計算値を変更できます。

--disk-space-used

選択したディスクについて、DiskSpaceUsed メトリクスを収集し送信します。メトリクスは、デフォルトにより、ギガバイトでレポートされます。

Linux オペレーティングシステムには予約ディスクスペースがあるため、使用済みディスクスペースと使用可能なディスクスペースを合計しても正確なディスクスペースの合計にならないことがあります。

--disk-space-avail

選択したディスクについて、DiskSpaceAvailable メトリクスを収集し送信します。メトリクスはギガバイトでレポートされます。

Linux オペレーティングシステムには予約ディスクスペースがあるため、使用済みディスクスペースと使用可能なディスクスペースを合計しても正確なディスクスペースの合計にならないことがあります。

--memory-units=UNITS

メモリ使用量をレポートする単位を指定します。指定がない場合、メモリはメガバイト (MB) でレポートされます。UNITS は、バイト (B)、キロバイト (KB)、メガバイト (MB)、ギガバイト (GB) のいずれかになります。

--disk-space-units=UNITS

ディスクスペース使用量をレポートする単位を指定します。指定がない場合、ディスクスペースはギガバイト (GB) でレポートされます。UNITS は、バイト (B)、キロバイト (KB)、メガバイト (MB)、ギガバイト (GB) のいずれかになります。

--aws-credential- file=PATH

AWS 認証情報を持っているファイルの場所を提供します。

このパラメータは、--aws-access-key-id および --aws-secret-key パラメータと一緒には使用できません。

--aws-access-key-id=VALUE

発信者を識別するために使用する AWS アクセスキー ID を指定します。--aws-secret-key オプションと一緒に使用する必要があります。このオプションを --aws-credential-file パラメータと一緒に使用しないでください。

--aws-secret-key=VALUE

CloudWatch へのリクエストの署名に使用する AWS シークレットアクセスキーを指定します。--aws-access-key-id オプションと一緒に使用する必要があります。このオプションを --aws-credential-file パラメータと一緒に使用しないでください。

--aws-iam-role=VALUE

AWS 認証情報を提供するために使用する IAM ロールを指定します。値 =VALUE が必要です。認証情報が指定されていない場合、EC2 インスタンスに関連付けられたデフォルトの IAM ロールが適用されます。使用できる IAM ロールは 1 つのみです。IAM ロールが検出されない場合、または 2 つ以上の IAM ロールが検出された場合、スクリプトはエラーを返します。

このオプションを --aws-credential-file--aws-access-key-id、または --aws-secret-key パラメータと併せて使用しないでください。

--aggregated[=only]

インスタンスタイプ、AMI ID、リージョン全体の集約されたメトリクスを追加します。値 =only はオプションです。指定した場合、スクリプトは集約されたメトリクスのみをレポートします。

--auto-scaling[=only]

Auto Scaling グループの集約されたメトリクスを追加します。値 =only はオプションです。指定すると、スクリプトは Auto Scaling メトリクスのみをレポートします。スクリプトを使って IAM アカウントまたはロールに関連付けられている IAM ポリシーには、EC2 アクション DescribeTags を呼び出すアクセス許可が必要になります。

--verify

メトリクスを収集するスクリプトのテストランを実行したり、完全な HTTP リクエストを用意したりしますが、実際に CloudWatch を呼び出してデータをレポートすることはありません。このオプションで、認証情報が提供されていることも確認できます。冗長モードで実行すると、このオプションは CloudWatch に送信するメトリクスを出力します。

--from-cron

cron からスクリプトを呼び出す際はこのオプションを使用します。このオプションを使用すると、すべての診断出力が抑えられますが、エラーメッセージがユーザーアカウントのローカルシステムログに送信されます。

--verbose

スクリプトの実行内容の詳細を表示します。

--help

使用状況の情報を表示します。

--version

スクリプトのバージョン番号を表示します。

次の例では、IAM ロールまたは awscreds.conf ファイルを指定していることを前提としています。それ以外の場合は、これらのコマンドで --aws-access-key-id および --aws-secret-key パラメータを使用して認証情報を指定する必要があります。

次の例では、CloudWatch にデータを送信せずに簡単なテストを実行します。

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

以下の例では、使用可能なメモリメトリクスをすべて収集し、CloudWatch に送信して、使用されているキャッシュとバッファメモリをカウントします。

./mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --mem-used --mem-avail

以下の例では、Auto Scaling グループの集約メトリクスを収集し、個々のインスタンスメトリクスをレポートすることなく Amazon CloudWatch に送信します。

./mon-put-instance-data.pl --mem-util --mem-used --mem-avail --auto-scaling=only

以下の例では、インスタンスタイプ、AMI ID、リージョンの集約されたメトリクスを収集し、個々のインスタンスメトリクスをレポートすることなく Amazon CloudWatch に送信します。

./mon-put-instance-data.pl --mem-util --mem-used --mem-avail --aggregated=only

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

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

スクリプトにエラーが発生した場合、スクリプトのシステムログにエラーメッセージが書き込まれます。

mon-get-instance-stats.pl

このスクリプトは、直近の時間数を用いて、指定された時間間隔内で、メモリ、スワップ、ディスクスペースメトリクスの統計について CloudWatch に問い合わせます。このデータは、このスクリプトが実行される Amazon EC2 インスタンスに関するものです。

オプション

名前 説明

--recent-hours=N

レポートする直近の時間数を N で表記して指定します。ここで N は整数です。

--aws-credential-file=PATH

AWS 認証情報を持っているファイルの場所を提供します。

--aws-access-key-id=VALUE

発信者を識別するために使用する AWS アクセスキー ID を指定します。--aws-secret-key オプションと一緒に使用する必要があります。このオプションを --aws-credential-file オプションと併せて使用しないでください。

--aws-secret-key=VALUE

CloudWatch へのリクエストの署名に使用する AWS シークレットアクセスキーを指定します。--aws-access-key-id オプションと一緒に使用する必要があります。このオプションを --aws-credential-file オプションと併せて使用しないでください。

--aws-iam-role=VALUE

AWS 認証情報を提供するために使用する IAM ロールを指定します。値 =VALUE が必要です。認証情報が指定されていない場合、EC2 インスタンスに関連付けられたデフォルトの IAM ロールが適用されます。使用できる IAM ロールは 1 つのみです。IAM ロールが検出されない場合、または 2 つ以上の IAM ロールが検出された場合、スクリプトはエラーを返します。

このオプションを --aws-credential-file--aws-access-key-id、または --aws-secret-key パラメータと併せて使用しないでください。

--verify

スクリプトのテストを実行します。このオプションで、認証情報が提供されていることも確認できます。

--verbose

スクリプトの実行内容の詳細を表示します。

--help

使用状況の情報を表示します。

--version

スクリプトのバージョン番号を表示します。

過去 12 時間の利用統計情報を取得するには、次のコマンドを実行します。

./mon-get-instance-stats.pl --recent-hours=12

以下に、応答の例を示します。

Instance metric statistics for the last 12 hours. CPU Utilization Average: 1.06%, Minimum: 0.00%, Maximum: 15.22% Memory Utilization Average: 6.84%, Minimum: 6.82%, Maximum: 6.89% Swap Utilization Average: N/A, Minimum: N/A, Maximum: N/A Disk Space Utilization on /dev/xvda1 mounted as / Average: 9.69%, Minimum: 9.69%, Maximum: 9.69%

コンソールでのカスタムメトリクスの表示

正常に mon-put-instance-data.pl スクリプトを実行すると、Amazon CloudWatch コンソールでカスタムメトリックスを確認できます。

カスタムメトリクスを表示するには

  1. 前述のとおりに mon-put-instance-data.pl を実行します。

  2. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。

  3. [View Metrics] を選択します。

  4. [Viewing] では、スクリプトによって投入されたカスタムメトリクスが System/Linux というプレフィックス付きで表示されます。

トラブルシューティング

CloudWatchClient.pm モジュールは、インスタンスのメタデータをローカルでキャッシュします。モニタリングスクリプトを実行しているインスタンスから AMI を作成すると、キャッシュ TTL (デフォルト: 6 時間、Auto Scaling グループでは 24 時間) 以内にこの AMI から起動したすべてのインスタンスは、元のインスタンスのインスタンス ID を使用してメトリクスを出力します。キャッシュ TTL 期間が経過した後は、スクリプトは新しいデータを取得し、モニタリングスクリプトは現在のインスタンスのインスタンス ID を使用します。これをすぐに修正するには、次のコマンドを使用してキャッシュされたデータを削除します。

rm /var/tmp/aws-mon/instance-id