SHIFT

--- Sjoerd Hooft's InFormation Technology ---

User Tools

Site Tools


vmwarehostperformancereport
Differences

This shows you the differences between two versions of the page.

Link to this comparison view

vmwarehostperformancereport [2016/06/22 11:01] (current)
sjoerd created
Line 1: Line 1:
 += Script: powerCLI: vSphere Host Performance Script =
 +This script will query all hosts and audit their performance doing. It will tell you your core overcommitment,​ number of VMs, etc. 
  
 += The Script =
 +<code powershell>​
 +# Author: Sjoerd Hooft
 +# Date: 20140525
 +# Version Description:​
 +## Second version of Audit Script
 +
 +## Functions right now
 +
 +# Connect to vCenter
 +# Get Host performance information regarding CPUs, RAM, VMs 
 +
 +# Notes
 +## Stats can be available for: Get-StatType -Entity (Get-VMHost $esxihost) -Interval "Past Week"
 +## cpu.usage.average
 +## cpu.usagemhz.average
 +## cpu.ready.summation
 +## mem.usage.average
 +## mem.swapinRate.average
 +## mem.swapoutRate.average
 +## mem.vmmemctl.average
 +## mem.consumed.average
 +## mem.overhead.average
 +## disk.usage.average
 +## disk.maxTotalLatency.latest
 +## net.usage.average
 +## sys.uptime.latest
 +## clusterServices.cpufairness.latest
 +## clusterServices.memfairness.latest
 +
 +
 +# Variables
 +$scriptname = [System.IO.Path]::​GetFilenameWithoutExtension($MyInvocation.MyCommand.Path.ToString())
 +$scriptlocation = Split-Path $myinvocation.mycommand.path
 +$timestamp = Get-Date -format "​yyyyMMdd-HH.mm"​
 +$weekdate = Get-Date -uformat %V
 +$todayMidnight = (Get-Date -Hour 0 -Minute 0 -Second 0).AddMinutes(-1)
 +$vcenters = @("​vcenter1.getshifting.local","​vcenter2.getshifting.local"​)
 +$MailServer = "​mailserver.getshifting.local"​
 +$toemail = "​sjoerd @ _getshifting.com"​
 +$fromemail = "​monitoring @ _getshifting.com"​
 +$csvfile = "​$scriptlocation\$scriptname-vSphere.csv"​
 +
 +# Start-transcript
 +start-transcript -path "​$scriptlocation\$scriptname.txt"​
 +
 +# Add VMware snapin
 +if(-not (Get-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue)){
 +   ​Add-PSSnapin VMware.VimAutomation.Core} ​  
 +
 +# Extra custom properties for quick host vm cpu counting
 +New-VIProperty -ObjectType VMHost -name NumvCPUs `
 +    -Value {$TotalvCPU = 0
 +            $Args[0] | Get-VM | Foreach {
 +                $TotalvCPU += $_.NumCPU}
 +            $TotalvCPU
 + } -Force
 +
 +New-VIProperty -ObjectType VMHost -name NumPoweredOnvCPUs `
 +    -Value {$TotalvCPU = 0
 +            $Args[0] | Get-VM | Where { $_.PowerState -eq "​PoweredOn"​ } | Foreach {
 +                $TotalvCPU += $_.NumCPU}
 +            $TotalvCPU
 + } -Force
 +
 +New-VIProperty -ObjectType VMHost -name NumvRAM `
 +    -Value {$TotalvRAM = 0
 +            $Args[0] | Get-VM | Foreach {
 +                $TotalvRAM += $_.MemoryMB}
 +            $TotalvRAM
 + } -Force
 +
 +New-VIProperty -ObjectType VMHost -name NumPoweredOnvRAM `
 +    -Value {$TotalvRAM = 0
 +            $Args[0] | Get-VM | Where { $_.PowerState -eq "​PoweredOn"​ } | Foreach {
 +                $TotalvRAM += $_.MemoryMB}
 +            $TotalvRAM
 + } -Force
 +
 +# Functions
 +# Email functions
 +Function Send-Email ($subject, $info){
 +   ​Send-MailMessage -To $toemail -From $fromemail -SmtpServer $mailserver -Subject $subject -Body $info -Attachments "​$attachment"​}
 +
 +Function AuditAllHosts ($vcenters){
 +
 +# Create an array to collect all audit information
 +$myCol = @()
 +
 +ForEach ($vcenter in $vcenters){
 +
 + # Connect to vCenter ​
 + Connect-VIServer $vcenter
 +
 + # Get Audit properties for all hosts
 + ForEach ($esxihost in (Get-VMhost)){
 +
 + $cpuaverage = Get-Stat -Entity ($esxihost) -Stat cpu.usage.average -Start $todayMidnight.AddDays(-7) -Finish $todayMidnight.AddDays(-1) | where{$_.Instance -eq ""​} | Measure-Object value -average
 + $ramaverage = Get-Stat -Entity ($esxihost) -Stat mem.usage.average -Start $todayMidnight.AddDays(-7) -Finish $todayMidnight.AddDays(-1) | where{$_.Instance -eq ""​} | Measure-Object value -average
 +
 + $HostInfo = ""​ |select-Object HostName,​Cluster,​VMCount,​VMCountPoweredOn,​NumCPU,​NumvCPUs,​NumPoweredOnvCPUs,​CoreRatio,​Hyperthreading,​CpuTotalMhz,​CPUAverageUsage,​MemoryTotalMB,​NumvRAM,​NumPoweredOnvRAM,​RAMLeft,​RAMAverageUsage
 +
 + $HostInfo.HostName = $esxihost.Name
 + $HostInfo.Cluster = (get-vmhost $esxihost | get-cluster).Name
 + $HostInfo.VMCount = (get-vmhost $esxihost | get-vm).Count
 + $HostInfo.VMCountPoweredOn = (get-vmhost $esxihost | get-vm | where {$_.Powerstate -eq "​PoweredOn"​}).Count
 +
 + $HostInfo.NumCPU = $esxihost.NumCPU
 + $HostInfo.NumvCPUs = $esxihost.NumvCPUs
 + $HostInfo.NumPoweredOnvCPUs = $esxihost.NumPoweredOnvCPUs
 + $HostInfo.CoreRatio = $HostInfo.NumPoweredOnvCPUs/​$HostInfo.NumCPU
 + $Hostinfo.Hyperthreading = $esxihost.hyperthreadingactive
 + $HostInfo.CpuTotalMhz = $esxihost.CpuTotalMhz
 + $HostInfo.CPUAverageUsage = $cpuaverage.average
 +
 + $HostInfo.MemoryTotalMB = $esxihost.MemoryTotalMB
 + $HostInfo.NumvRAM = $esxihost.NumvRAM
 + $HostInfo.NumPoweredOnvRAM = $esxihost.NumPoweredOnvRAM
 + # Note: The line below does not consider memory usage by overhead like the host itself or overhead for virtual hardware
 + $HostInfo.RAMLeft = $esxihost.MemoryTotalMB - $esxihost.NumPoweredOnvRAM
 + $HostInfo.RAMAverageUsage = $ramaverage.average
 +
 + $myCol += $HostInfo
 + }
 +
 + # Disconnect from vCenter
 + Disconnect-VIServer * -Confirm:​$false
 +}
 +
 +$myCol |Export-csv -NoTypeInformation $csvfile
 +
 +# Send Report
 +$attachment = $csvfile ​
 +$subject = "​vSphere Audit Report for week $weekdate"​
 +$info = "Find the report attached to this email. Kind regards, Sjoerd Hooft."​
 +Send-Email $subject $info
 +
 +}
 +
 +# Cleanup files from last run
 +Remove-Item $csvfile
 +
 +#Start Actual Script
 +AuditAllHosts $vcenters
 +
 +# Stop logging
 +stop-transcript
 +</​code>​
 +
 +{{tag>​scripts vmware}}
vmwarehostperformancereport.txt ยท Last modified: 2016/06/22 11:01 by sjoerd