Amazon CloudWatch Monitoring Scripts for LinuxでLinuxインスタンスのメモリとディスク領域を監視する

EC2インスタンスを監視するには、CloudWatchが便利です。
このCloudWatchでは、標準で監視できる項目は限られますが、それを補うスクリプトとしてAmazon CloudWatch Monitoring Scriptsが提供されています。

Amazon CloudWatch Monitoring Scriptsには下記の2種類があります。

今回は、前者のAmazon CloudWatch Monitoring Scripts for Linuxを使って、EC2インスタンスのメモリとディスク領域を監視してみます。

CloudWatch


監視項目を整理する

CloudWatch標準メトリクス

まず最初に、CloudWatchで標準で提供されている標準メトリクスで監視できる項目を整理してみます。
標準メトリクスで監視できる項目は下記の通りです。

  • CPUUtilization(%): CPU使用率
  • DiskReadBytes(B): ディスクI/O量(読み取り)
  • DiskReadOps(回): ディスクI/O回数(読み取り)
  • DiskWriteBytes(B): ディスクI/O量(書き込み)
  • DiskWriteOps(回): ディスクI/O回数(書き込み)
  • NetworkIn(B): ネットワーク情報量(受信)
  • NetworkOut(B): ネットワーク情報量(送信)
  • StatusCheckFailed(回): 状態
  • StatusCheckFailed_Instance(回): インスタンス状態
  • StatusCheckFailed_System(回): システム状態

参考:Amazon Elastic Compute Cloud Dimensions and Metrics

項目リストを見てみると、メモリやディスク領域に関する項目は含まれていないことがわかります。

Amazon CloudWatch Monitoring Scripts for Linux

Amazon CloudWatch Monitoring Scripts for Linuxで監視できる項目は下記の通りです。

  • MemoryUtilization(%): メモリ使用率
  • MemoryUsed(MB): メモリ使用量
  • MemoryAvailable(MB): 使用可能メモリ量
  • SwapUtilization(%): スワップ使用率
  • SwapUsed(MB): スワップ使用量
  • DiskSpaceUtilization(%): ディスク領域使用率
  • DiskSpaceUsed(GB): ディスク領域使用量
  • DiskSpaceAvailable(GB): 使用可能ディスク領域量

参考:Amazon CloudWatch Monitoring Scripts for Linux

標準メトリクスの範囲外となっているメモリやディスク領域に関する項目が取得可能となっています。


Amazon CloudWatch Monitoring Scripts for Linuxを理解する

では、Amazon CloudWatch Monitoring Scripts for Linuxの中身を見てみましょう。
CloudWatchMonitoringScripts-v1.1.0.zipパッケージの中身は下記のようになっています。

# tree
.
├── awscreds.template
├── CloudWatchClient.pm
├── LICENSE.txt
├── mon-get-instance-stats.pl
├── mon-put-instance-data.pl
└── NOTICE.txt

実体は下記の3ファイルです。

  • CloudWatchClient.pm: CloudWatchにアクセスするための共用Perlモジュール
  • mon-get-instance-stats.pl: CloudWatchに問い合わせて最近の統計情報を表示するスクリプト
  • mon-put-instance-data.pl: システムの情報を取得してCloudWatchに送信するスクリプト

今回、メインで使うのがmon-put-instance-data.plになります。
mon-put-instance-data.plでは、メモリの情報を取得するためにOSの/proc/meminfoを参照しています。
また、ディスク領域の情報を取得するためにOSのdfコマンドを実行しています。


Amazon CloudWatch Monitoring Scripts for Linuxを使ってみる

そろそろ実際に手を動かしたくなってきましたね。
では、Amazon CloudWatch Monitoring Scripts for LinuxでEC2インスタンスのメモリとディスク領域を監視してみましょう。

セットアップ

Amazon Linux 2014.3 (64bit)でAmazon CloudWatch Monitoring Scripts for Linuxを使うための準備をします。
まずは必要なモジュールをインストール。

# yum install gcc make perl-CPAN perl-Time-HiRes perl-XML-Parser mod_perl cpanminus
# cd /
# perl -MCPAN -e shell
cpan[1]> install Bundle::CPANxxl
cpan[1]> install Bundle::LWP5_837 LWP
cpan[1]> install Switch
cpan[1]> install Sys::Syslog
cpan[1]> quit

ちなみに、公式ページで説明されている手順だけではセットアップに失敗しました・・・。
この辺りは、公式ページの説明対象のAmazon Linuxのバージョンが2011.09で、今回の検証環境のAmazon Linuxのバージョンが2014.3であることを考えると、バージョン差分の影響かもしれません。

次に、スクリプトをダウンロードしてセットアップします。

# cd
# wget http://ec2-downloads.s3.amazonaws.com/cloudwatch-samples/CloudWatchMonitoringScripts-v1.1.0.zip
# unzip CloudWatchMonitoringScripts-v1.1.0.zip
# rm CloudWatchMonitoringScripts-v1.1.0.zip
# cd aws-scripts-mon

認証ファイルにアクセスキー、シークレットキーを書き込みます。

# cp awscreds.template awscreds
# vi awscreds

これで準備は完了です。

動作確認

早速、スクリプトの動作確認をしましょう。とりあえずメモリ使用率を取得してみます。
今回は動作確認なので、–verifyオプションを付与して、CloudWatchに送信しないようにしておきます。

# ./mon-put-instance-data.pl --mem-util --verify --verbose --aws-credential-file=./awscreds
MemoryUtilization: 10.7565074135091 (Percent)
(略)

メモリ使用率を取得できました。

では、スクリプトをcronで5分毎に実行するようにしてみます。

# crontab -e

せっかくなので、メモリ使用率以外にも、とれる項目は全部とるようにしてしまいましょう。

*/5 * * * * /root/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --mem-avail --swap-util --swap-used --disk-space-used --disk-space-avail --disk-space-util --disk-path=/ --from-cron --aws-credential-file=/root/aws-scripts-mon/awscreds

これで5分毎にmon-put-instance-data.plが自動実行され、それぞれの値がCloudWatchに送信されるようになりました。

では、監視結果をマネジメントコンソールから確認します。
CloudWatchのマネジメントコンソールを開き、左側メニューのLinux Systemを選択すると、Amazon CloudWatch Monitoring Scripts for Linuxで取得した項目が一覧表示されます。

CloudWatch Linux System

各項目にチェックを入れると取得値のグラフが表示されます。

CloudWatch Memory

複数チェックを入れるとグラフがまとめて表示されます。

CloudWatch All


おわりに

今回は、Amazon CloudWatch Monitoring Scripts for LinuxでEC2のメモリとディスク領域を監視する方法について見てきました。
CloudWatch標準メトリクスでカバーしきれない範囲を監視できるのは便利ですね。
セットアップには若干の手間を要しますが、セットアップ済みのAMIを一度用意してしまえば、次のインスタンスからは手間が省けるので問題ないでしょう。

ちなみに、CPU使用率の詳細(user,nice,system,iowait,steal,idle)やロードアベレージなど、CloudWatch標準メトリクスとAmazon CloudWatch Monitoring Scripts for Linuxを組み合わせて使っても監視できない項目もあります。

当然、HTTPステータスや使用中のコネクションの数、特定のプロセスの起動数、ポートの応答時間、SQLのクエリ結果など、より上位の層の情報を監視したい場合は別途準備が必要になります。
このあたりはスクリプトを作りこんでもいいですし、監視ツールに任せてもいいかなと思います。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。