Advertising:
Integración PRTG/SCOM Network Monitor vía ZABBIX en 5 minutos
Jump to navigation
Jump to search
FILES: Media:Integracion_PRTG-SCOM-ZABBIX.zip
scom2zbx.conf
UserParameter=GetS2Z,C:\zabbix\bin\scom2zabbix.cmd
scom2zabbix.cmd
@ECHO OFF set LOGFILE=C:\zabbix\scom2zabbix.log call :sub >%LOGFILE% exit /b :sub "C:\Windows\System32\WindowsPowershell\v1.0\powershell.exe" -File C:\zabbix\bin\scom2zabbix.ps1
scom2zabbix.ps1
function ZabbixTrapper { param ( [string]$Value ) [string]$Server = 'xxx.xxx.xxx.xxx' [int]$Port = '10051' [string]$HostName = 'SCOM01' [string]$Key = 'scom.traps' [string[]]$Header = @('host','key','value') [string]$JsonString [switch]$OnlyPreview = $false if ( [bool]($HostName -or $Key -or $Value) ) { if(! [bool]($HostName -and $Key -and $Value) ) { Write-Error 'HostName, Key and Value must not be null'; break } else { $Json = [pscustomobject][ordered]@{ 'request' = 'sender data' ; 'data' = @([pscustomobject][ordered]@{'host' = $HostName;'key' = $Key;'value' = $Value}) } | ConvertTo-Json -Compress } } elseif ($InputObject) { $Json = [pscustomobject][ordered]@{ 'request' = 'sender data' ; 'data' = @( $InputObject | Select-Object -Property @( @{'Name' = 'host'; Expression = {$_.$($Header[0])}}, @{'Name' = 'key'; Expression = {$_.$($Header[1])}}, @{'Name' = 'value'; Expression = {$_.$($Header[2])}} ) ) } | ConvertTo-Json -Compress } elseif ($JsonString) { $Json = $JsonString | ConvertFrom-Json | ConvertTo-Json -Compress } else { Write-Error 'Input data not found'; break } if(!$Json){ Write-Error 'Can not convert InputData to Json string'; break } if($OnlyPreview){ $Json | ConvertFrom-Json | ConvertTo-Json; break } try { [byte[]]$Header = @([System.Text.Encoding]::ASCII.GetBytes('ZBXD')) + [byte]1 [byte[]]$Length = @([System.BitConverter]::GetBytes($([long]$Json.Length))) [byte[]]$Data = @([System.Text.Encoding]::ASCII.GetBytes($Json)) $All = $Header + $Length + $Data } catch { Write-Error 'Can not convert Json string to byte'; break } try { $Socket = New-Object System.Net.Sockets.Socket ([System.Net.Sockets.AddressFamily]::InterNetwork, [System.Net.Sockets.SocketType]::Stream, [System.Net.Sockets.ProtocolType]::Tcp) $Socket.Connect($Server,$Port) $Socket.Send($All) | Out-Null [byte[]]$Buffer = New-Object System.Byte[] 1000 [int]$ReceivedLength = $Socket.Receive($Buffer) $Socket.Close() } catch { Write-Error 'TCP-level Error connecting, sending or receiving'; break } $Received = [System.Text.Encoding]::ASCII.GetString(@($Buffer[13 .. ($ReceivedLength - 1)])) try{ $Received | ConvertFrom-Json } catch { Write-Warning 'It is not possible to convert the output to a Json string, maybe the server has rejected invalid data' $Received } } Import-Module OperationsManager $AlertsJson = New-Object System.Collections.Generic.List[System.Object] [string]$Severity_raw = [string]$Priority_raw = try { $alerts = Get-SCOMAlert -Severity 2 | Select-Object Id, Name, Severity, Priority, MonitoringObjectPath, Description, TimeRaised, ResolutionState | ? {$_.ResolutionState -ne 255} | Sort-Object TimeRaised -Descending if (-Not ($alerts -eq $null)){ foreach ($alert in $alerts) { if ($alert.Severity -eq 0) { $Severity_raw = 'Informational'; } elseif ($alert.Severity -eq 1) { $Severity_raw = 'Warning'; } elseif ($alert.Severity -eq 2) { $Severity_raw = 'Critical'; } if ($alert.Priority -eq 0) { $Priority_raw = 'Low'; } elseif ($alert.Priority -eq 1) { $Priority_raw = 'Medium'; } elseif ($alert.Priority -eq 2) { $Priority_raw = 'High'; } if ($alert.ResolutionState -eq 0) { $ResolutionState_raw = 'Nueva Alerta'; } elseif ($alert.ResolutionState -eq 255) { $ResolutionState_raw = 'Cerrada'; } elseif ($alert.ResolutionState -eq 249) { $ResolutionState_raw = 'ACK - Se esta trabajando en ella'; } elseif ($alert.ResolutionState -eq 248) { $ResolutionState_raw = 'ACK - Asignado a ingeniería'; } elseif ($alert.ResolutionState -eq 247) { $ResolutionState_raw = 'ACK - En espera de evidencia'; } elseif ($alert.ResolutionState -eq 254) { $ResolutionState_raw = 'ACK - Resuelto'; } elseif ($alert.ResolutionState -eq 250) { $ResolutionState_raw = 'ACK - Programado'; } $AlertsJson.Add(@{"id"=$alert.Id;"device"=$alert.MonitoringObjectPath;"name"=$alert.Name;"severity"=$alert.Severity;"severity_raw"=$Severity_raw;"priority"=$alert.Priority;"priority_raw"=$Priority_raw;"description"=$alert.Description;"resolutionstate"=$alert.ResolutionState;"resolutionstate_raw"=$ResolutionState_raw;}); } } ZabbixTrapper(ConvertTo-Json -InputObject $AlertsJson -Compress); } catch { Write-Error 'Error al enviar los datos'; break }