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

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

使用できる新しい CloudWatch エージェント

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

このセクションの残りの部分は、モニタリングに古い Perl スクリプトを使用しているお客様向けの情報です。それらの Amazon CloudWatch Monitoring Scripts for Linux は、AWS のサンプルコードライブラリからダウンロードできます。

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

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

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

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

これらのモニタリングスクリプトは、Linux を実行している Amazon EC2 インスタンスで使用することを目的として記述されています。これらのスクリプトは、以下の Amazon Machine Image (AMI) の 32 ビットおよび 64 ビットバージョンを使用してインスタンス上でテスト済みです。

  • Amazon Linux 2

  • Amazon Linux AMI 2014.09.2 以降

  • Red Hat Enterprise Linux 7.4 および 6.9

  • SUSE Linux Enterprise Server 12

  • Ubuntu Server 16.04 および 14.04

注記

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

また、このデータを CloudWatch Logs に送信して、Windows を実行する Amazon EC2 インスタンスのメモリとディスクメトリクスをモニタリングすることができます。詳細については、Windows インスタンスの Amazon EC2 ユーザーガイドの「Amazon CloudWatch へのログ、イベント、パフォーマンスカウンターの送信」を参照してください。

パッケージの内容

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

  • 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 – 著作権情報です。

前提条件

Linux のバージョンによって、モニタリングスクリプトが動作するには事前に追加モジュールをインストールする必要があります。

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

Red Hat Enterprise Linux

追加の Perl モジュールをインストールする必要があります。

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[1]> install LWP::Protocol::https cpan[1]> install Sys::Syslog cpan[1]> install Switch

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

  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

SUSE Linux Enterprise Server

追加の Perl モジュールをインストールする必要があります。

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

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

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

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

Ubuntu Server

サーバーは以下のように設定する必要があります。

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

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

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

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

ご利用開始にあたって

以下の手順では、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
  3. スクリプトに、以下のいずれかのオプションを使用して CloudWatch オペレーションを実行するアクセス権限があることを確認してください。

    • インスタンスに IAM ロール (インスタンスプロファイル) を関連付けている場合は、次の操作を実行するアクセス権限を持っていることを検証してください。

      • cloudwatch:PutMetricData

      • cloudwatch:GetMetricStatistics

      • cloudwatch:ListMetrics

      • ec2:DescribeTags

    • 認証情報ファイルで AWS 認証情報を指定します。まず、次のようにモニタリングスクリプトに含まれている awscreds.template ファイルを awscreds.conf にコピーします。

      cp awscreds.template awscreds.conf

      awscreds.conf ファイルに次のコンテンツを追加します。

      AWSAccessKeyId=my-access-key-id AWSSecretKey=my-secret-access-key

      AWS 認証情報を表示する方法については、アマゾン ウェブ サービス全般のリファレンス の「認証情報の理解および取得」を参照してください。

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

CloudWatch にレポートするメトリクスの cron スケジュールを設定するには

  1. 次のコマンドを使用して crontab の編集を開始します。

    crontab -e
  2. 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

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

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

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

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

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