PowerCLIを使った仮想化の自動運用
仮想マシンのメモリ変更
作成した仮想マシンのメモリを1024MBから2048MBに変更します。ここでは、仮想マシン名は「win2k3-001」から「win2k3-005」となっていますので正規表現で仮想マシン名は「win2k3-00[1-5]」としてオペレーションを実行します。変更コマンドは以下のとおりです。
Get-VM -name "win2k3-00[1-5]" |foreach {Set-VM -VM $_ -MemoryMB (1024*2)}
仮想マシンの起動・停止
仮想マシンの起動
作成した仮想マシンを起動します。同じように正規表現で「win2k3-001」から「win2k3-005」を指定します。
Get-VM -name "win2k3-00[1-5]" | foreach {Start-VM -VM $_}
もし、仮想マシン名に正規表現が使えない場合などは以下のように指定することも可能です。
Get-VM -name ("win2k3-001", "win2k3-002", "win2k3-003") | foreach {Start-VM -VM $_}
仮想マシンの停止
仮想マシンの電源を切るには以下のオペレーションで実行可能です。「Stop-VM」は仮想マシンの電源を切ります。今回はOSがインストールされていませんので問題ありませんが、VMware ToolsがインストールされたOSが動作している場合は、「Stop-VM」の代わりに「Shutdown-VMGuest」コマンドを利用してください。
Get-VM -name "win2k3-00[1-5]" | foreach {Stop-VM -VM $_}
パフォーマンスデータの取得
各仮想マシンのパフォーマンスデータの取得は以下のとおりです。仮想マシン名「vCenter」の直近のパフォーマンスデータを取得します。
Get-Stat -Realtime -Entity (Get-VM -Name vCenter)
電源がONの仮想マシンのデータを取得したい場合は以下のコマンドで情報を取得することができます。デフォルトの設定では仮想マシン名は出力されませんので、Select-Objectで表示するオブジェクトに「Entity」つまり仮想マシン名を追加しました。
foreach ($vm in Get-VM | Where-Object { $_.PowerState -eq "PoweredOn" }) { Get-Stat -Entity $vm -Realtime | select-object Entity, MetricId, Timestamp, Value }
CSVにファイルを出力したい場合は、以下のように変更します。PowerShellの特徴であるパイプラインをうまく利用して少し書き換えてみました。これでCSVに出力されますので、あとはExcelなどに取り込めばデータをグラフ化することが可能です。
Get-Stat -Entity (Get-VM | Where-Object { $_.PowerState -eq "PoweredOn" }) -Realtime | Select-object Entity, MetricId, Timestamp, Value| Export-csv (Join-Path $env:USERPROFILE “My Documents\vm-stats.csv”)
データのグラフ化
データをグラフ化してみます。普通にグラフ化するのは大変なので今回はピポットテーブルを利用してみました。データは、「Entity」、「MetricId」、「Timestamp」、「Value」の順で並んでいます。時系列のグラフを作成するため、今回はRealtimeを指定して直近1時間のデータを取得しています。ピポットデータで集計した例は以下のとおりです。MetricIdとEntityごとにデータを確認することができます。
図6:取得した情報をピポットテーブルで表示 |
ピポットテーブルをグラフ化したのが以下の図です。分刻みのCPU使用率を確認することができます。
図7:CPUの使用率をグラフ化した例(クリックで拡大) |
今回は、Excelの説明がメインではありませんが、PowerShellを利用すればExcelを直接オペレーションすることもできますので、グラフなどのレポートの自動作成も可能です。「Excel PowerShell」で検索してみるといろいろな事例が見つかると思いますので、皆さんも試してみてはいかがでしょうか。
まとめ
プライベートクラウド環境の構築から運用まで解説してきましたが、第4回ではVMware vSphere PowerCLIによる自動化について事例を交えてご紹介しました。第3回でご紹介した、ROC(Remote Operation Center)では、PowerCLIだけではなく、Rubyなども利用して、仮想化環境はもちろん、ネットワークやストレージなども含めた、統合的な環境の自動化運用を行える仕組みを提供していますので、皆さんのシステム運用の一助になれば幸いです。