Pandora FMS community forums
Modulo HyperV - Printable Version

+- Pandora FMS community forums (https://pandorafms.com/community-forums)
+-- Forum: Pandora FMS (https://pandorafms.com/community-forums/forum-3.html)
+--- Forum: Español / Spanish forum (https://pandorafms.com/community-forums/forum-8.html)
+--- Thread: Modulo HyperV (/thread-7018.html)



Modulo HyperV - jfcarpi - 04-17-2013

Hola,

Cuando empece a utilizar pandora hace unos meses hice unos modulos para monitorizar maquinas virtuales en sevidores Hyper-V, ahora los he refundido en uno solo, y antes de subirlos a la libreria quisiera exponer la estrategia y diseño seguidos por si a alguien se le ocurre algo.

He intentado documentar en el modulo la informacion necesaria, pero en cualquier caso esta es:

En la version 3 de HyperV ha aparecido la replicacion de maquinas, por ello determinamos en primer lugar en que version de HyperV estamos, ya que tambien se utiliza un 'Namespace' de WMI diferente, segun la version del sistema operativo.

Si estamos en HyperV 1 o 2 (Win2008,Win2008R2) simplemente veremos el estado de una maquina.
Si estamos en HyperV 3 (Win2012) y una maquina esta replicandose lo que queremos saber es si su estado de replica es normal, para ello nos basta con saber su estado de replica en el host donde se ejecuta y no hace falta ver el estado en el host donde se esta replicando, en el modulo esta comentado y se puede activar si se desea. Si la maquina no tiene replica, pues  monitorizamos su estado.

He intentado poner los valores de cadena para estado Warning/Critical pero al parecer no esta soportado, se tendra que hacer a mano.

Esta probado en 2 Host con Windows Server 2012 Standard, con maquinas replicandose, y otro con HyperV 2008 R2.

Os pego el codigo.
Un saludo.

' MonitorHyperV
' Check Hyper-V version and virtual machines status.
' Controla la version de Hyper-V y el estado de las maquinas virtuales
' Josep A. Ferrando ([email protected]) 2013

Option Explicit
On Error Resume Next

' Variables
Dim strComputer, objWMIService, objItem, colItems
Dim i, HyperV
Dim Language
Dim strEnabled, StrDisabled, strOther
Dim strNormal, strWarning, strCritical
Dim strDescPre1, strDescPos1, strDescPre2, strDescPos2


'Start of module / Inicio del modulo

Language = "I"
Initialize
Monitor

'End of module / Fin del modulo

'Subprograms & Functions / Subprogramas y Funciones

Sub Initialize

' Initialize configuration values / variables
' Inicializar valores / variables de configuracion

strComputer = "." 'Local Computer / Ordenador local

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItemS = objWMIService.ExecQuery("SELECT Caption, Version FROM Win32_OperatingSystem")

'Obtain Operating System Version / Obtener Version Sistema Operativo
'Windows 2008    - HyperV Server 2008    - 6.0.xxxx = HyperV 1.0
'Windows 2008 R2 - HyperV Server 2008 R2 - 6.1.xxxx = HyperV 2.0
'Windows 2012    - HyperV Server 2012    - 6.2.xxxx = HyperV 3.0

For Each objItem in colItems
Select Case Left(objItem.Version , 3)
Case "6.2"
HyperV = 3
case Else
HyperV = 2
End Select
'Debug
'Wscript.Echo "-----------------------------------"
'Wscript.Echo "Op. System    : " & objItem.Caption
'Wscript.Echo "OS Version    : " & objItem.Version
'Wscript.Echo "HyperV Version: " & HyperV
'Wscript.Echo "-----------------------------------"
Next

Select Case Language
Case "I"
strEnabled  = "Enabled"
strDisabled = "Disabled"
strOther    = "Other"
strNormal  = "Normal"
strWarning  = "Warning"
strCritical = "Critical"
strDescPre1 = "HyperV machine "
strDescPos1 = " status"
strDescPre2 = "HyperV machine "
strDescPos2 = " replication health"
Case "E"
strEnabled  = "Encendida"
strDisabled = "Apagada"
strOther    = "Otro"
strNormal  = "Normal"
strWarning  = "Advertencia"
strCritical = "Crítico"
strDescPre1 = "Estado máquina HyperV "
strDescPos1 = ""
strDescPre2 = "Estado replicación máquina HyperV "
strDescPos2 = ""
Case "V"
strEnabled  = "Encesa"
strDisabled = "Apagada"
strOther    = "Altre"
strNormal  = "Normal"
strWarning  = "Advertència"
strCritical = "Crític"
strDescPre1 = "Estat màquina HyperV "
strDescPos1 = ""
strDescPre2 = "Estat replicació màquina HyperV "
strDescPos2 = ""
End Select

End Sub

Sub Monitor

Select Case HyperV
Case 2
' HyperV 1.0/2.0 has no replication , then monitor the state of machines
' HyperV 1.0/2.0 no tiene replicacion, entonces monitorizamos el estado de las maquinas
' EnabledState values / Valores EnabledState  - http://msdn.microsoft.com/en-us/library/hh850116(v=vs.85)
' 0 Unknown
' 1 Other
' 2 Enabled
' 3 Disabled
' 4 Shutting Down
' 5 Not Applicable
' 6 Enabled but Offline
' 7 In test
' 8 Deferred
' 9 Quiesce
'10 Starting

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\virtualization")
Set colItems = objWMIService.ExecQuery( "SELECT * FROM Msvm_ComputerSystem",,48)

For Each objItem in colItems
'Wscript.Echo "- DEBUG ----------------------------------"
'Wscript.Echo "HyperV : " & HyperV & objItem.ElementName
Wscript.Stdout.WriteLine "<module>"
Wscript.Stdout.WriteLine "    <name><![CDATA[" & objItem.ElementName & "]]></name>"
Wscript.Stdout.WriteLine "    <description><![CDATA[" & strDescPre1 & objItem.ElementName & strDescPos1 & "]]></description>"
Wscript.Stdout.WriteLine "    <type><![CDATA[generic_data_string]]></type>"
Select Case objItem.EnabledState
Case 2 : Wscript.Stdout.WriteLine "    <data><![CDATA[" & strEnabled & "]]></data>"
Case 3 : Wscript.Stdout.WriteLine "    <data><![CDATA[" & strDisabled & "]]></data>"
Case Else
Wscript.Stdout.WriteLine "    <data><![CDATA[" & strOther & "]]></data>"
End Select
Wscript.Stdout.WriteLine "</module>"
Next

Case 3
' HyperV 3.0 has replication, then monitor replication status of machines
' that are in these host (Primary) and replicated in other host (Recovery)
' HyperV 3.0 tiene replicacion, entonces monitorizamos el estado de la replicacion de las maquinas
' que estan en este host (Primary) y replicandose en otro host (Recovery)
' If replication is not enabled, then monitor the state of machines
' Si no tienen la replicacion habilitada monitorizamos su estado
' ReplicationMode values / Valores ReplicationMode  - http://msdn.microsoft.com/en-us/library/hh850116(v=vs.85)
' 0 None
' 1 Primary
' 2 Recovery
' 3 Test replication
' ReplicationHealth
' 0 Not applicable
' 1 Ok
' 2 Warning
' 3 Critical

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\virtualization\v2")
Set colItems = objWMIService.ExecQuery( "SELECT * FROM Msvm_ComputerSystem",,48)
For Each objItem in colItems
'Wscript.Echo "- DEBUG ----------------------------------"
'Wscript.Echo "HyperV : " & HyperV & " RMode : " & objItem.ReplicationMode & " " & objItem.ElementName
Select Case objItem.ReplicationMode
Case 1 ' Primary
Wscript.StdOut.WriteLine "<module>"
Wscript.StdOut.WriteLine "    <name><![CDATA[" & objItem.ElementName & "]]></name>"
Wscript.StdOut.WriteLine "    <description><![CDATA[" & strDescPre2 & objItem.ElementName & strDescPos2 & "]]></description>"
Wscript.Stdout.WriteLine "    <type><![CDATA[generic_data_string]]></type>"
Select Case objItem.ReplicationHealth
Case 2 : Wscript.Stdout.WriteLine "    <data><![CDATA[" & strWarning & "]]></data>"
Case 3 : Wscript.Stdout.WriteLine "    <data><![CDATA[" & strCritical & "]]></data>"
Case Else
Wscript.Stdout.WriteLine "    <data><![CDATA[" & strNormal & "]]></data>"
End Select
'Wscript.Stdout.WriteLine "    <str_warning><![CDATA[" & strWarning & "]]></str_warning>"
'Wscript.Stdout.WriteLine "    <str_critical><![CDATA[" & strCritical & "]]></str_critical>"
Wscript.StdOut.WriteLine "</module>"
Case 2 ' Secondary Monitor on Host with Primary
'Wscript.StdOut.WriteLine "<module>"
'Wscript.StdOut.WriteLine "    <name><![CDATA[" & objItem.ElementName & "]]></name>"
'Wscript.StdOut.WriteLine "    <description><![CDATA[" & strDescPre2 & objItem.ElementName & strDescPos2 & "]]></description>"
'Wscript.Stdout.WriteLine "    <type><![CDATA[generic_data_string]]></type>"
'Select Case objItem.ReplicationHealth
' Case 2 : Wscript.Stdout.WriteLine "    <data><![CDATA[" & strWarning & "]]></data>"
' Case 3 : Wscript.Stdout.WriteLine "    <data><![CDATA[" & strCritical & "]]></data>"
' Case Else
' Wscript.Stdout.WriteLine "    <data><![CDATA[" & strNormal & "]]></data>"
'End Select
'Wscript.Stdout.WriteLine "    <str_warning><![CDATA[" & strWarning & "]]></str_warning>"
'Wscript.Stdout.WriteLine "    <str_critical><![CDATA[" & strCritical & "]]></str_critical>"
'Wscript.StdOut.WriteLine "</module>"
Case 0 ' None
Wscript.Stdout.WriteLine "<module>"
Wscript.Stdout.WriteLine "    <name><![CDATA[" & objItem.ElementName & "]]></name>"
Wscript.Stdout.WriteLine "    <description><![CDATA[" & strDescPre1 & objItem.ElementName & strDescPos1 & "]]></description>"
Wscript.Stdout.WriteLine "    <type><![CDATA[generic_data_string]]></type>"
Select Case objItem.EnabledState
Case 2 : Wscript.Stdout.WriteLine "    <data><![CDATA[" & strEnabled & "]]></data>"
Case 3 : Wscript.Stdout.WriteLine "    <data><![CDATA[" & strDisabled & "]]></data>"
Case Else
Wscript.Stdout.WriteLine "    <data><![CDATA[" & strOther & "]]></data>"
End Select
Wscript.Stdout.WriteLine "</module>"
Case 3 ' Testing
Case Else
' Monitor Host
Wscript.Stdout.WriteLine "<module>"
Wscript.Stdout.WriteLine "    <name><![CDATA[" & objItem.ElementName & "]]></name>"
Wscript.Stdout.WriteLine "    <description><![CDATA[" & strDescPre1 & objItem.ElementName & strDescPos1 & "]]></description>"
Wscript.Stdout.WriteLine "    <type><![CDATA[generic_data_string]]></type>"
Select Case objItem.EnabledState
Case 2 : Wscript.Stdout.WriteLine "    <data><![CDATA[" & strEnabled & "]]></data>"
Case 3 : Wscript.Stdout.WriteLine "    <data><![CDATA[" & strDisabled & "]]></data>"
Case Else
Wscript.Stdout.WriteLine "    <data><![CDATA[" & strOther & "]]></data>"
End Select
Wscript.Stdout.WriteLine "</module>"
End Select
Next

Case Else
End Select
End Sub



Re: Modulo HyperV - darode - 04-18-2013

Hola jfcarpi,

A mi me parece que la estrategia es correcta. Por otro lado el tema del soporte para lo valores str_warning y str_critical está soportado en las versiones más nuevas de Pandora.

¿Qué version estás usando para el plugin?

Muy buena contribución!, gracias!

Dario


Re: Modulo HyperV - jfcarpi - 04-18-2013

Hola Dario,

No se exactamente a que version te refieres, en cualquier caso uso:
Pandora FMS v4.0.3 - Build PC130224
Agente Windows 4.0.3(Build 130118)

Un saludo,
Josep