# encoding: ascii # api: powershell # title: check-nsca.ps1 # description: Sends with nsca (Nagios Client) all Status Informations over VMs # version: 0.1 # author: Patrick # license: CC0 # x-poshcode-id: 1630 # x-archived: 2016-05-26T20:42:03 # x-published: 2010-02-08T03:59:00 # # #region vars $statvalues=("mem.usage.average", "cpu.usage.average") $nsca_stat = "" [int]$warnlevel = 85 [int]$criticallevel = 90 $status = "" $nagsrv = "nagios-srv.local" #endregion $vms = Get-VM | Where-Object { $_.PowerState -eq "PoweredOn" } | sort-object foreach ($vm in $vms) { $statvalues | foreach { [int]$statavg = ($vm | Get-Stat -Stat $_ -Start ((get-date).AddMinutes(-5)) -MaxSamples 500 | Measure-Object -Property Value -Average).Average $vmdns = ($vm | Get-VMGuest).Hostname switch ($_) { "mem.usage.average" { $nsca_stat = "mem_vm"; $desc = "Memory Usage" } "cpu.usage.average" { $nsca_stat = "cpu_vm"; $desc = "CPU Usage" } } if ($statavg -gt $criticallevel) { $status = "2" $desc = "CRITICAL: " + $desc } elseif ($statavg -gt $warnlevel) { $status = "1" $desc = "WARNING: " + $desc } elseif ($statavg -lt $warnlevel) { $status = "0" } $nsca = "${vmdns};${nsca_stat};${status};${desc} ${statavg}% | ${nsca_stat}=${statavg};$warnlevel;$criticallevel;0;100" Write-Host $nsca if ($vmdns) { echo $nsca | ./send_nsca.exe -H $nagsrv -c send_nsca.cfg -d ";" } } }