PowerCLI

 View Only
  • 1.  get cluster utilization info

    Posted Sep 27, 2016 10:21 PM

    hi,

    how do I modify the below to show cluster name as well

    $clusters = get-cluster

    foreach ($clustername in $clusters) {

    $days = 30

    $start = (Get-Date).AddDays(- $days)

    $stat = "cpu.usage.average","mem.usage.average","mem.vmmemctl.average",

      "mem.shared.average","mem.active.average","mem.swapused.average"

    $cluster = get-cluster -name $clustername

    $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}} | export-csv "c:\scripts\clusterreport.csv" -notypeInformation

    }



  • 2.  RE: get cluster utilization info

    Posted Sep 27, 2016 10:43 PM

    I keep getting the error:



  • 3.  RE: get cluster utilization info

    Posted Sep 28, 2016 05:24 AM

    Try like this

    Note that some of the metrics you are using require Statistics Level 4 for Historical Interval 3 (Past Month)

    $days = 30

    $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:\scripts\clusterreport.csv" -notypeInformation



  • 4.  RE: get cluster utilization info

    Posted Sep 28, 2016 01:20 PM

    Hi LUcd

    I am getting the same error



  • 5.  RE: get cluster utilization info

    Posted Sep 28, 2016 01:23 PM

    Do you have an empty cluster in your environment?

    A cluster with no ESXi nodes.

    Can you eventually try with a specific cluster (Get-Cluster -Name MyCluster)?



  • 6.  RE: get cluster utilization info

    Posted Sep 28, 2016 01:28 PM

    yes I have some empty clusters. IF I do it per cluster it works fine. but I need to get all the hosts from each cluster



  • 7.  RE: get cluster utilization info
    Best Answer

    Posted Sep 28, 2016 01:36 PM

    Since there are no ESXi nodes in an empty cluster, you could just generate an entry with the clustername.

    Something like this

    $days = 30

    $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

        if($esx){

            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}}

        }

        else{

            $cluster | select @{N="Cluster";E={$_.Name}},

                @{N="VMHost";E={}},

                @{N="Total memory";E={}},

                @{N="Total CPU";E={}},

                @{N="Average memory used";E={}},

                @{N="Average CPU used";E={}},

                @{N="Average memory ballooning";E={}},

                @{N="Average shared memory";E={}},

                @{N="Average active used";E={}},

                @{N="Average memory swapped";E={}}

        }

    }

    $report | export-csv "c:\scripts\clusterreport.csv" -notypeInformation



  • 8.  RE: get cluster utilization info

    Posted Sep 28, 2016 02:24 PM

    lucd

    got this error



  • 9.  RE: get cluster utilization info

    Posted Sep 28, 2016 03:35 PM

    The 'i' in if was not a normal 'i'.

    I corrected it above, please try again.



  • 10.  RE: get cluster utilization info

    Posted Sep 28, 2016 05:46 PM

    Thanks Lucd



  • 11.  RE: get cluster utilization info

    Posted Nov 12, 2019 08:10 PM

    Hi LucD. 

    How would I get this only for Mon-Fri in a month? 

    Thanks in advance 

    Mark



  • 12.  RE: get cluster utilization info

    Posted Nov 12, 2019 08:46 PM

    With an additional Where-clause after the Get-Stat.
    See an examples in my PowerCLI & VSphere Statistics – Part 2 – Come Together post.

    More specifically the one which uses $_.Timestamp.DayOfWeek