Pandora FMS community forums

Full Version: Pandora e Hyper-V
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hola, he instalado una maquina virtual en Hyper-V a partir del CD de instalacion basado en SuSE, y la verdad el producto me ha dejado maravillado.

Actualmente estoy monitorizando varios servidores Hyper-V tanto 2.0 como 3.0.
Entre dos servidores Windows 2012 estoy monitorizando la replicacion de diferentes maquinas virtuales con el siguiente script:

' WMIEstatHyperVReplica.vbs
' Check health of Hyper-V virtual machines with replica enabled.

Option Explicit
On Error Resume Next

' Variables
Dim strComputer, objWMIService, objItem, colItems, argc, argv, i

' Parse command line parameters
'argc = Wscript.Arguments.Count
'Set argv = CreateObject("Scripting.Dictionary")
'For i = 0 To argc - 1
'    argv.Add Wscript.Arguments(i), i
'Next

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\virtualization\v2")
Set colItems = objWMIService.ExecQuery( "SELECT * FROM Msvm_ComputerSystem",,48)
For Each objItem in colItems
If objItem.ReplicationMode = 1 Then
Wscript.StdOut.WriteLine "<module>"
Wscript.StdOut.WriteLine "    <name><![CDATA[" & objItem.ElementName & "]]></name>"
Wscript.StdOut.WriteLine "    <description><![CDATA[HyperV machine " & objItem.ElementName & " replication health]]></description>"
Wscript.StdOut.WriteLine "    <data><![CDATA[" & objItem.ReplicationHealth & "]]></data>"
Wscript.StdOut.WriteLine "</module>"

        Wscript.StdOut.flush
End If
Next


Estableciendo los min/max del Warning/Critical segun el valor de objItem.ReplicationHealth podemos disparar las alertas cuando una maquina deja de replicarse.

El resto de las maquinas virtuales que no se estan replicando, las monitorizo para saber si estan encendidas o apagadas con el siguiente script:

' WMIEstatHyperVM.vbs
' Check if Hyper-V virtual machines is running.

Option Explicit
On Error Resume Next

' Variables
Dim strComputer, objWMIService, objItem, colItems, argc, argv, i

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\virtualization\v2")
Set colItems = objWMIService.ExecQuery( "SELECT * FROM Msvm_ComputerSystem",,48)
For Each objItem in colItems
If objItem.ReplicationMode = 0 Then
Wscript.StdOut.WriteLine "<module>"
Wscript.StdOut.WriteLine "    <name><![CDATA[" & objItem.ElementName & "]]></name>"
Wscript.StdOut.WriteLine "    <description><![CDATA[HyperV machine " & objItem.ElementName & " status]]></description>"
Wscript.StdOut.WriteLine "    <data><![CDATA[" & objItem.EnabledState & "]]></data>"

'Wscript.StdOut.WriteLine "    <type><![CDATA[generic_data_string]]></type>"
'If objItem.EnabledState = 2 Then
' Wscript.StdOut.WriteLine "    <data><![CDATA[Enabled]]></data>"
'Else If objItem.EnabledState = 3 Then
' Wscript.StdOut.WriteLine "    <data><![CDATA[Disabled]]></data>"
'Else
' Wscript.StdOut.WriteLine "    <data><![CDATA[Other]]></data>"
'End if

Wscript.StdOut.WriteLine "</module>"

        Wscript.StdOut.flush
End If
Next

El asunto es que no encuentro la forma de pasar como dato un texto, en vez de un valor, ya que en la documentacion no hay informacion al respecto, pues me gustaria saber de manera legible (como aparece en la parte del script comentada) el estado de cada maquina.

Alguna idea?
Gracias
Hola jfcarpi,

Antes de nada muy buen aporte tus scripts!

Respecto al segundo script, puedes enviar datos de tipo cadena de texto si pones como tipo de módulo <type> generic_data_string </type>, todos los tipos de módulos están aquí:

http://www.openideas.info/wiki/index.php....3Ctipo.3E

Si no te funciona prueba a quitar los tags <![CDATA[ a ver si es ese el problema.

Con esta modificación el módulo recibirá datos de tipo cadena de texto. Si el módulo existe previamente a la modificación del script deberás borrarlo ya que no se acepta que nos módulos cambien su tipo de datos.

Un saludo, espero que te ayude.

Dario.
Hola darode,
Como puedes ver en el script tenia lineas al respecto comentadas, ya que lo habia probado sin exito.
He repetido las pruebas con:

If objItem.ReplicationMode = 0 Then
Wscript.StdOut.WriteLine "<module>"
Wscript.StdOut.WriteLine "    <name><![CDATA[" & objItem.ElementName & "]]></name>"
Wscript.StdOut.WriteLine "    <description><![CDATA[HyperV machine " & objItem.ElementName & " status]]></description>"

'Wscript.StdOut.WriteLine "    <data><![CDATA[" & objItem.EnabledState & "]]></data>"

Wscript.StdOut.WriteLine "    <type><![CDATA[generic_data_string]]></type>"

If objItem.EnabledState = 2 Then
Wscript.StdOut.WriteLine "    <data><![CDATA[Enabled]]></data>"
Else If objItem.EnabledState = 3 Then
Wscript.StdOut.WriteLine "    <data><![CDATA[Disabled]]></data>"
Else
Wscript.StdOut.WriteLine "    <data><!CDATA[[Other]]></data>"
End if

Wscript.StdOut.WriteLine "</module>"

        Wscript.StdOut.flush
End If

tambien lo he hecho quitando CDATA de las lineas donde paso la cadena, incluso acabo de probar a modificar el fichero pandora_agent.conf y poner:

# Modul control maquines HyperV
module_begin
module_type generic_data_string
module_plugin cscript.exe //B "%ProgramFiles%\Pandora_Agent\util\WMIEstatHyperVM.vbs"
module_end

en vez de solo la linea
module_plugin cscript.exe //B "%ProgramFiles%\Pandora_Agent\util\WMIEstatHyperVM.vbs"

y he borrado los modulos desde la consola, pues no funciona en ninguno de los casos y en todos ellos en el archivo pandora_agent.log aparece

2013-03-14 15:26:15 Pandora agent stopped
2013-03-14 15:26:16 Pandora agent started
2013-03-14 15:26:22 Pandora_Module_Exec: plugin did not executed well (retcode: 1)

Un saludo
Bueno, pues al final solucionado, el script no se ejecutaba correctamente y de ahi venia el no poder pasar la cadena.
Quedaria de la siguiente manera:

En Windows Server 2012, para que diga el estado de las maquinas que no tienen habilitada la replicacion:

' WMIEstatHyperVM.vbs
' Check if Hyper-V virtual machines is running.

Option Explicit
On Error Resume Next

' Variables
Dim strComputer, objWMIService, objItem, colItems, argc, argv, i

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

For Each objItem in colItems
If objItem.ReplicationMode = 0 Then
Wscript.Stdout.WriteLine "<module>"
Wscript.Stdout.WriteLine "    <name><![CDATA[" & objItem.ElementName & "]]></name>"
Wscript.Stdout.WriteLine "    <description><![CDATA[HyperV machine " & objItem.ElementName & " status]]></description>"
Wscript.Stdout.WriteLine "    <type><![CDATA[generic_data_string]]></type>"

Select Case objItem.EnabledState
Case 2 : Wscript.Stdout.WriteLine "    <data><![CDATA[Enabled]]></data>"
Case 3 : Wscript.Stdout.WriteLine "    <data><![CDATA[Disabled]]></data>"
Case Else
Wscript.Stdout.WriteLine "    <data><![CDATA[Other]]></data>"
End Select

Wscript.Stdout.WriteLine "</module>"
End If
Next

En Windows Server 2008 R2 o Hyper-V Server 2008 R2, que no hay replicacion, para saber el estado de las maquinas:

' WMIEstatHyperVM.vbs
' Check if Hyper-V virtual machines is running.

Option Explicit
On Error Resume Next

' Variables
Dim strComputer, objWMIService, objItem, colItems, argc, argv, i

strComputer = "."

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

For Each objItem in colItems

Wscript.Stdout.WriteLine "<module>"
Wscript.Stdout.WriteLine "    <name><![CDATA[" & objItem.ElementName & "]]></name>"
Wscript.Stdout.WriteLine "    <description><![CDATA[HyperV machine " & objItem.ElementName & " status]]></description>"

Wscript.Stdout.WriteLine "    <type><![CDATA[generic_data_string]]></type>"

Select Case objItem.EnabledState
Case 2 : Wscript.Stdout.WriteLine "    <data><![CDATA[Enabled]]></data>"
Case 3 : Wscript.Stdout.WriteLine "    <data><![CDATA[Disabled]]></data>"
Case Else
Wscript.Stdout.WriteLine "    <data><![CDATA[Other]]></data>"
End Select

Wscript.Stdout.WriteLine "</module>"
Next

Probado en ambos.
Un saludo