检索的vSphere服务器上提供的统计资料。
#Get-Date -Format "y"; 2012年3月
Connect-VIServer -Server vCenter -Protocol https -User -Password
$allvms = @()
$vms = Get-Vm
foreach($vm in $vms){
$vmstat = "" | Select VmName, GuestName, NumCPU, ProvisionedSpaceGB, UsedSpaceGB, VmHost, MemMax, MemAvg, CPUMax, CPUAvg, DiskMax, DiskAvg
$vmstat.VmName = $vm.name
$vmstat.GuestName = $vm.Guest.HostName
$vmstat.NumCPU = $vm.NumCPU
$vmstat.ProvisionedSpaceGB = $vm.ProvisionedSpaceGB
$vmstat.UsedSpaceGB = $vm.UsedSpaceGB
$vmstat.VmHost = $vm.VMHost
$statcpu = Get-Stat -Entity ($vm) `
-start (get-date).AddDays(-30) `
-Finish (Get-Date) `
-stat cpu.usagemhz.average
$statmem = Get-Stat -Entity ($vm) `
-Start (get-date).AddDays(-30) `
-Finish (Get-Date) `
-stat mem.consumed.average
$statdisk = Get-Stat -Entity ($vm) `
-Start (get-date).AddDays(-30) `
-Finish (Get-Date) `
-stat disk.usage.average
$cpu = $statcpu | Measure-Object -Property value -Average -Maximum
$mem = $statmem | Measure-Object -Property value -Average -Maximum
$disk = $statdisk | Measure-Object -Property value -Average -Maximum
$vmstat.CPUMax = $cpu.Maximum
$vmstat.CPUAvg = $cpu.Average
$vmstat.MemMax = $mem.Maximum
$vmstat.MemAvg = $mem.Average
$vmstat.DiskMax = $disk.Maximum
$vmstat.DiskAvg = $disk.Average
$allvms += $vmstat
}
$allvms | Export-Csv "c:\VMs.csv" -noTypeInformation -UseCulture
#2.接下来的脚本,让你在过去30天的每一天,每个虚拟机平均和最高的性能统计:
#The next script gives you average and maximum performance statistics per virtual machine for the last 30 days for each day:
<#@{A = 'abc';} :可以定义类#>
Function Get-AverageStatPerDay {
param($vm,$NrOfdays,$Stat)
$Today = Get-Date
Get-Stat -Entity ($vm) `
-start ($Today).AddDays(-$NrOfDays) `
-Finish ($Today) `
-stat $Stat | `
ForEach-Object {
$MetricId = $_.MetricId
$Unit = $_.Unit
$_ | `
Select-Object -Property Description,Entity,EntityId,Instance,IntervalSecs,MetricId,Timestamp,Unit,Value,@{N="Date";E={$_.TimeStamp.Date.ToShortDateString()}}
} | `
Group-Object -Property Date | `
Select-Object -Property @{N="VM";E={$vm.Name}},
@{N="MetricId";E={$MetricId}},
@{N="Date";E={$_.Name}},
@{N="Value";E={($_.Group | Measure-Object -Property Value -Average).Average}},
@{N="Unit";E={$Unit}}
}
Function Get-MaximumStatPerDay {
param($vm,$NrOfdays,$Stat)
$Today = Get-Date
Get-Stat -Entity ($vm) `
-start ($Today).AddDays(-$NrOfDays) `
-Finish ($Today) `
-stat $Stat | `
ForEach-Object {
$MetricId = $_.MetricId
$Unit = $_.Unit
$_ | `
Select-Object -Property Description,Entity,EntityId,Instance,IntervalSecs,MetricId,Timestamp,Unit,Value,@{N="Date";E={$_.TimeStamp.Date.ToShortDateString()}}
} | `
Group-Object -Property Date | `
Select-Object -Property @{N="VM";E={$vm.Name}},
@{N="MetricId";E={$MetricId}},
@{N="Date";E={$_.Name}},
@{N="Value";E={($_.Group | Measure-Object -Property Value -Maximum).Maximum}},
@{N="Unit";E={$Unit}}
}
Get-VM | ForEach-Object {
$vm = $_
Get-AverageStatPerDay -vm $vm -NrOfDays 30 -Stat cpu.usagemhz.average
Get-AverageStatPerDay -vm $vm -NrOfDays 30 -Stat mem.consumed.average
Get-AverageStatPerDay -vm $vm -NrOfDays 30 -Stat disk.usage.average
Get-MaximumStatPerDay -vm $vm -NrOfDays 30 -Stat cpu.usagemhz.maximum
Get-MaximumStatPerDay -vm $vm -NrOfDays 30 -Stat mem.consumed.maximum
Get-MaximumStatPerDay -vm $vm -NrOfDays 30 -Stat disk.usage.maximum
}
#3-------report-last-2calendar---month.ps1--------------------------------------------------------------
$allclust = @()
$clust = Get-Cluster
foreach($clu in $clust){
$clusstat = "" | Select ClusterName, MemMax, MemAvg, CPUMax, CPUAvg
$clusstat.ClusterName = $clu.name
$thisMonth = [datetime](Get-Date -Format "y")
12..1 | %{
$from = $thisMonth.AddMonths(- $_ )
$to = $thisMonth.AddMonths(- $_ +1).AddDays(-1)
}
$statcpu = Get-Stat -Entity ($clu)
-start $from
-Finish $to
-MaxSamples 10000
-stat cpu.usagemhz.average
$statmem = Get-Stat -Entity ($clu)
-start $from
-Finish $to
-MaxSamples 10000
-stat mem.usage.average
$cpu = $statcpu | Measure-Object -Property value -Average -Maximum
$mem = $statmem | Measure-Object -Property value -Average -Maximum
$clusstat.CPUMax = $cpu.Maximum
$clusstat.CPUAvg = $cpu.Average
$clusstat.MemMax = $mem.Maximum
$clusstat.MemAvg = $mem.Average
$allclust += $clusstat
}
$allclust |
select ClusterName, MemMax, MemAvg, CPUMax, CPUAvg |
Export-Csv "c:\g.csv" -noTypeInformation
#显示CPU
$entities = Get-VM $start = (Get-Date).AddMinutes(-5)
$report = Get-Stat -Entity $entities -Stat $metrics -Realtime -Start $start |
Group-Object -Property EntityId,Timestamp | %{
New-Object PSObject -Property @{
Name = $_.Group[0].Entity.Name
Time = $_.Group[0].Timestamp
CpuAvg = ($_.Group | where {$_.MetricId -eq "cpu.usage.average"}).Value
CpuRdy = ($_.Group | where {$_.MetricId -eq "cpu.ready.summation" -and $_.Instance -eq ""}).Value
CpuSwpWait = ($_.Group | where {$_.MetricId -eq "cpu.swapwait.summation" -and $_.Instance -eq ""}).Value
MemActAvg = ($_.Group | where {$_.MetricId -eq "mem.active.average"}).Value
}
}
$report | Sort-Object Name,Time | Export-Csv "C:\VMstats.csv" -NoTypeInformation -UseCulture
memory的使用:
http://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/memory_counters.html
mem: sys.uptime.latest
获取stat的参数值
get-stat -Entity (Get-VMHost esx01*) -Stat * -MaxSamples 1 | ft metricid
intervalmins 5加上,五分钟的粒度。