Hello,
I came across this script that generates cluster utilization over a specific period of time, which is great. However, is it possible to generate a report that sums the totals for each cluster, and represent it in a HTML report please?
$days = 1
$start = (Get-Date).AddDays(- $days)
$stat = "cpu.usage.average","mem.usage.average","mem.vmmemctl.average",
"mem.shared.average","mem.active.average","mem.swapused.average"
$report = foreach ($cluster in Get-Cluster) {
$esx = Get-VMHost -Location $cluster
Get-Stat -Entity $esx -Start $start -Stat $stat |
Group-Object -Property {$_.Entity.Name} |
select @{N="Cluster";E={$cluster.Name}},
@{N="VMHost";E={$_.Name}},
@{N="Total memory";E={$_.Group[0].Entity.MemoryTotalGB}},
@{N="Total CPU";E={$_.Group[0].Entity.NumCpu}},
@{N="Average memory used";E={$_.Group | Where {$_.MetricId -eq "mem.usage.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average}},
@{N="Average CPU used";E={$_.Group | Where {$_.MetricId -eq "cpu.usage.average" -and $_.Instance -eq ""} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average}},
@{N="Average memory ballooning";E={$_.Group | Where {$_.MetricId -eq "mem.vmmemctl.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average}},
@{N="Average shared memory";E={$_.Group | Where {$_.MetricId -eq "mem.shared.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average}},
@{N="Average active used";E={$_.Group | Where {$_.MetricId -eq "mem.active.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average}},
@{N="Average memory swapped";E={$_.Group | Where {$_.MetricId -eq "mem.swapused.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average}}
}
$report | export-csv "c:\exports\performance\clusterreport.csv" -notypeInformation
You could do something like this
$days = 1
$start = (Get-Date).AddDays(- $days)
$stat = "cpu.usage.average","mem.usage.average","mem.vmmemctl.average",
"mem.shared.average","mem.active.average","mem.swapused.average"
$report = foreach ($cluster in Get-Cluster) {
$esx = Get-VMHost -Location $cluster
$esxGroups = Get-Stat -Entity $esx -Start $start -Stat $stat | Group-Object -Property {$_.Entity.Name}
"" | select @{N="Cluster";E={$cluster.Name}},
@{N="Total memory";E={$esx.MemoryTotalGB | Measure-Object -Sum | Select -ExpandProperty Sum}},
@{N="Total CPU";E={$esx.NumCpu | Measure-Object -Sum | Select -ExpandProperty Sum}},
@{N="Average memory used";E={
$esxGroups | ForEach-Object -Process {
$_.Group | Where {$_.MetricId -eq "mem.usage.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average
} | Measure-Object -Average | Select -ExpandProperty Average}},
@{N="Average CPU used";E={
$esxGroups | ForEach-Object -Process {
$_.Group | Where {$_.MetricId -eq "cpu.usage.average" -and $_.Instance -eq ""} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average
} | Measure-Object -Average | Select -ExpandProperty Average}},
@{N="Average memory ballooning";E={
$esxGroups | ForEach-Object -Process {
$_.Group | Where {$_.MetricId -eq "mem.vmmemctl.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average
} | Measure-Object -Average | Select -ExpandProperty Average}},
@{N="Average shared memory";E={
$esxGroups | ForEach-Object -Process {
$_.Group | Where {$_.MetricId -eq "mem.shared.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average
} | Measure-Object -Average | Select -ExpandProperty Average}},
@{N="Average active used";E={
$esxGroups | ForEach-Object -Process {
$_.Group | Where {$_.MetricId -eq "mem.active.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average
} | Measure-Object -Average | Select -ExpandProperty Average}},
@{N="Average memory swapped";E={
$esxGroups | ForEach-Object -Process {
$_.Group | Where {$_.MetricId -eq "mem.swapused.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average
} | Measure-Object -Average | Select -ExpandProperty Average}}
}
$report | export-csv "c:\exports\performance\clusterreport.csv" -notypeInformation
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Sure that is possible, but can you be a bit more specific on the summation part?
Is that the sum over 1 day?
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Thanks for responding.
Yes, 1 day is required, I just need to sum the averages per cluster, since that scripts itemizes the result per host rather than a total.
You could do something like this
$days = 1
$start = (Get-Date).AddDays(- $days)
$stat = "cpu.usage.average","mem.usage.average","mem.vmmemctl.average",
"mem.shared.average","mem.active.average","mem.swapused.average"
$report = foreach ($cluster in Get-Cluster) {
$esx = Get-VMHost -Location $cluster
$esxGroups = Get-Stat -Entity $esx -Start $start -Stat $stat | Group-Object -Property {$_.Entity.Name}
"" | select @{N="Cluster";E={$cluster.Name}},
@{N="Total memory";E={$esx.MemoryTotalGB | Measure-Object -Sum | Select -ExpandProperty Sum}},
@{N="Total CPU";E={$esx.NumCpu | Measure-Object -Sum | Select -ExpandProperty Sum}},
@{N="Average memory used";E={
$esxGroups | ForEach-Object -Process {
$_.Group | Where {$_.MetricId -eq "mem.usage.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average
} | Measure-Object -Average | Select -ExpandProperty Average}},
@{N="Average CPU used";E={
$esxGroups | ForEach-Object -Process {
$_.Group | Where {$_.MetricId -eq "cpu.usage.average" -and $_.Instance -eq ""} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average
} | Measure-Object -Average | Select -ExpandProperty Average}},
@{N="Average memory ballooning";E={
$esxGroups | ForEach-Object -Process {
$_.Group | Where {$_.MetricId -eq "mem.vmmemctl.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average
} | Measure-Object -Average | Select -ExpandProperty Average}},
@{N="Average shared memory";E={
$esxGroups | ForEach-Object -Process {
$_.Group | Where {$_.MetricId -eq "mem.shared.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average
} | Measure-Object -Average | Select -ExpandProperty Average}},
@{N="Average active used";E={
$esxGroups | ForEach-Object -Process {
$_.Group | Where {$_.MetricId -eq "mem.active.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average
} | Measure-Object -Average | Select -ExpandProperty Average}},
@{N="Average memory swapped";E={
$esxGroups | ForEach-Object -Process {
$_.Group | Where {$_.MetricId -eq "mem.swapused.average"} |
Measure-Object -Property Value -Average | Select -ExpandProperty Average
} | Measure-Object -Average | Select -ExpandProperty Average}}
}
$report | export-csv "c:\exports\performance\clusterreport.csv" -notypeInformation
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference