Cómo monitorizar los recursos básicos: espacio usado en datastores, número de máquinas virtuales, número de alarmas, número de máquinas virtuales sin las VMware Tools instaladas, uso de CPU, uso de RAM, etc, en un servidor hipervisor de virtualización VMware ESXi 6.7 o en un clúster VMware vCenter. Para obtener los datos usaremos VMware PowerCLI y como sistema de monitorización usaremos Pandora FMS 7.0.
- Requisitos para monitorizar servidor host VMware ESXi con PowerCLI.
- Disponer de uno o varios hipervisores VMware ESXi o también disponer de un clúster VMware vCenter Server.
- Equipo con Windows 10, 11 o Windows Server 2016, 2019, 2022 con las PowerCLI.
- Usuario con permisos de lectura en los host VMware ESXi y en el vCenter Server.
- Servidor con Pandora FMS Server.
- Datos de ejemplo que se usarán en el entorno de pruebas.
- Instalar agente de Pandora FMS en equipo Windows.
- Crear script PowerCLI para obtener datos del host ESXi o de todos los hosts ESXi de un VMware vCenter Server.
- Agregar módulos en agentes de Pandora FMS para que obtengan los datos del VMware vCenter Server y hosts ESXi.
- Visualizar los datos obtenidos en Pandora FMS Server.
Requisitos para monitorizar servidor host VMware ESXi con PowerCLI
La monitorización la realizaremos desde un equipo con sistema operativo Windows 10, Windows 11 o bien Windows Server 2016, 2019 o 2022. A continuación detallamos los requisitos para monitorizar uno o varios hosts ESXi y un vCenter Server.
Disponer de uno o varios hipervisores VMware ESXi o también disponer de un clúster VMware vCenter Server
Necesitaremos, como es evidente, uno o varios host ESXi o bien, un clúster vCenter Server. En el siguiente artículo explicamos cómo montar un clúster vCenter Server desde cero:
Se puede dar el caso de tener únicamente un host ESXi o bien de tener varios pero no en clúster.
En este artículo explicaremos cómo monitorizar ambos casos: vCenter Server y host ESXi.
Equipo con Windows 10, 11 o Windows Server 2016, 2019, 2022 con las PowerCLI
Si disponemos de un clúster VMware vCenter Server sobre Windows Server, podríamos usar este mismo servidor para la monitorización. En cambio, si disponemos de un vCenter Server sobre Linux, seguiremos los pasos de este tutorial para usar cualquier equipo Windows de la red (que tenga acceso al vCenter Server) para monitorizarlo «en remoto».
A su vez, si únicamente queremos monitorizar un host ESXi (o varios sin clúster), el proceso será el mismo que para un vCenter Server, solo variará el script a ejecutar. Todo esto lo explicamos más adelante.
En dicho equipo Windows necesitaremos instalar las VMware PowerCLI. En el siguiente artículo explicamos cómo instalarlas y cómo acceder a un entorno de virtualización VMware vCenter Server (mismo método para acceder a un único host ESXi):
Usuario con permisos de lectura en los host VMware ESXi y en el vCenter Server
Necesitaremos disponer también de un usuario y contraseña de acceso a los hosts ESXi (o al clúster vCenter Server). Utilizaremos este usuario al llamar a los scripts que realizarán la conexión y obtendrán la información.
Para cada host ESXi, tanto si tenemos vCenter Server como si no, podremos crear el usuario como indicamos en el siguiente artículo:
En principio, este usuario, no necesita permisos especiales, únicamente permisos de solo lectura:

En el caso de un vCenter Server, crearemos el usuario para la monitorización con Pandora FMS, desde «Administración» – Single Sign On» – «Usuarios y grupos»:

Estableceremos el permiso de «Solo lectura» para este usuario, para todo el Datacenter, pulsando con el botón derecho sobre el «Datacenter» y eligiendo «Agregar permiso…»:

Elegiremos el usuario «pandora» creado anteriormente, y en Función, elegiremos «Solo lectura». Marcaremos el check «Propagar a objetos secundarios»:

De esta forma, tendremos un usuario en el vCenter Server con permisos para leer los datos que necesitaremos más adelante (datastores, máquinas virtuales, CPU, RAM, etc.).
Servidor con Pandora FMS Server
Dispondremos de un servidor con Pandora FMS Server. En el siguiente artículo explicamos cómo montar un servidor de monitorización con Pandora FMS:
Datos de ejemplo que se usarán en el entorno de pruebas
Para este ejemplo, dispondremos de los siguientes equipos:
- Un equipo cliente con Windows 10 y las PowerCLI instaladas, con visibilidad de la red del vCenter y los host ESXi.
- Un servidor con Pandora FMS Server, con IP 192.168.1.200.
- Un servidor hipervisor ESXi con IP 192.168.1.10.
- Un segundo servidor hipervisor ESXi con IP 192.168.1.11.
- Un VMware vCenter Server, clúster formado por los dos servidores anteriores, con IP 192.168.1.45.
Instalar agente de Pandora FMS en equipo Windows
En el equipo que usemos para obtener los datos del VMware vCenter o del host ESXi, en el que hayamos instalado las PowerCLI, instalaremos también el agente de Pandora FMS. Es bastante sencillo, descargaremos la última versión para Windows de la web oficial de Pandora FMS, a la fecha de este artículo, el fichero Pandora FMS Windows Agent v7.0NG.772.1_x86_64.exe:

Seguiremos los pasos del asistente de instalación de Pandora FMS Agent:

Indicaremos la dirección IP del servidor con Pandora FMS Server (podemos modificarla tras la instalación, en el fichero pandora_agent.conf):

No marcaremos la opción «Habilitar configuración remota». Esta opción está solo disponible para Pandora FMS Enterprise:

Desmarcaremos la opción «Ejecutar Pandora FMS Agent 7.0NG.772.1», dado que, de momento, no ejecutaremos el agente (hasta haber configurado todos los módulos, como explicaremos en los siguientes puntos del artículo).

Crear script PowerCLI para obtener datos del host ESXi o de todos los hosts ESXi de un VMware vCenter Server
A continuación, mostramos el contenido de los dos ficheros de scripts .ps (PowerShell de VMware), que usaremos para obtener los datos del ESXi o del vCenter Server (de todos sus ESXi). Estos scripts mostrarán una salida por pantalla con el formato correcto para envío al servidor de Pandora FMS de cada módulo (Carga_CPU, Memoria_RAM_Usada, Espacio_Usado_DS_XXXX, Numero_Alarmas, Numero_MV_VMwareTools_OLD, Numero_Alarmas_vCenter, etc.). En realidad, se puede obtener casi cualquier dato que se quiera monitorizar.
En primer lugar, en la carpeta del agente de Pandora FMS (instalado en el punto anterior), crearemos un fichero con el nombre datos_host.ps1, este fichero será el encargado de obtener los datos a monitorizar de un host ESXi concreto. Tendrá el siguiente contenido:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
param([string]$ip, [string]$user, [string]$password) Add-PSSnapin VMware.VimAutomation.Core $certificado = Set-PowerCLIConfiguration -InvalidCertificateAction "Ignore" -Confirm:$false $conexion = Connect-VIServer -server $ip -user $user -password $password $datosHostESX = Get-VMHost $estadisticasCPURAM = "cpu.usage.average","mem.usage.average" $estadisticas = Get-Stat -Entity $datosHostESX -Realtime -Stat $estadisticasCPURAM -MaxSamples 1 $estadisticas | Group-Object -Property Entity | %{ $hostESX = "" | Select HostName, VMName, CPUAvg $hostESX.HostName = $_.name $cpu = $_.Group | where {$_.MetricId -eq "cpu.usage.average"} | Measure-Object -Property value -Average $memoria = $_.Group | where {$_.MetricId -eq "mem.usage.average"} | Select -ExpandProperty Value $hostESX.CPUAvg = [int]$cpu.Average $hostname = $hostESX.HostName } # Memoria RAM ocupada y % carga CPU echo "<module>" echo " <name><![CDATA[Carga_CPU]]></name>" echo " <description><![CDATA[% carga de CPU ESXi]]></description>" echo (" <data><![CDATA[" + $cpu.Average + "]]></data>") echo "</module>" echo "<module>" echo " <name><![CDATA[Memoria_RAM_Usada]]></name>" echo " <description><![CDATA[% memoria RAM usada ESXi]]></description>" echo (" <data><![CDATA[" + $memoria + "]]></data>") echo "</module>" # Calculo porcentaje de espacio ocupado en Datastore function calcularPorcentaje { param([parameter(Mandatory = $true)] [int]$InputNum1, [parameter(Mandatory = $true)] [int]$InputNum2) $ocupado = $InputNum2 - $InputNum1 $ocupado / $InputNum2 * 100 } # Obtener datastores del host ESX y su espacio ocupado $datastores = Get-Datastore -Refresh -ErrorAction:SilentlyContinue -WarningAction:SilentlyContinue | Sort Name ForEach ($datastore in $datastores) { if (($datastore.Name -match "Shared") -or ($datastore.Name -match "")) { #if ($datastore.CapacityMB -match "0") #problemas al obtener espacio ocupado #{ # $porcentajeOcupado = "Antención: problemas al obtener espacio ocupado" #} #else #{ $porcentajeOcupado = calcularPorcentaje $datastore.FreeSpaceMB $datastore.CapacityMB $porcentajeOcupado = "{0:N2}" -f $porcentajeOcupado $datastore | Add-Member -type NoteProperty -name PercentFree -value $porcentajeOcupado #} } echo "<module>" echo (" <name><![CDATA[Espacio_Usado_DS_" + $datastore + "]]></name>") echo (" <description><![CDATA[% uso espacio datastore " + $datastore + "]]></description>") echo (" <data><![CDATA[" + $porcentajeOcupado + "]]></data>") echo (" <min_warning>75</min_warning>") echo (" <max_warning>90</max_warning>") echo (" <min_critical>91</min_critical>") echo (" <max_critical>100</max_critical>") echo "</module>" } # Numero de maquinas virtuales $mv = Get-VM echo "<module>" echo (" <name><![CDATA[Numero_MV]]></name>") echo " <description><![CDATA[Numero de maquinas virtuales]]></description>" echo (" <data><![CDATA[" + $mv.Count + "]]></data>") echo "</module>" # Maquinas virtuales con VMware Tools obsoletas $mvToolsObsoletas = Get-VM | where{$_.Guest.ExtensionData.ToolsStatus -eq 'toolsOld'} echo "<module>" echo " <name><![CDATA[Numero_MV_VMwareTools_OLD]]></name>" echo " <description><![CDATA[Numero MV VMwrare Tools obsoletas]]></description>" echo (" <data><![CDATA[" + $mvToolsObsoletas.Count + "]]></data>") echo "</module>" # Maquinas virtuales con VMware Tools no instaladas $mvToolsNoInstaladas = Get-VM | where{$_.Powerstate -eq "PoweredOn" -and $_.Guest.ExtensionData.ToolsStatus -eq 'toolsNotInstalled'} echo "<module>" echo " <name><![CDATA[Numero_MV_VMwareTools_No_Instaladas]]></name>" echo " <description><![CDATA[Numero MV VMwrare Tools no instaladas]]></description>" echo (" <data><![CDATA[" + $mvToolsNoInstaladas.Count + "]]></data>") echo "</module>" # Alarmas en el vCenter $descripcion = "Alarmas lanzadas en ESX" $numAlarmas = 0 $carpetasVCenter = Get-Folder # Obtenemos los contenedores de objetos del vCenter # Recorremos cada carpeta y cada alarma del vCenter foreach ($alarmaLanzada in $carpetasVCenter.ExtensionData.TriggeredAlarmState) { $definicionAlarma = Get-View -Id $alarmaLanzada.Alarm # Obtenemos información de la alarma $entidadObjeto = Get-View $alarmaLanzada.Entity $entidadObjetoTipo = $entidadObjeto.GetType().Name $descripcionAlarma += " [Alerta][" + $entidadObjetoTipo + "]" + $definicionAlarma.Info.Name $numAlarmas = $numAlarmas + 1 } if ($numAlarmas -gt 0) { $descripcion = $descripcionAlarma } echo "<module>" echo " <name><![CDATA[Numero_Alarmas]]></name>" echo (" <description><![CDATA[" + $descripcion + "]]></description>") echo (" <data><![CDATA[" + $numAlarmas + "]]></data>") echo "</module>" |
En cambio, si tenemos un VMware vCenter Server (con un clúster de hosts ESXi), crearemos un segundo fichero, también en la carpeta del agente de Pandora FMS, con el nombre datos_vcenter_ds.ps1, encargado de obtener los datos del vCenter Server (datastores, número de máquinas con VMware Tools obsoletas, memoria RAM total usada de todos los hipervisores del clúster, uso de CPU global, número de alarmas lanzadas en el vCenter, número de máquinas virtuales sin las VMware Tools instaladas, etc. El contenido de este fichero será:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
param([string]$ip, [string]$user, [string]$password) Add-PSSnapin VMware.VimAutomation.Core Set-PowerCLIConfiguration -InvalidCertificateAction "Ignore" -Confirm:$false connect-viserver -server $ip -user $user -password $password ######### CPU y RAM ######### $entity = Get-VMHost $counter = "cpu.usage.average","mem.usage.average" $stats = Get-Stat -Entity $entity -Realtime -Stat $counter -MaxSamples 1 $stats | Group-Object -Property Entity | %{ $hoststat = "" | Select HostName, VMName, CPUAvg $hoststat.HostName = $_.name $cpu = $_.Group | where {$_.MetricId -eq "cpu.usage.average"} | Measure-Object -Property value -Average $memory = $_.Group | where {$_.MetricId -eq "mem.usage.average"} | Select -ExpandProperty Value $hoststat.CPUAvg = [int]$cpu.Average $hostname = $hoststat.HostName } echo "<module>" echo " <name><![CDATA[Uso_CPU]]></name>" echo " <description><![CDATA[% uso CPU]]></description>" echo (" <data><![CDATA[" + $cpu.Average + "]]></data>") echo (" <unit>%</unit>") echo (" <min_warning>60</min_warning>") echo (" <max_warning>80</max_warning>") echo (" <min_critical>81</min_critical>") echo (" <max_critical>100</max_critical>") echo "</module>" echo "<module>" echo " <name><![CDATA[Memoria_RAM_Usada]]></name>" echo " <description><![CDATA[% uso memoria RAM]]></description>" echo (" <data><![CDATA[" + $memory + "]]></data>") echo (" <unit>%</unit>") echo (" <min_warning>60</min_warning>") echo (" <max_warning>80</max_warning>") echo (" <min_critical>81</min_critical>") echo (" <max_critical>100</max_critical>") echo "</module>" ######### ESPACIO DATASTORES ######### function CalcPercent { param( [parameter(Mandatory = $true)] [int]$InputNum1, [parameter(Mandatory = $true)] [int]$InputNum2) $ocupado = $InputNum2 - $InputNum1 $ocupado / $InputNum2*100 } $datastores = Get-Datastore -Refresh -ErrorAction:SilentlyContinue -WarningAction:SilentlyContinue | Sort Name ForEach ($ds in $datastores) { if (($ds.Name -match "Shared") -or ($ds.Name -match "")) { $PercentOcu = CalcPercent $ds.FreeSpaceMB $ds.CapacityMB $PercentOcu = "{0:N2}" -f $PercentOcu $ds | Add-Member -type NoteProperty -name PercentFree -value $PercentOcu } echo "<module>" echo (" <name><![CDATA[Espacio_Usado_DS_" + $ds.Name + "]]></name>") echo (" <description><![CDATA[% uso espacio datastore " + $ds.Name + "]]></description>") echo (" <data><![CDATA[" + $PercentOcu + "]]></data>") echo (" <unit>%</unit>") echo (" <min_warning>75</min_warning>") echo (" <max_warning>90</max_warning>") echo (" <min_critical>91</min_critical>") echo (" <max_critical>100</max_critical>") echo "</module>" #echo $ds.CapacityMB >> $salida #echo $ds.FreeSpaceMB >> $salida } # Numero de maquinas virtuales $mv = Get-VM echo "<module>" echo (" <name><![CDATA[Numero_MV]]></name>") echo " <description><![CDATA[Numero de maquinas virtuales]]></description>" echo (" <data><![CDATA[" + $mv.Count + "]]></data>") echo "</module>" # Maquinas virtuales con VMware Tools obsoletas $mvToolsObsoletas = Get-VM | where{$_.Guest.ExtensionData.ToolsStatus -eq 'toolsOld'} echo "<module>" echo " <name><![CDATA[Numero_MV_VMwareTools_OLD]]></name>" echo " <description><![CDATA[Numero MV VMwrare Tools obsoletas]]></description>" echo (" <data><![CDATA[" + $mvToolsObsoletas.Count + "]]></data>") echo "</module>" # Maquinas virtuales con VMware Tools no instaladas $mvToolsNoInstaladas = Get-VM | where{$_.Powerstate -eq "PoweredOn" -and $_.Guest.ExtensionData.ToolsStatus -eq 'toolsNotInstalled'} echo "<module>" echo " <name><![CDATA[Numero_MV_VMwareTools_No_Instaladas]]></name>" echo " <description><![CDATA[Numero MV VMwrare Tools no instaladas]]></description>" echo (" <data><![CDATA[" + $mvToolsNoInstaladas.Count + "]]></data>") echo "</module>" # Alarmas en el vCenter $descripcion = "Alarmas lanzadas en vCenter" $numAlarmas = 0 $carpetasVCenter = Get-Folder # Obtenemos los contenedores de objetos del vCenter # Recorremos cada carpeta y cada alarma del vCenter foreach ($alarmaLanzada in $carpetasVCenter.ExtensionData.TriggeredAlarmState) { $definicionAlarma = Get-View -Id $alarmaLanzada.Alarm # Obtenemos información de la alarma $entidadObjeto = Get-View $alarmaLanzada.Entity $entidadObjetoTipo = $entidadObjeto.GetType().Name if (($definicionAlarma.Info.Name -ne "VMware critical notification") -and ($entidadObjetoTipo -ne "Folder")) { $descripcionAlarma += " [Alerta][" + $entidadObjetoTipo + "]" + $definicionAlarma.Info.Name $numAlarmas = $numAlarmas + 1 } } if ($numAlarmas -gt 0) { $descripcion = $descripcionAlarma } echo "<module>" echo " <name><![CDATA[Numero_Alarmas_vCenter]]></name>" echo (" <description><![CDATA[" + $descripcion + "]]></description>") echo (" <data><![CDATA[" + $numAlarmas + "]]></data>") echo "</module>" |
La carpeta del agente de Pandora FMS, habitualmente, suele estar en:
C:\Program Files\pandora_agent
Es muy recomendable realizar una prueba de ejecución de los dos scripts anteriores, antes de agregar el módulo al agente de Pandora FMS (como explicaremos a continuación). Para probar estos scripts, abriremos una ventana de MS-DOS (Símbolo de sistema) y ejecutaremos:
1 |
powershell -ExecutionPolicy RemoteSigned -File "C:\Program Files\pandora_agent\datos_vcenter_ds.ps1" 192.168.1.45 pandora@vsphere.local Contraseña_Usuario_Pandora |
El comando anterior, ejecutará el script datos_vcenter.ps1, y obtendrá los datos del clúster vCenter Server y de cada uno de sus hipervisores ESXi y datastores, con IP 192.168.1.45, obteniendo (con el formato correcto para envío a Pandora FMS de cada módulo):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
<module> <name><![CDATA[Uso_CPU]]></name> <description><![CDATA[% uso CPU]]></description> <data><![CDATA[29.666]]></data> <unit>%</unit> <min_warning>60</min_warning> <max_warning>80</max_warning> <min_critical>81</min_critical> <max_critical>100</max_critical> </module> <module> <name><![CDATA[Memoria_RAM_Usada]]></name> <description><![CDATA[% uso memoria RAM]]></description> <data><![CDATA[63.09]]></data> <unit>%</unit> <min_warning>60</min_warning> <max_warning>80</max_warning> <min_critical>81</min_critical> <max_critical>100</max_critical> </module> <module> <name><![CDATA[Espacio_Usado_DS_datastore1]]></name> <description><![CDATA[% uso espacio datastore datastore1]]></description> <data><![CDATA[1,62]]></data> <unit>%</unit> <min_warning>75</min_warning> <max_warning>90</max_warning> <min_critical>91</min_critical> <max_critical>100</max_critical> </module> <module> <name><![CDATA[Espacio_Usado_DS_local.ESX1]]></name> <description><![CDATA[% uso espacio datastore local.ESX1]]></description> <data><![CDATA[1,62]]></data> <unit>%</unit> <min_warning>75</min_warning> <max_warning>90</max_warning> <min_critical>91</min_critical> <max_critical>100</max_critical> </module> <module> <name><![CDATA[Espacio_Usado_DS_local.ESX2]]></name> <description><![CDATA[% uso espacio datastore local.ESX2]]></description> <data><![CDATA[1,62]]></data> <unit>%</unit> <min_warning>75</min_warning> <max_warning>90</max_warning> <min_critical>91</min_critical> <max_critical>100</max_critical> </module> <module> <name><![CDATA[Espacio_Usado_DS_nt_fac_1]]></name> <description><![CDATA[% uso espacio datastore nt_fac_1]]></description> <data><![CDATA[31,73]]></data> <unit>%</unit> <min_warning>75</min_warning> <max_warning>90</max_warning> <min_critical>91</min_critical> <max_critical>100</max_critical> </module> <module> <name><![CDATA[Espacio_Usado_DS_nt_fac_2]]></name> <description><![CDATA[% uso espacio datastore nt_fac_2]]></description> <data><![CDATA[75,64]]></data> <unit>%</unit> <min_warning>75</min_warning> <max_warning>90</max_warning> <min_critical>91</min_critical> <max_critical>100</max_critical> </module> <module> <name><![CDATA[Numero_MV]]></name> <description><![CDATA[Numero de maquinas virtuales]]></description> <data><![CDATA[23]]></data> </module> <module> <name><![CDATA[Numero_MV_VMwareTools_OLD]]></name> <description><![CDATA[Numero MV VMwrare Tools obsoletas]]></description> <data><![CDATA[2]]></data> </module> <module> <name><![CDATA[Numero_MV_VMwareTools_No_Instaladas]]></name> <description><![CDATA[Numero MV VMwrare Tools no instaladas]]></description> <data><![CDATA[1]]></data> </module> <module> <name><![CDATA[Numero_Alarmas_vCenter]]></name> <description><![CDATA[ [Alerta][VirtualMachine]Virtual machine memory usage]></description> <data><![CDATA[1]]></data> </module> |
Como podemos observar en la salida anterior, el script habrá obtenido la información del vCenter y de todos sus datastores e hipervisores ESXi, y la devuelve con el formato tentacle de Pandora FMS, preparado para enviarlo a través del agente al servidor Pandora FMS.
Probaremos también el fichero de script PowerShell para extraer datos de cada host ESXi de forma individual:
1 |
powershell -ExecutionPolicy RemoteSigned -File "C:\Program Files\pandora_agent\datos_host.ps1" 192.168.1.10 pandora contraseña_usuario_pandora |
El comando anterior, ejecutará el script datos_host.ps1, y obtendrá los datos del servidor hipervisor ESXi con IP 192.168.1.10, obteniendo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
<module> <name><![CDATA[Carga_CPU]]></name> <description><![CDATA[% carga de CPU ESXi]]></description> <data><![CDATA[8.2912]]></data> </module> <module> <name><![CDATA[Memoria_RAM_Usada]]></name> <description><![CDATA[% memoria RAM usada ESXi]]></description> <data><![CDATA[73.54]]></data> </module> <module> <name><![CDATA[Espacio_Usado_DS_local.ESX1]]></name> <description><![CDATA[% uso espacio datastore local.ESX1]]></description> <data><![CDATA[1,62]]></data> <min_warning>75</min_warning> <max_warning>90</max_warning> <min_critical>91</min_critical> <max_critical>100</max_critical> </module> <module> <name><![CDATA[Espacio_Usado_DS_datastore1]]></name> <description><![CDATA[% uso espacio datastore SSD_01]]></description> <data><![CDATA[51,58]]></data> <min_warning>75</min_warning> <max_warning>90</max_warning> <min_critical>91</min_critical> <max_critical>100</max_critical> </module> <module> <name><![CDATA[Espacio_Usado_DS_SSD_02]]></name> <description><![CDATA[% uso espacio datastore datastore1]]></description> <data><![CDATA[50,36]]></data> <min_warning>75</min_warning> <max_warning>90</max_warning> <min_critical>91</min_critical> <max_critical>100</max_critical> </module> <module> <name><![CDATA[Numero_MV]]></name> <description><![CDATA[Numero de maquinas virtuales]]></description> <data><![CDATA[3]]></data> </module> <module> <name><![CDATA[Numero_MV_VMwareTools_OLD]]></name> <description><![CDATA[Numero MV VMwrare Tools obsoletas]]></description> <data><![CDATA[0]]></data> </module> <module> <name><![CDATA[Numero_MV_VMwareTools_No_Instaladas]]></name> <description><![CDATA[Numero MV VMwrare Tools no instaladas]]></description> <data><![CDATA[0]]></data> </module> <module> <name><![CDATA[Numero_Alarmas]]></name> <description><![CDATA[Alarmas lanzadas en ESX]]></description> <data><![CDATA[0]]></data> </module> |
Repetiremos el proceso para el host ESX2, con IP 192.168.1.11. En cada caso, probaremos el script para todos los ESXi, verificando que se ejecuta correctamente.
Cuando consigamos que los dos scripts conecten con el vCenter y los ESXi y obtengan los datos, estaremos preparados para enviarlos al sevidor de Pandora FMS, como indicamos a continuación.
Agregar módulos en agentes de Pandora FMS para que obtengan los datos del VMware vCenter Server y hosts ESXi
Accederemos a la carpeta de instalación del angente de Pandora FMS, habitualmente en:
C:\Program Files\pandora_agent
En la carpeta anterior, tendremos los dos ficheros datos_host.ps1 y datos_vcenter_ds.ps1, creados anteriormente.
Editaremos el fichero pandora_agent.conf, con el Bloc de notas o cualquier otro editor de ficheros de texto plano (sin formato). Añadiremos una línea de broker_agent por cada ESX que tengamos y una más para el vCenter, por ejemplo:
1 |
broker_agent ESX1<br>broker_agent ESX2<br>broker_agent vcenter |
Con el parámetro broker_agent, se creará un agente (un dispositivo o servidor) en Pandora FMS Server, como si se tratara de un dispositivo más. Se creará desde el equipo con el agente donde hayamos añadido los broker_agent:

Guardaremos los cambios en el fichero anterior y cerraremos su edición.
Crearemos un fichero .conf por cada broker_agent creado, respetando el nombre. Para nuestro caso: ESX1.conf, ESX2.conf y vcenter.conf. Añadiremos estos ficheros en la misma carpeta que el resto de ficheros.
Empezaremos creando el fichero vcenter.conf, para que cree el agente «vcenter» con los datos que indicamos a continuación (contenido del fichero vcenter.conf):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
server_ip 192.168.1.200 server_path /var/spool/pandora/data_in temporal "C:\Program Files\pandora_agent\temp" group Servers agent_name vcenter address 192.168.1.45 interval 300 server_port 41121 debug 0 remote_config 0 xml_buffer 0 module_plugin powershell -ExecutionPolicy RemoteSigned -File "C:\Program Files\pandora_agent\datos_vcenter_ds.ps1" 192.168.1.45 pandora contraseña |

La línea final del fichero será la encargada de ejecutar el script PowerCLI, conectar con el vCenter y obtener sus datos.
De la misma forma, crearemos el fichero ESX1.conf, con el siguiente contenido:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
server_ip 192.168.1.200 server_path /var/spool/pandora/data_in temporal "C:\Program Files\pandora_agent\temp" group Servers agent_name ESX1 address 192.168.1.10 interval 300 server_port 41121 debug 0 remote_config 0 xml_buffer 0 module_plugin powershell -ExecutionPolicy RemoteSigned -File "C:\Program Files\pandora_agent\datos_host.ps1" 192.168.1.10 pandora contraseña |
Con la última línea del fichero anterior, Pandora Agent ejecutará el script cada 5 minutos (o el intervalo que se haya indicado), obtendrá los datos del host ESXi y los enviará a Pandora Server.
Repetiremos el proceso y crearemos el fichero ESX2.conf, con el mismo contenido, cambiando el nombre del agente por ESX2, la IP del host y la IP del script por la del ESX en cuestión (192.168.1.11):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
server_ip 192.168.1.200 server_path /var/spool/pandora/data_in temporal "C:\Program Files\pandora_agent\temp" group Servers agent_name ESX2 address 192.168.1.11 interval 300 server_port 41121 debug 0 remote_config 0 xml_buffer 0 module_plugin powershell -ExecutionPolicy RemoteSigned -File "C:\Program Files\pandora_agent\datos_host.ps1" 192.168.1.11 pandora contraseña |
En este ejemplo, obtenemos los datos de un clúster vCenter Server y también obtenemos la información de dos hosts hipervisores ESXi, con IP 192.168.1.10 y 192.168.1.11. Si tenemos más host ESXi, crearemos un fichero .conf para cada uno de ellos.
Para aplicar los cambios, reiniciaremos el servicio de Pandora Agent. Podemos hacerlo ejecutando el script restar_pandora_agent.bat ubicado en la carpeta «scripsts» del agente de Pandora:

Visualizar los datos obtenidos en Pandora FMS Server
Transcurridos unos minutos, podremos consultar los datos obtenidos por el agente sobre el vCenter y los host de virtualización ESXi. Nos aparecerán, como agentes, todos los ESXi (en nuestro caso ESX1, ESX2) y el vCenter (vcenter). Y tendremos todos los módulos (sensores, sondas, monitores) sobre cada uno de ellos.
Por ejemplo, para el agente ESX1:

Tendremos los módulos:
- Carga_CPU: porcentaje de carga actual de CPU de este ESXi.
- Espacio_Usado_DS_nombre_datastore: porcentaje de espacio usado en cada datastore (tanto locales como en SAN). Se creará un módulo por cada datastore del ESXi.
- Memoria_RAM_Usada: porcentaje de memoria RAM usada de este ESXi.
- Numero_Alarmas: número de alarmas lanzadas en el ESXi.
- Numero_MV: número de máquinas virtuales que sirve el ESXi.
- Numero_MV_VMwareTools_No_Instaladas: número de máquinas virtuales con sin las VMware Tools instaladas.
- Numero_MV_VMwareTools_OLD: número de máquinas virtuales con una versión obsoleta de las VMware Tools.

Para el VCenter Server, se obtendrán los siguientes módulos (sensores, sondas, monitores):
- Carga_CPU: porcentaje de carga actual de CPU de todo el Datacenter.
- Espacio_Usado_DS_nombre_datastore: porcentaje de espacio usado en cada datastore (tanto locales de cada ESXi como en SAN). Se creará un módulo por cada datastore del vCenter.
- Memoria_RAM_Usada: porcentaje de memoria RAM usada de todo el Datacenter.
- Numero_Alarmas: número de alarmas lanzadas en el vCenter.
- Numero_MV: número de máquinas virtuales totales de todo el Datacenter.
- Numero_MV_VMwareTools_No_Instaladas: número de máquinas virtuales con sin las VMware Tools instaladas en el vCenter.
- Numero_MV_VMwareTools_OLD: número de máquinas virtuales con una versión obsoleta de las VMware Tools en el vCenter.

En algunos de los módulos (sensores, sondas), mediante los scripts, se han añadido umbrales para que pasen a estado de alerta o crítico. Por supuesto, se pueden modificar estos umbrales y añadir otros a los que no los tienen. Ajustaremos los umbrales a las necesidades de la organización.

Una vez configurados los umbrales, podremos agregar las alarmas que consideremos. Por ejemplo, que nos avise con un correo electrónico si el consumo de CPU de un host es superior al 90%.
