vROpsで取得しているvSphere環境に関する情報は、通常、vROpsのレポートやダッシュボードなどで確認する。
csvでほしい場合は、レポートで出力させたりする。
しかし、vROpsのGUIでは、全ての仮想マシンについて、指定期間内のCPU/メモリの使用容量を取得する、といった操作を行うことができない。
できるのは、「1台の仮想マシンについて指定期間内のCPU/メモリの使用容量を取得する」という操作を全ての仮想マシンに対して個別に実行する、ということである。
そんなのは使いにくい。
PowerCLIを使うと、vROpsで取得済みのデータをGet-OMStatを使用することで取得することができる。
(なお、予測のデータについては、PowerCLI経由では取得できない)
しかし、Get-OMStatで取得できるデータは、1つのメトリックについてのみであるため、CPUとメモリの使用量について取得しようとした場合、それぞれGet-OMStatを実行する必要がある。
CPUの使用量/使用率とメモリの使用量について取得すると以下のようになる。
1 | $cpuusage=Get-OMStat -Resource $vmguest.Name -Key 'cpu|usage_average' -From $startdate -To $enddate -RollupType avg -IntervalType Hours -IntervalCount $interval |
2 | $cpuusagemhz=Get-OMStat -Resource $vmguest.Name -Key 'cpu|usagemhz_average' -From $startdate -To $enddate -RollupType avg -IntervalType Hours -IntervalCount $interval |
3 | $memusage=Get-OMStat -Resource $vmguest.Name -Key 'mem|host_usage' -From $startdate -To $enddate -RollupType avg -IntervalType Hours -IntervalCount $interval |
3つの変数にそれぞれデータが入っているため、このままでは1つのCSVファイルに出力ができない。
これを、1つにまとめようとすると以下のようになる。
1 | $cpuusage=Get-OMStat -Resource $vmguest.Name -Key 'cpu|usage_average' -From $startdate -To $enddate -RollupType avg -IntervalType Hours -IntervalCount $interval |
2 | $cpuusagemhz=Get-OMStat -Resource $vmguest.Name -Key 'cpu|usagemhz_average' -From $startdate -To $enddate -RollupType avg -IntervalType Hours -IntervalCount $interval |
3 | $memusage=Get-OMStat -Resource $vmguest.Name -Key 'mem|host_usage' -From $startdate -To $enddate -RollupType avg -IntervalType Hours -IntervalCount $interval |
5 | $results=$cpuusage|ForEach-Object { |
6 | $output = New-Object -TypeName PSObject |
7 | $output | Add-Member -MemberType NoteProperty -Name "Time" -Value $_.Time |
8 | $output | Add-Member -MemberType NoteProperty -Name "Name" -Value $_.Resource |
9 | $output | Add-Member -MemberType NoteProperty -Name "CpuAverage" -Value $_.Value |
10 | $output | Add-Member -MemberType NoteProperty -Name "CpuMHzAverage" -Value ` |
11 | ($cpuusagemhz | where { $_.Time -eq $output.Time } |Select-Object -Last 1 ).Value |
12 | $output | Add-Member -MemberType NoteProperty -Name "MemAverage" -Value ` |
13 | ($memusage | where { $_.Time -eq $output.Time } |Select-Object -Last 1 ).Value |
17 | $results | Export-Csv output.csv -Encoding UTF8 -NoTypeInformation |
これで、1つのcsvとして、3つのメトリックの結果を取得できるようになる。