Skip to content

Commit

Permalink
Update ViPullStatistics.ps1
Browse files Browse the repository at this point in the history
  • Loading branch information
rschitz committed May 28, 2024
1 parent 62d9334 commit 92ef04d
Showing 1 changed file with 219 additions and 1 deletion.
220 changes: 219 additions & 1 deletion opt/sexigraf/ViPullStatistics.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#
param([parameter (Mandatory=$true)] [string] $Server, [parameter (Mandatory=$true)] [string] $SessionFile, [parameter (Mandatory=$false)] [string] $CredStore)

$ScriptVersion = "0.9.1038"
$ScriptVersion = "0.9.1039"

$ExecStart = $(Get-Date).ToUniversalTime()
# $stopwatch = [system.diagnostics.stopwatch]::StartNew()
Expand Down Expand Up @@ -2037,6 +2037,224 @@ if ($ServiceInstance.Content.About.ApiType -match "VirtualCenter") {
}
}

if (!$vcenter_clusters -and !$vcenter_vmhosts -and $vcenter_vms) {
SexiLogger "[INFO] *RESTRICTED USER MODE* aka VM access only ..."
$vcenter_restricted_h = @{}

$vcenter_restricted_vms_files_dedup = @{}
$vcenter_restricted_vms_files_dedup_total = @{}
$vcenter_restricted_vms_files_snaps = 0
$vcenter_restricted_vms_snaps = 0
$vcenter_restricted_vms_off = 0
$vcenter_restricted_vms_on = 0
$vcenter_restricted_vmdk_per_ds = @{}

foreach ($vcenter_restricted_vm in $vcenter_vms) {

$vcenter_restricted_dc_name = "_restricted_"
$vcenter_restricted_cluster_name = "_restricted_"

if ($vcenter_restricted_vm.config.version) {
$vcenter_restricted_vm_vhw = NameCleaner $vcenter_restricted_vm.config.version
$vmware_version_h["vi.$vcenter_name.vi.version.vm.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vhw.$vcenter_restricted_vm_vhw"] ++
}

if ($vcenter_restricted_vm.config.guestId) {
$vcenter_restricted_vm_guestId = NameCleaner $vcenter_restricted_vm.config.guestId
$vmware_version_h["vi.$vcenter_name.vi.version.vm.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.guest.$vcenter_restricted_vm_guestId"] ++
}

if ($vcenter_restricted_vm.config.tools.toolsVersion) {
$vcenter_restricted_vm_vmtools = NameCleaner $vcenter_restricted_vm.config.tools.toolsVersion
$vmware_version_h["vi.$vcenter_name.vi.version.vm.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vmtools.$vcenter_restricted_vm_vmtools"] ++
}

$vcenter_restricted_vm_name = NameCleaner $vcenter_restricted_vm.Name

if ($vcenter_restricted_h["vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.storage.committed"]) {
SexiLogger "[INFO] $vcenter_restricted_vm_name has a dup, adding moref in the name ..."
$vcenter_restricted_vm_name = $vcenter_restricted_vm_name + "_" + $vcenter_restricted_vm.moref.value.split("-" )[1]
}

try {
$vcenter_restricted_vm_files = $vcenter_restricted_vm.layoutEx.file
### http://pubs.vmware.com/vsphere-60/topic/com.vmware.wSsdk.apiref.doc/vim.vm.FileLayoutEx.FileType.html

$vcenter_restricted_vm_snap_size = 0

if ($vcenter_restricted_vm.snapshot) {
$vcenter_restricted_vm_has_snap = 1
$vcenter_restricted_vms_snaps ++
} else {
$vcenter_restricted_vm_has_snap = 0
}

$vcenter_restricted_vm_num_vdisk = $vcenter_restricted_vm.summary.config.numVirtualDisks
$vcenter_restricted_vm_real_vdisk = 0
$vcenter_restricted_vm_has_diskExtent = 0

foreach ($vcenter_restricted_vm_file in $vcenter_restricted_vm_files) {
if ($vcenter_restricted_vm_file.type -eq "diskDescriptor") {
$vcenter_restricted_vm_real_vdisk ++
$vcenter_restricted_vm_file_ds_name = nameCleaner $([regex]::match($vcenter_restricted_vm_file.name, '^\[(.*)\]').Groups[1].value)
$vcenter_restricted_vmdk_per_ds[$vcenter_restricted_vm_file_ds_name] ++
} elseif ($vcenter_restricted_vm_file.type -eq "diskExtent") {
$vcenter_restricted_vm_has_diskExtent ++
}
}

if ($vcenter_restricted_vm_real_vdisk -gt $vcenter_restricted_vm_num_vdisk) {
$vcenter_restricted_vm_has_snap = 1
}

foreach ($vcenter_restricted_vm_file in $vcenter_restricted_vm_files) {
if(!$vcenter_restricted_vms_files_dedup[$vcenter_restricted_vm_file.name]) { ### TODO would need name & moref
$vcenter_restricted_vms_files_dedup[$vcenter_restricted_vm_file.name] = $vcenter_restricted_vm_file.size
if ($vcenter_restricted_vm_has_snap -and (($vcenter_restricted_vm_file.name -match '-[0-9]{6}-delta\.vmdk') -or ($vcenter_restricted_vm_file.name -match '-[0-9]{6}-sesparse\.vmdk'))) {
$vcenter_restricted_vms_files_dedup_total["snapshotExtent"] += $vcenter_restricted_vm_file.size
$vcenter_restricted_vm_snap_size += $vcenter_restricted_vm_file.size
} elseif ($vcenter_restricted_vm_has_snap -and ($vcenter_restricted_vm_file.name -match '-[0-9]{6}\.vmdk')) {
$vcenter_restricted_vms_files_dedup_total["snapshotDescriptor"] += $vcenter_restricted_vm_file.size
$vcenter_restricted_vm_snap_size += $vcenter_restricted_vm_file.size
$vcenter_restricted_vms_files_snaps ++
} elseif ($vcenter_restricted_vm_file.name -match '-rdm\.vmdk') {
$vcenter_restricted_vms_files_dedup_total["rdmExtent"] += $vcenter_restricted_vm_file.size
} elseif ($vcenter_restricted_vm_file.name -match '-rdmp\.vmdk') {
$vcenter_restricted_vms_files_dedup_total["rdmpExtent"] += $vcenter_restricted_vm_file.size
} elseif ((!$vcenter_restricted_vm_has_diskExtent) -and $vcenter_restricted_vm_file.type -eq "diskDescriptor") {
$vcenter_restricted_vms_files_dedup_total["virtualExtent"] += $vcenter_restricted_vm_file.size
} else {
$vcenter_restricted_vms_files_dedup_total[$vcenter_restricted_vm_file.type] += $vcenter_restricted_vm_file.size
}
}
}

if ($vcenter_restricted_vm_snap_size -gt 0) {
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.storage.delta", $vcenter_restricted_vm_snap_size)
}
} catch {
SexiLogger "[EROR] VM $vcenter_restricted_vm_name snapshot compute issue in cluster $vcenter_restricted_cluster_name"
SexiLogger "[EROR] $($Error[0])"
}

try {
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.storage.committed", $vcenter_restricted_vm.summary.storage.committed)
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.storage.uncommitted", $vcenter_restricted_vm.summary.storage.uncommitted)
} catch {
SexiLogger "[EROR] VM $vcenter_restricted_vm_name storage commit metric issue in cluster $vcenter_restricted_cluster_name"
SexiLogger "[EROR] $($Error[0])"
}

if ($vcenter_restricted_vm.summary.runtime.powerState -eq "poweredOn") {
$vcenter_restricted_vms_on ++

$vcenter_restricted_vms_vcpus += $vcenter_restricted_vm.config.hardware.numCPU
$vcenter_restricted_vms_vram += $vcenter_restricted_vm.runtime.maxMemoryUsage


if ($vcenter_restricted_vm.runtime.maxCpuUsage -gt 0 -and $vcenter_restricted_vm.summary.quickStats.overallCpuUsage) {
$vcenter_restricted_vm_CpuUtilization = $vcenter_restricted_vm.summary.quickStats.overallCpuUsage * 100 / $vcenter_restricted_vm.runtime.maxCpuUsage
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.runtime.CpuUtilization", $vcenter_restricted_vm_CpuUtilization)
} else {
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.runtime.CpuUtilization", 0)
}

if ($vcenter_restricted_vm.summary.quickStats.guestMemoryUsage -gt 0 -and $vcenter_restricted_vm.runtime.maxMemoryUsage) {
$vcenter_restricted_vm_MemUtilization = $vcenter_restricted_vm.summary.quickStats.guestMemoryUsage * 100 / $vcenter_restricted_vm.runtime.maxMemoryUsage
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.runtime.MemUtilization", $vcenter_restricted_vm_MemUtilization)
}

$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.quickstats.overallCpuUsage", $vcenter_restricted_vm.summary.quickStats.overallCpuUsage)
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.quickstats.overallCpuDemand", $vcenter_restricted_vm.summary.quickStats.overallCpuDemand)
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.quickstats.HostMemoryUsage", $vcenter_restricted_vm.summary.quickStats.hostMemoryUsage)
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.quickstats.GuestMemoryUsage", $vcenter_restricted_vm.summary.quickStats.guestMemoryUsage)

if ($vcenter_restricted_vm.summary.quickStats.balloonedMemory -gt 0) {
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.quickstats.BalloonedMemory", $vcenter_restricted_vm.summary.quickStats.balloonedMemory)
}

if ($vcenter_restricted_vm.summary.quickStats.compressedMemory -gt 0) {
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.quickstats.CompressedMemory", $vcenter_restricted_vm.summary.quickStats.compressedMemory)
}

if ($vcenter_restricted_vm.summary.quickStats.swappedMemory -gt 0) {
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.quickstats.SwappedMemory", $vcenter_restricted_vm.summary.quickStats.swappedMemory)
}

if ($VmMultiStats[$PerfCounterTable["cpu.ready.summation"]][$vcenter_restricted_vm.moref.value][""]) {
$vcenter_restricted_vm_ready = $VmMultiStats[$PerfCounterTable["cpu.ready.summation"]][$vcenter_restricted_vm.moref.value][""] / $vcenter_restricted_vm.config.hardware.numCPU / 20000 * 100
### https://kb.vmware.com/kb/2002181
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.fatstats.cpu_ready_summation", $vcenter_restricted_vm_ready)
}

if ($VmMultiStats[$PerfCounterTable["cpu.wait.summation"]][$vcenter_restricted_vm.moref.value][""] -and $VmMultiStats[$PerfCounterTable["cpu.idle.summation"]][$vcenter_restricted_vm.moref.value][""]) {
$vcenter_restricted_vm_io_wait = ($VmMultiStats[$PerfCounterTable["cpu.wait.summation"]][$vcenter_restricted_vm.moref.value][""] - $VmMultiStats[$PerfCounterTable["cpu.idle.summation"]][$vcenter_restricted_vm.moref.value][""]) / $vcenter_restricted_vm.config.hardware.numCPU / 20000 * 100
### https://code.vmware.com/apis/358/vsphere#/doc/cpu_counters.html
### "Total CPU time spent in wait state.The wait total includes time spent the CPU Idle, CPU Swap Wait, and CPU I/O Wait states."
# https://kb.vmware.com/s/article/85393
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.fatstats.cpu_wait_no_idle", $vcenter_restricted_vm_io_wait)
}

if ($VmMultiStats[$PerfCounterTable["cpu.latency.average"]][$vcenter_restricted_vm.moref.value][""]) {
$vcenter_restricted_vm_cpu_latency = $VmMultiStats[$PerfCounterTable["cpu.latency.average"]][$vcenter_restricted_vm.moref.value][""]
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.fatstats.cpu_latency_average", $vcenter_restricted_vm_cpu_latency)
}

if ($VmMultiStats[$PerfCounterTable["disk.maxTotalLatency.latest"]][$vcenter_restricted_vm.moref.value][""]) {
$vcenter_restricted_vm_disk_latency = $VmMultiStats[$PerfCounterTable["disk.maxTotalLatency.latest"]][$vcenter_restricted_vm.moref.value][""]
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.fatstats.maxTotalLatency", $vcenter_restricted_vm_disk_latency)
}

if ($VmMultiStats[$PerfCounterTable["virtualdisk.write.average"]][$vcenter_restricted_vm.moref.value][""] -ge 0 -and $VmMultiStats[$PerfCounterTable["virtualdisk.read.average"]][$vcenter_restricted_vm.moref.value][""] -ge 0) {
$vcenter_restricted_vm_disk_usage = $VmMultiStats[$PerfCounterTable["virtualdisk.write.average"]][$vcenter_restricted_vm.moref.value][""] + $VmMultiStats[$PerfCounterTable["virtualdisk.read.average"]][$vcenter_restricted_vm.moref.value][""]
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.fatstats.diskUsage", $vcenter_restricted_vm_disk_usage)
} else {
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.fatstats.diskUsage", 0)
}

if ($VmMultiStats[$PerfCounterTable["virtualdisk.numberWriteAveraged.average"]][$vcenter_restricted_vm.moref.value] -and $VmMultiStats[$PerfCounterTable["virtualdisk.numberReadAveraged.average"]][$vcenter_restricted_vm.moref.value]) {
$vcenter_restricted_vm_disk_iops = $($VmMultiStats[$PerfCounterTable["virtualdisk.numberWriteAveraged.average"]][$vcenter_restricted_vm.moref.value][$($VmMultiStats[$PerfCounterTable["virtualdisk.numberWriteAveraged.average"]][$vcenter_restricted_vm.moref.value]).Keys]|Measure-Object -Sum).Sum + $($VmMultiStats[$PerfCounterTable["virtualdisk.numberReadAveraged.average"]][$vcenter_restricted_vm.moref.value][$($VmMultiStats[$PerfCounterTable["virtualdisk.numberWriteAveraged.average"]][$vcenter_restricted_vm.moref.value]).Keys]|Measure-Object -Sum).Sum
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.fatstats.diskIOPS", $vcenter_restricted_vm_disk_iops)
}

# if ($VmMultiStats[$PerfCounterTable["net.packetsTx.summation"]][$vcenter_restricted_vm.moref.value] -and $VmMultiStats[$PerfCounterTable["net.packetsRx.summation"]][$vcenter_restricted_vm.moref.value]) {
# $vcenter_restricted_vm_net_iops = $($($VmMultiStats[$PerfCounterTable["net.packetsTx.summation"]][$vcenter_restricted_vm.moref.value][$($VmMultiStats[$PerfCounterTable["net.packetsTx.summation"]][$vcenter_restricted_vm.moref.value]).Keys]|Measure-Object -Sum).Sum + $($VmMultiStats[$PerfCounterTable["net.packetsRx.summation"]][$vcenter_restricted_vm.moref.value][$($VmMultiStats[$PerfCounterTable["net.packetsTx.summation"]][$vcenter_restricted_vm.moref.value]).Keys]|Measure-Object -Sum).Sum) / 300
# $vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.fatstats.netIOPS", $vcenter_restricted_vm_net_iops)
# }

if ($VmMultiStats[$PerfCounterTable["net.usage.average"]][$vcenter_restricted_vm.moref.value][""]) {
$vcenter_restricted_vm_net_usage = $VmMultiStats[$PerfCounterTable["net.usage.average"]][$vcenter_restricted_vm.moref.value][""]
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.fatstats.netUsage", $vcenter_restricted_vm_net_usage)
} else {
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.vm.$vcenter_restricted_vm_name.fatstats.netUsage", 0)
}

} elseif ($vcenter_restricted_vm.summary.runtime.powerState -eq "poweredOff") {
$vcenter_restricted_vms_off ++
}
}

if ($vcenter_restricted_vms_files_dedup_total) {
foreach ($vcenter_restricted_vms_filetype in $vcenter_restricted_vms_files_dedup_total.keys) {
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.storage.FileType.$vcenter_restricted_vms_filetype", $vcenter_restricted_vms_files_dedup_total[$vcenter_restricted_vms_filetype])
}

if ($vcenter_restricted_vms_files_snaps) {
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.storage.SnapshotCount", $vcenter_restricted_vms_files_snaps)
}

if ($vcenter_restricted_vms_snaps) {
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.storage.VmSnapshotCount", $vcenter_restricted_vms_snaps)
}
}

$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.runtime.vm.total", ($vcenter_restricted_vms_on + $vcenter_restricted_vms_off))
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.runtime.vm.on", $vcenter_restricted_vms_on)
$vcenter_restricted_h.add("vmw.$vcenter_name.$vcenter_restricted_dc_name.$vcenter_restricted_cluster_name.runtime.vm.dead", $vcenter_restricted_hosts_vms_dead)

Send-BulkGraphiteMetrics -CarbonServer 127.0.0.1 -CarbonServerPort 2003 -Metrics $vcenter_restricted_h -DateTime $ExecStart
}

if ($SessionManager) {
SexiLogger "[INFO] Processing vCenter $vcenter_name SessionList"
$vcenter_session_list_h = @{}
Expand Down

0 comments on commit 92ef04d

Please sign in to comment.