VMware Cloud Community
MRoushdy
Hot Shot
Hot Shot
Jump to solution

Calculating Cluster Performance Results

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

vEXPERT - VCAP-DCV - Blog: arabitnetwork.com | YouTube: youtube.com/c/MohamedRoushdy
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

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

View solution in original post

3 Replies
LucD
Leadership
Leadership
Jump to solution

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

0 Kudos
MRoushdy
Hot Shot
Hot Shot
Jump to solution

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.

vEXPERT - VCAP-DCV - Blog: arabitnetwork.com | YouTube: youtube.com/c/MohamedRoushdy
0 Kudos
LucD
Leadership
Leadership
Jump to solution

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