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

前回はLinuxインスタンスのメモリとディスク領域を監視しました。
今回のターゲットはWindowsインスタンス。
Amazon CloudWatch Monitoring Scripts for Microsoft Windows Serverを使ってEC2インスタンスのメモリとディスク領域を監視してみます。

CloudWatch Windows


監視項目を整理する

CloudWatch標準メトリクス

前回と同様、まずはCloudWatchで標準で提供されている標準メトリクスで監視できる項目を整理してみます。
標準メトリクスで監視できる項目は下記の通りです。Linuxの場合と同じですね。

  • 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 Microsoft Windows Server

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

  • MemoryUtilization(%): メモリ使用率
  • MemoryUsed(MB): メモリ使用量
  • MemoryAvailable(MB): 使用可能メモリ量
  • pagefileUtilization(%): ページファイル使用率
  • pagefileUsed(MB): ページファイル使用量
  • pagefileAvailable(MB): 使用可能ページファイル量
  • VolumeUtilization(%): ボリューム使用率
  • VolumeUsed(GB): ボリューム使用量
  • VolumeAvailable(GB): ボリューム領域量

参考:Amazon CloudWatch Monitoring Scripts for Windows

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


Amazon CloudWatch Monitoring Scripts for Microsoft Windows Serverを理解する

では、Amazon CloudWatch Monitoring Scripts for Microsoft Windows Serverの中身を見てみましょう。
AmazonCloudWatchMonitoringWindows.zipパッケージの中身は下記のようになっています。

> dir

    Directory: C:\AmazonCloudWatchMonitoringWindows


Mode                LastWriteTime     Length Name                                                                           
----                -------------     ------ ----                                                                           
-a---          4/6/2014   5:11 AM         91 awscreds.conf                                                                  
-a---         6/18/2012  10:48 AM       9123 LICENSE.txt                                                                    
-a---         1/27/2014  11:44 AM       9029 mon-get-instance-stats.ps1                                                     
-a---         1/27/2014  11:24 AM      13736 mon-put-metrics-disk.ps1                                                       
-a---         1/27/2014  11:21 AM      14175 mon-put-metrics-mem.ps1                                                        
-a---         1/27/2014  10:51 AM      10616 mon-put-metrics-perfmon.ps1                                                    
-a---         6/18/2012  10:49 AM        126 NOTICE.txt                                                                     
-a---         6/18/2012  10:47 AM        683 README.txt                                                                     

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

  • mon-get-instance-stats.ps1: CloudWatchに問い合わせて最近の統計情報を表示するスクリプト
  • mon-put-metrics-disk.ps1: システムのディスクに関する情報を取得してCloudWatchに送信するスクリプト
  • mon-put-metrics-mem.ps1: システムのメモリに関する情報を取得してCloudWatchに送信するスクリプト
  • mon-put-metrics-perfmon.ps1: システムのパフォーマンスカウンタから情報を取得してCloudWatchに送信するスクリプト

今回、メインで使うのがmon-put-metrics-mem.ps1とmon-put-metrics-disk.ps1になります。
mon-put-metrics-mem.ps1では、メモリの情報を取得するために、PowerShellからWMI(Win32_OperatingSystem, Win32_ComputerSystem, Win32_PageFileSetting, Win32_PageFileUsage)を取得して参照しています。
また、mon-put-metrics-disk.ps1では、ディスク領域の情報を取得するためにPowerShellからWMI(Win32_LogicalDisk)を取得して参照しています。

Amazon CloudWatch Monitoring Scripts for Microsoft Windows Serverを使ってみる

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

セットアップ

Microsoft Windows Server 2012 Base (64bit)でAmazon CloudWatch Monitoring Scripts for Microsoft Windows Serverを使うための準備をします。
まずはAWS SDK for .NETをインストール。

AWS SDK for .NET

次に、Amazon CloudWatch Monitoring Scripts for Microsoft Windows Serverをダウンロードします。

Amazon CloudWatch Monitoring Scripts for Microsoft Windows Server

awscreds.conf ファイルを編集し、AWSAccessKeyIdとAWSSecretKeyを入力します。
デフォルトだと下記のように普通と逆順になってるので、ケアレスミスにご注意を。

AWSSecretKey=
AWSAccessKeyId=

ちなみに、シークレットキーに”/”が含まれていると、スクリプトの仕様上うまく動作しないので、そういった場合はシークレットキーを再発行して”/”の含まれないものをGETしましょう。

Windows Server 2012はデフォルトではPowerShellスクリプトの実行を許容しません。
このため、実行ポリシを変更します。今回は検証用なのでUnrestrictedにしてしまいましょう。

> Get-ExecutionPolicy
Restricted

> Set-ExecutionPolicy Unrestricted

> Get-ExecutionPolicy
Unrestricted

これで準備は完了です。

動作確認

早速、スクリプトの動作確認をしましょう。とりあえずメモリ使用率を取得してみます。

> .\mon-put-metrics-mem.ps1  -aws_credential_file C:\awscreds.conf -mem_util -mem_used -mem_avail -page_util -page_used -page_avail -memory_units Megabytes

取得した値が表示されるわけではないので、メモリ使用率を取得できたのかどうかはわかりませんが、スクリプトとしては正常終了しました。

では、スクリプトをタスクスケジューラで5分毎に実行するようにしてみます。

タスクスケジューラを開きます。
task_scheduler

ActionメニューからCreate Taskをクリックします。
Nameにタスクの名前を入力し、Security optionsのラジオボタンでRun whether user is logged on or notを選択します。
create_task

Triggersタブを開きます。
create_task_triggers

Newをクリックします。
Advanced settingsでRepeat task every:にチェックを入れ、プルダウンから5 minutesを選択します。
for a duration of:のプルダウンからIndefinitelyを選択します。
new_trigger
New TriggerダイアログでOKをクリックします。

Actionsタブを開きます。
create_task_actions

Newをクリックします。
SettingsのProgram/script:に下記の通り入力します。

PowerShell.exe

Add arguments (optional):に下記の通り入力します。

-command "C:\scripts\mon-put-metrics-mem.ps1 -aws_credential_file C:\awscreds.conf -mem_util -mem_used -mem_avail -page_util -page_used -page_avail -memory_units Megabytes -from_scheduler -logfile C:\cloudwatch-mem.log"

New ActionダイアログでOKをクリックします。

Create TaskダイアログでOKをクリックします。

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

同じように、ディスク監視用のスケジュールも登録します。
Nameをcloudwatch-diskとし、ActionのAdd arguments (optional):に下記の通り入力します。

-command "C:\scripts\mon-put-metrics-disk.ps1 -aws_credential_file C:\awscreds.conf -disk_space_util -disk_space_used -disk_space_avail -disk_drive C: -disk_space_units gigabytes -from_scheduler -logfile C:\cloudwatch-disk.log"

(他の項目はすべて同じです。)

このように、2つのスケジュールを登録できました。

schedule_list

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

CloudWatch Windows System

おわりに

今回は、Amazon CloudWatch Monitoring Scripts for Microsoft Windows ServerでEC2のメモリとディスク領域を監視する方法について見てきました。
基本のスクリプトで監視できる範囲はfor Linuxとほぼ同等ですが、パフォーマンスカウンタから任意の値をとるスクリプトまで用意されているので、かなり汎用的に使えそうです。
依存するライブラリもAWS SDK for .NETとPowerShellだけになっており、PowerShellはWindows Server 2008 R2から標準で入っていることを考えると、導入障壁はかなり低いと思います。

広告
  1. トラックバックはまだありません。

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中

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