Mineur WSFC
Il s'agit d'un petit script Powershell qui permet de récupérer les valeurs des métriques à partir du cluster de basculement Windows Server (WSFC).
Version actuelle 1.2.3
Testé sur :
- Mode production : Windows Server 2008 R2 SP1, Powershell 2 ;
- Mode hors production : Windows Server 2012 R2, Powershell 4 ;
- Mode hors production : Windows Server 2016, Powershell 5.1.
Objets pris en charge :
- Cluster – Cluster de basculement Windows Server (WSFC) ;
- ClusterNode - nœud WSFC ;
- ClusterNetwork - Réseau WSFC ;
- ClusterNetworkInterface - adaptateur réseau du cluster de basculement ;
- ClusterAvailableDisk - Ressources de disque WSFC disponibles (inutilisées). Ce disque peut prendre en charge le clustering de basculement et est visible par tous les nœuds, mais ne fait pas encore partie de l'ensemble des disques en cluster.
- ClusterResourceDHCPService -ressource WSFC « Service DHCP » ;
- ClusterResourceGenericService -ressource WSFC « Service générique » ;
- ClusterResourceVirtualMachine -ressource WSFC « Machine virtuelle » ;
- ClusterResourceVirtualMachineConfiguration -ressource WSFC « Configuration de la machine virtuelle » ;
- ClusterResourceIPAddress - Ressource WSFC « Adresse IP » ;
- ClusterResourceNetworkName -ressource WSFC « Nom du réseau » ;
- ClusterResourcePhysicalDisk -ressource WSFC « Disque physique » ;
- ClusterResourceSQLServer -ressource WSFC « SQL Server » ;
- ClusterResourceSQLServerAgent -ressource WSFC « Agent SQL Server » ;
- ClusterSharedVolume - Volumes partagés WSFC ;
- ClusterQuorum : quorum du cluster WSFC.
Clés virtuelles pour les objets 'Cluster', 'ClusterNode' :
- VirtualMachine.Online - ressource « Machine virtuelle » du cluster de basculement à l'état En ligne ;
- VirtualMachine.Offline - ... en état hors ligne ;
- VirtualMachine.OnlinePending - ... dans l'état OnlinePending ;
- VirtualMachine.OfflinePending - ... dans l'état OfflinePending ;
- VirtualMachine.SummaryInformation - ensemble de métriques liées à la ressource du cluster « Machine virtuelle » et extraites de la classe MsVM_virtualSystemManagementService avec requête WMI
- GenericService.Online : ressource « Service générique » du cluster de basculement à l'état En ligne ;
- GenericService.Offline - ... en état hors ligne ;
Clés virtuelles pour tous les objets contenus dans la table ClusterParameter (voir cndlet Get-ClusterParameter)
- ClusterParameter.<metric> - métrique de l'objet de la table ClusterParameter.
Actes
- Découverte - Créez le LLD JSON de Zabbix ;
- Obtenir : Obtenir la métrique de l'élément de collection ;
- Somme - Somme des métriques des éléments de collection ;
- Compter - Compter les éléments de collection.
Comment utiliser le mode autonome
# 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
Comment utiliser avec Zabbix
Je recommande de commencer à utiliser WSFC Miner en tant que service non clusterisé, de le régler avec Zabbix et de le créer ensuite en cluster.
####Utiliser en tant que service non clusterisé
- Incluez zbx_wsfc.conf à la configuration de l'agent Zabbix sur n'importe quel nœud de cluster ;
- Placez wsfc.ps1 dans le répertoire C:zabbixscripts . Si vous souhaitez placer le script dans un autre répertoire, vous devez modifier zbx_wsfc.conf pour définir correctement le chemin du script ;
- Réglez le délai d'expiration de l'agent/serveur Zabbix sur plus de 3 secondes (peut être 10 ou 30) ;
- Si vous devez utiliser .SummaryInformation. métriques - vous devez remplacer le compte du service Zabbix de "Système local" par n'importe quel compte disposant des droits d'administrateur local pour utiliser les applets de commande FailoverClusters et des droits nécessaires pour effectuer des requêtes WMI sur tous les nœuds du cluster sur le réseau. Sinon, vous obtiendrez une erreur de script ;
- Importer le modèle sur le serveur Zabbix ;
- Réfléchissez à deux fois avant de lier un modèle pour héberger et désactiver des règles de découverte qui ne sont pas si importantes (peut-être des « Machines virtuelles », des « Services génériques », des « Réseaux de cluster »). Sinon, vous pouvez obtenir plus de 9 000 % de charge CPU avec les appels PowerShell ;
- Modèle de prière et de lien ;
- Apprécier.
Utiliser comme service générique de basculement
- Si vous souhaitez utiliser l'agent Zabbix local (non clusterisé) et de basculement (clustérisé) en même temps, vous devez modifier la directive ListenPort de l'agent Zabbix dans la configuration "agent clusterisé" de la valeur par défaut à une autre inutilisée (peut être 16092 environ). Sinon, vous pouvez parfois obtenir l'erreur 1067 lorsque l'agent Zabbix en cluster migrera. Cela est dû à la première instance démarrée de la liaison de l'agent à toutes les adresses d'hôte disponibles et à la deuxième instance qui se ferme au démarrage ;
- Créez une copie de la configuration de l'agent Zabbix (appelez- la zabbix_agentd_WSFC-A.conf par exemple) sur le nœud du cluster ;
- Incluez zbx_wsfc.conf à la configuration de l'agent Zabbix, si vous ne l'avez pas déjà fait ;
- Choisissez une nouvelle adresse IP et un nouveau nom de domaine à utiliser avec le service générique. Il ne doit pas s'agir de l'adresse IP ni du nom d'hôte du cluster. Remplacez la directive ListenIP & Hostname par de nouvelles valeurs dans zabbix_agentd_WSFC-A.conf ;
- Placez wsfc.ps1 et zabbix_agentd_WSFC-A.conf sur chaque nœud du cluster (ou essayez d'utiliser les partages Windows) ;
- Sur chaque nœud, désinstallez le service de l'agent Zabbix local et réinstallez-le avec la touche -m (zabbix_agentd.exe -c ... -x, zabbix_agentd.exe -c ... -d, zabbix_agentd.exe -c ... -i -m, zabbix_agentd.exe -c ... -s -m);
- Sur chaque nœud, installez le deuxième service du deuxième agent Zabbix avec zabbix_agentd_WSFC-A.conf et la clé -m (zabbix_agentd.exe -c ... zabbix_agentd_WSFC-A.conf -i -m). Ne démarrez pas ce service manuellement - il sera automatiquement démarré par WSFC sur le nœud propriétaire du service ;
- Si vous devez utiliser .SummaryInformation. métriques - vous devez remplacer le compte du service Zabbix de "Système local" par n'importe quel compte disposant des droits d'administrateur local pour utiliser les applets de commande FailoverClusters et des droits nécessaires pour effectuer des requêtes WMI sur tous les nœuds du cluster sur le réseau. Sinon, vous obtiendrez une erreur de script ;
- Créez un nouveau « service générique » pour votre cluster avec le cluster de basculement MMC, attribuez-lui une adresse IP et un nom d'hôte définis à l'étape 4 ;
- Importer le modèle sur le serveur Zabbix ;
- Réfléchissez à deux fois avant de lier un modèle pour héberger et désactiver des règles de découverte qui ne sont pas si importantes (peut-être des « Machines virtuelles », des « Services génériques », des « Réseaux de cluster »). Sinon, vous pouvez obtenir plus de 9 000 % de charge CPU avec les appels PowerShell ;
- Sur le serveur Zabbix, créez un nouvel hôte avec l'adresse IP et le nom d'hôte de l'étape 4 ;
- Modèle de prière et de lien ;
- Démarrez le service générique que vous créez à l'étape 9 avec le cluster de basculement MMC ;
- Apprécier. Peut être.
Remarque N'essayez pas d'importer le modèle Zabbix v2.4 vers Zabbix pré v2.4. Vous devez modifier le fichier .xml et apporter quelques modifications dans la zone des balises de filtrage de Discovery_rule et remplacer # par <> dans les expressions de déclenchement. Je vais essayer de créer un modèle sur l'ancien Zabbix.
Remarque Dans le modèle utilisé, le type d'élément Zabbix Agent (actif) . Vous devez configurer la directive ServerActive de Zabbix Agent ou changer le type d'élément en Zabbix Agent . Dans ce cas, le nombre d'interrogeurs du serveur Zabbix doit être augmenté, car toute exécution de script PowerShell gèlera le thread d'interrogation à 2 secondes (sur mon matériel).
Conseils
- Pour voir les clés, exécutez le script sans l'option -Key : ... "wsfc.ps1" -Action "Get" -Object " Object " [-Key "{SummaryInformation.VirtualMachine | ClusterParameter}"]. Notez que tous les objets n'ont pas de métriques associées dans les tables ClusterParameter et SummaryInformation (essayez d'utiliser ces clés avec l'objet 'ClusterResourceVirtualMachine' pour le test). Vous pouvez vous référer à MSDN pour plus d'informations ;)
- Veuillez lire la description des règles et éléments de découverte pour trouver des informations utiles (liens vers des pages MSDN décrivant les métriques) ;
- Si vous utilisez des symboles non anglais (par exemple cyrillique russe) dans les noms de VM et que vous souhaitez obtenir un UTF-8 correct côté serveur Zabbix, vous devez alors ajouter le paramètre -consoleCP your_native_codepage à la ligne de commande. Par exemple, pour convertir à partir d'une page de codes cyrillique russe (CP866), utilisez ... "wsfc.ps1" ... -consoleCP CP866
- Pour le débogage en mode autonome, utilisez l'option -defaultConsoleWidth pour laisser la largeur par défaut de la console lors de l'exécution du script et -Verbose pour obtenir des informations de traitement supplémentaires ;
- Si vous obtenez le "Devrait être JSON" de Zabbix, essayez d'augmenter la valeur numérique dans la variable constante CONSOLE_WIDTH à l'intérieur de wsfc.ps1 . Powershell utilise la largeur de la console pour formater les lignes JSON de sortie et peut les casser.
- Avec la découverte ClusterNetworkInterface, vous pouvez utiliser {#NETWORKADDRESS} pour filtrer les réseaux non routables afin d'exclure les adresses IP non pingables afin d'éviter de basculer les éléments associés vers un état non pris en charge.
Méfiez-vous des requêtes fréquentes adressées au script PowerShell qui consomment du processeur et augmentent la charge. Pour l'éviter, n'utilisez pas de petits intervalles de mise à jour avec les éléments de données de Zabbix et désactivez ceux qui ne sont pas utilisés.