Minero WSFC
Esta es una pequeña ayuda de script de Powershell para recuperar los valores de las métricas del clúster de conmutación por error de Windows Server (WSFC).
Versión real 1.2.3
Probado en:
- Modo de producción: Windows Server 2008 R2 SP1, Powershell 2;
- Modo de no producción: Windows Server 2012 R2, Powershell 4;
- Modo de no producción: Windows Server 2016, Powershell 5.1.
Objetos soportados:
- Clúster : Clúster de conmutación por error de Windows Server (WSFC);
- ClusterNode : nodo WSFC;
- ClusterNetwork - Red WSFC;
- ClusterNetworkInterface : adaptador de red del clúster de conmutación por error;
- ClusterAvailableDisk : recursos de disco disponibles (no utilizados) de WSFC. Ese disco puede admitir la agrupación en clústeres de conmutación por error y es visible para todos los nodos, pero aún no forma parte del conjunto de discos agrupados.
- ClusterResourceDHCPService : recurso WSFC 'Servicio DHCP';
- ClusterResourceGenericService : recurso WSFC 'Servicio genérico';
- ClusterResourceVirtualMachine : recurso WSFC 'Máquina virtual';
- ClusterResourceVirtualMachineConfiguration : recurso de WSFC 'Configuración de máquina virtual';
- ClusterResourceIPAddress : recurso WSFC 'Dirección IP';
- ClusterResourceNetworkName : recurso WSFC 'Nombre de red';
- ClusterResourcePhysicalDisk : recurso WSFC 'Disco físico';
- ClusterResourceSQLServer : recurso WSFC 'SQL Server';
- ClusterResourceSQLServerAgent : recurso de WSFC 'Agente SQL Server';
- ClusterSharedVolume : volúmenes compartidos de WSFC;
- ClusterQuorum : quórum del clúster WSFC.
Claves virtuales para objetos 'Cluster', 'ClusterNode':
- VirtualMachine.Online : recurso del clúster de conmutación por error 'Máquina virtual' en estado En línea;
- VirtualMachine.Offline - ... en estado sin conexión;
- VirtualMachine.OnlinePending - ... en estado OnlinePending;
- VirtualMachine.OfflinePending - ... en estado OfflinePending;
- VirtualMachine.SummaryInformation : conjunto de métricas relacionadas con el recurso del clúster 'Máquina virtual' y obtenidas de la clase MsVM_virtualSystemManagementService con consulta WMI
- GenericService.Online : recurso del clúster de conmutación por error 'Servicio genérico' en estado En línea;
- GenericService.Offline - ... en estado sin conexión;
Claves virtuales para todos los objetos que contienen la tabla ClusterParameter (consulte el cndlet Get-ClusterParameter)
- ClusterParameter.<metric> : métrica del objeto de la tabla ClusterParameter.
Comportamiento
- Descubrimiento : cree el LLD JSON de Zabbix;
- Obtener : obtiene métrica del elemento de la colección;
- Suma : métricas de suma de elementos de la colección;
- Contar : contar los elementos de la colección.
Cómo usar de forma independiente
# Get Cluster name
powershell -NoProfile -ExecutionPolicy "RemoteSigned" -File "wsfc.ps1" -Action "Get" -ObjectType "Cluster" -Key "Name" -Id "f4479814-35d4-41c5-babd-c0697769ac31"
# Get PercentFree metric value from SharedVolumeInfo.Partition table for volume with ID=b8b67dbf-e66f-443e-926e-be1d1621ece5
..."wsfc.ps1" -Action "Get" -ObjectType "ClusterSharedVolume" -Key "SharedVolumeInfo.Partition.PercentFree" -Id "b8b67dbf-e66f-443e-926e-be1d1621ece5"
# Get total number of vCPUs assigned to all clustered VMs which hosted on Node with ID=00000000-0000-0000-0000-000000000001
... "wsfc.ps1" -Action "Sum" -ObjectType "ClusterNode" -Key "SummaryInformation.VirtualMachine.NumberOfProcessors" -Id "00000000-0000-0000-0000-000000000001"
# Get total number of Memory assigned (dynamically for WS2008 R2 SP1+) to all clustered VMs which placed in Cluster with ID=f4479814-35d4-41c5-babd-c0697769ac31
... "wsfc.ps1" -Action "Sum" -ObjectType "Cluster" -Key "SummaryInformation.VirtualMachine.NumberOfProcessors" -Id "00000000-0000-0000-0000-000000000001"
# Get formatted list of 'ClusterSharedVolume' object metrics accessed with property 'SharedVolumeInfo.Partition'. Verbose messages is enabled.
... "wsfc.ps1" -Action "Get" -ObjectType "ClusterSharedVolume" -Key "SharedVolumeInfo.Partition" -ID "8e8fb118-2601-4a06-ab9a-f0a1260bd247" -DefaultConsoleWidth -Verbose
Cómo utilizar con Zabbix
Recomiendo comenzar a usar WSFC Miner como servicio no agrupado, ajustarlo con Zabbix y luego agruparlo.
####Usar como servicio no agrupado
- Incluya zbx_wsfc.conf en la configuración del Agente Zabbix en cualquier nodo del clúster;
- Coloque wsfc.ps1 en el directorio C:zabbixscripts . Si desea colocar el script en otro directorio, debe editar zbx_wsfc.conf para configurar correctamente la ruta del script;
- Establezca el tiempo de espera del agente/servidor de Zabbix en más de 3 segundos (puede ser 10 o 30);
- Si necesita utilizar .SummaryInformation. métricas: debe cambiar la cuenta del servicio Zabbix de "Sistema local" a cualquier cuenta que tenga derechos de administrador local para usar los cmdlets de FailoverClusters y tenga derechos para realizar consultas WMI a todos los nodos del clúster a través de la red. De lo contrario, obtendrá un error de secuencia de comandos;
- Importar plantilla al servidor Zabbix;
- Piénselo dos veces antes de vincular la plantilla al alojamiento y deshabilitar las reglas de descubrimiento que no sean tan importantes (pueden ser "Máquinas virtuales", "Servicios genéricos", "Redes de clúster"). De lo contrario, puede obtener más del 9000% de carga de CPU con llamadas de PowerShell;
- Plantilla de oración y enlace;
- Disfrutar.
Usar como servicio genérico de conmutación por error
- Si desea utilizar el agente Zabbix local (no agrupado) y de conmutación por error (agrupado) al mismo tiempo, debe cambiar la directiva ListenPort del agente Zabbix en la configuración de "agente agrupado" de la configuración predeterminada a otra no utilizada (puede ser 16092 aproximadamente). De lo contrario, en algún momento puede obtener el error 1067 cuando se migra el Agente Zabbix en clúster. Esto se debe a que la primera instancia iniciada del Agente se vincula a todas las direcciones de host disponibles y la segunda instancia simplemente sale cuando se inicia;
- Cree una copia de la configuración del Agente Zabbix (llámela zabbix_agentd_WSFC-A.conf , por ejemplo) en un nodo del clúster;
- Incluya zbx_wsfc.conf en la configuración del Agente Zabbix, si no lo ha hecho antes;
- Elija una nueva dirección IP y nombre de dominio para usar con el Servicio Genérico. No debería ser la IP ni el nombre de host del clúster. Cambie la directiva ListenIP y Hostname a nuevos valores en zabbix_agentd_WSFC-A.conf ;
- Coloque wsfc.ps1 y zabbix_agentd_WSFC-A.conf en cada nodo del clúster (o intente utilizar Windows Shares);
- En cada nodo, desinstale el servicio del Agente Zabbix local e instálelo nuevamente con la clave -m (zabbix_agentd.exe -c... -x, zabbix_agentd.exe -c... -d, zabbix_agentd.exe -c... -i -m, zabbix_agentd.exe -c ... -s -m);
- En cada nodo, instale el segundo servicio del Agente Zabbix con zabbix_agentd_WSFC-A.conf y la clave -m (zabbix_agentd.exe -c... zabbix_agentd_WSFC-A.conf -i -m). No inicie ese servicio manualmente: WSFC lo iniciará automáticamente en el nodo Propietario del servicio;
- Si necesita utilizar .SummaryInformation. métricas: debe cambiar la cuenta del servicio Zabbix de "Sistema local" a cualquier cuenta que tenga derechos de administrador local para usar los cmdlets de FailoverClusters y tenga derechos para realizar consultas WMI a todos los nodos del clúster a través de la red. De lo contrario, obtendrá un error de secuencia de comandos;
- Cree un nuevo "Servicio genérico" para su clúster con Failover Cluster MMC, asígnele una dirección IP y un nombre de host, que se definió en el paso 4;
- Importar plantilla al servidor Zabbix;
- Piénselo dos veces antes de vincular la plantilla al alojamiento y deshabilitar las reglas de descubrimiento que no sean tan importantes (pueden ser "Máquinas virtuales", "Servicios genéricos", "Redes de clúster"). De lo contrario, puede obtener más del 9000% de carga de CPU con llamadas de PowerShell;
- En el servidor Zabbix, cree un nuevo host con la dirección IP y el nombre de host del paso 4;
- Plantilla de oración y enlace;
- Inicie el servicio genérico, que creó en el paso 9 con Failover Cluster MMC;
- Disfrutar. Tal vez.
Nota No intente importar la plantilla Zabbix v2.4 a Zabbix pre v2.4. Debe editar el archivo .xml y realizar algunos cambios en Discovery_rule: área de etiquetas de filtrado y cambiar # a <> en las expresiones de activación. Intentaré hacer una plantilla para el antiguo Zabbix.
Nota En la plantilla se utiliza el tipo de artículo Agente Zabbix (activo) . Debe configurar la directiva ServerActive de Zabbix Agent o cambiar el tipo de elemento a Zabbix Agent . En este caso, se debe aumentar el número de encuestadores de Zabbix Server, porque cualquier ejecución del script de PowerShell congelará el hilo del encuestador a 2 segundos (en mi hardware).
Consejos
- Para ver las claves, ejecute el script sin la opción -Key : ... "wsfc.ps1" -Action "Get" -Object " Object " [-Key "{SummaryInformation.VirtualMachine | ClusterParameter}"]. Tenga en cuenta que no todos los objetos tienen métricas relacionadas en las tablas ClusterParameter y SummaryInformation (intente utilizar estas claves con el objeto 'ClusterResourceVirtualMachine' para realizar pruebas). Puede consultar MSDN para obtener información;)
- Lea la descripción de las reglas y elementos de descubrimiento para encontrar información útil (enlaces a páginas de MSDN que describen métricas);
- Si utiliza símbolos que no están en inglés (por ejemplo, cirílico ruso) en los nombres de las máquinas virtuales y desea obtener UTF-8 correcto en el lado del servidor Zabbix, debe agregar el parámetro -consoleCP your_native_codepage a la línea de comando. Por ejemplo, para convertir desde la página de códigos cirílico ruso (CP866), utilice ... "wsfc.ps1"... -consoleCP CP866
- Para depurar en modo independiente, utilice la opción -defaultConsoleWidth para dejar el ancho predeterminado de la consola mientras ejecuta el script y -Verbose para obtener información de procesamiento adicional;
- Si obtiene "Debería ser JSON" de Zabbix, intente aumentar el valor numérico en la variable constante CONSOLE_WIDTH dentro de wsfc.ps1 . Powershell usa el ancho de la consola para formatear las líneas JSON de salida y puede romperlas.
- Con el descubrimiento de ClusterNetworkInterface, puede usar {#NETWORKADDRESS} para filtrar redes no enrutables y excluir direcciones IP a las que no se puede hacer ping para evitar cambiar elementos relacionados a un estado no compatible.
Tenga cuidado con las solicitudes frecuentes de scripts de PowerShell que consumen CPU y aumentan la carga. Para evitarlo, no utilice intervalos de actualización pequeños con los elementos de datos de Zabbix y desactive los no utilizados.