VMware Cloud Community
amor123
Enthusiast
Enthusiast
Jump to solution

powercli cpu,mem

Attempt to save vm cpu,mem min, average, max.

I want to do this.

January vm cpu - min,average,max mem - min average max

February vm cpu - min,average,max mem - min average max

March vm cpu - min,average,max mem - min average max

...

December - vm cpu - min,average,max mem - min average max

I've made this right now.

Please amend me.

$report = @()
$metrics = "cpu.usagemhz.average","mem.active.average"
$vms = Get-Vm | where {$_.PowerState -eq "PoweredOn"}
$start = (get-date).AddDays(-365)

Get-Stat -Entity ($vms) -start $start -stat $metrics | `
  Group-Object -Property EntityId | %{
    $row = ""| Select VmName, vCPU, MinCpu,AvgCpu,MaxCpu,MemAlloc,MinMem,AvgMem,MaxMem
    $row.VmName = $_.Group[0].Entity.Name
    $row.vCPU = $_.Group[0].Entity.NumCpu
    $cpuStat = $_.Group | where {$_.MetricId -eq "cpu.usagemhz.average"} | Measure-Object -Property Value -Minimum -Maximum -Average
    $row.MinCpu = "{0:f2}" -f ($cpuStat.Minimum)
    $row.AvgCpu = "{0:f2}" -f ($cpuStat.Average)
    $row.MaxCpu = "{0:f2}" -f ($cpuStat.Maximum)
    $row.MemAlloc = $_.Group[0].Entity.MemoryMB
    $memStat = $_.Group | where {$_.MetricId -eq "mem.active.average"} | Measure-Object -Property Value -Minimum -Maximum -Average
    $row.MinMem = "{0:f2}" -f ($memStat.Minimum)
    $row.AvgMem = "{0:f2}" -f ($memStat.Average)
    $row.MaxMem = "{0:f2}" -f ($memStat.Maximum)
    $report += $row
}
$report | Export-Csv "C:\VM-stats1.csv" -NoTypeInformation -UseCulture

Please help me.

Is there a way?

21 Replies
amor123
Enthusiast
Enthusiast
Jump to solution

Can you pick up data every day, not every month?

if possible

Where should I fix it?

help me...

0 Kudos
LucD
Leadership
Leadership
Jump to solution

Try like this

$report = @()

$metrics = "cpu.usage.average","mem.usage.average"

$esx = Get-VMHost

$start = (get-date).AddDays(-365)

Get-Stat -Entity $esx -Start $start |

Group-Object -Property {$_.Entity.Name},{$_.Timestamp.DayOfYear} | %{

    $row = ""| Select HostName, Day, vCPU, MinCpu,AvgCpu,MaxCpu,MemAlloc,MinMem,AvgMem,MaxMem

    $row.Day = $_.Group[0].TimeStamp.ToShortDateString()

    $row.HostName = $_.Name.Split(',')[0]

    $row.vCPU = $_.Group[0].Entity.NumCpu

    $cpuStat = $_.Group | where {$_.MetricId -eq "cpu.usage.average"} | Measure-Object -Property Value -Minimum -Maximum -Average

    $row.MinCpu = "{0:f2}" -f ($cpuStat.Minimum)

    $row.AvgCpu = "{0:f2}" -f ($cpuStat.Average)

    $row.MaxCpu = "{0:f2}" -f ($cpuStat.Maximum)

    $row.MemAlloc = $_.Group[0].Entity.MemoryTotalGB

    $memStat = $_.Group | where {$_.MetricId -eq "mem.usage.average"} | Measure-Object -Property Value -Minimum -Maximum -Average

    $row.MinMem = "{0:f2}" -f ($memStat.Minimum)

    $row.AvgMem = "{0:f2}" -f ($memStat.Average)

    $row.MaxMem = "{0:f2}" -f ($memStat.Maximum)

    $report += $row

}

$report | Export-Csv "C:\VM-stats(test).csv" -NoTypeInformation -UseCulture


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos