WSFC-Bergmann
Dies ist eine kleine Powershell-Skripthilfe zum Abrufen von Metrikwerten vom Windows Server Failover Cluster (WSFC).
Aktuelle Version 1.2.3
Getestet am:
- Produktionsmodus: Windows Server 2008 R2 SP1, Powershell 2;
- Nicht-Produktionsmodus: Windows Server 2012 R2, Powershell 4;
- Nicht-Produktionsmodus: Windows Server 2016, Powershell 5.1.
Unterstützte Objekte:
- Cluster – Windows Server-Failovercluster (WSFC);
- ClusterNode – WSFC-Knoten;
- ClusterNetwork – WSFC-Netzwerk;
- ClusterNetworkInterface – Netzwerkadapter des Failover-Clusters;
- ClusterAvailableDisk – WSFC Verfügbare (nicht verwendete) Festplattenressourcen. Diese Festplatte kann Failover-Clustering unterstützen und ist für alle Knoten sichtbar, gehört aber noch nicht zum Satz geclusterter Festplatten.;
- ClusterResourceDHCPService – WSFC-Ressource „DHCP Service“;
- ClusterResourceGenericService – WSFC-Ressource „Generic Service“;
- ClusterResourceVirtualMachine – WSFC-Ressource „Virtuelle Maschine“;
- ClusterResourceVirtualMachineConfiguration – WSFC-Ressource „Virtual Machine Configuration“;
- ClusterResourceIPAddress – WSFC-Ressource „IP-Adresse“;
- ClusterResourceNetworkName – WSFC-Ressource „Netzwerkname“;
- ClusterResourcePhysicalDisk – WSFC-Ressource „Physical Disk“;
- ClusterResourceSQLServer – WSFC-Ressource „SQL Server“;
- ClusterResourceSQLServerAgent – WSFC-Ressource „SQL Server Agent“;
- ClusterSharedVolume – Gemeinsame WSFC-Volumes;
- ClusterQuorum – Quorum des WSFC-Clusters.
Virtuelle Schlüssel für „Cluster“, „ClusterNode“-Objekte:
- VirtualMachine.Online – Ressource „Virtual Machine“ des Failover-Clusters im Online-Status;
- VirtualMachine.Offline – ... im Offline-Zustand;
- VirtualMachine.OnlinePending – ... im Status „OnlinePending“;
- VirtualMachine.OfflinePending – ... im Status „OfflinePending“;
- VirtualMachine.SummaryInformation – Satz von Metriken im Zusammenhang mit der Cluster-Ressource „Virtuelle Maschine“, die mit einer WMI-Abfrage aus der Klasse „MsVM_virtualSystemManagementService“ abgerufen werden
- GenericService.Online – Ressource „Generic Service“ des Failover-Clusters im Online-Status;
- GenericService.Offline – ... im Offline-Zustand;
Virtuelle Schlüssel für alle Objekte, die in der ClusterParameter-Tabelle (siehe Get-ClusterParameter-Cndlet) enthalten sind
- ClusterParameter.<Metrik> – Metrik des Objekts aus der ClusterParameter-Tabelle.
Aktionen
- Entdeckung – Machen Sie Zabbix's LLD JSON;
- Get – Metrik vom Sammlungselement abrufen;
- Summe – Summenmetriken der Sammlungselemente;
- Zählen – Sammlungselemente zählen.
So verwenden Sie Standalone
# 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
Verwendung mit Zabbix
Ich empfehle, WSFC Miner zunächst als nicht geclusterten Dienst zu verwenden, ihn mit Zabbix abzustimmen und ihn dann geclustert zu machen.
####Verwendung als nicht geclusterter Dienst
- Fügen Sie zbx_wsfc.conf zur Zabbix Agent-Konfiguration auf jedem Clusterknoten hinzu;
- Legen Sie wsfc.ps1 im Verzeichnis C:zabbixscripts ab. Wenn Sie das Skript in einem anderen Verzeichnis ablegen möchten, müssen Sie zbx_wsfc.conf bearbeiten, um den Pfad des Skripts richtig festzulegen.
- Stellen Sie das Timeout des Zabbix-Agenten/Servers auf mehr als 3 Sekunden ein (möglicherweise 10 oder 30).
- Wenn Sie .SummaryInformation verwenden müssen. Metriken – Sie müssen das Zabbix-Dienstkonto von „Lokales System“ in ein beliebiges Konto ändern, das über lokale Administratorrechte zur Verwendung von FailoverClusters-Cmdlets und Rechte zum Durchführen von WMI-Abfragen an alle Clusterknoten über das Netzwerk verfügt. Andernfalls erhalten Sie einen Skriptfehler.
- Vorlage auf Zabbix Server importieren;
- Denken Sie zweimal darüber nach, bevor Sie die Vorlage mit dem Host verknüpfen, und deaktivieren Sie Erkennungsregeln, die nicht so wichtig sind (z. B. „Virtuelle Maschinen“, „Allgemeine Dienste“, „Cluster-Netzwerke“). Andernfalls können Sie mit PowerShell-Aufrufen eine CPU-Auslastung von über 9000 % erreichen.
- Beten und Link-Vorlage;
- Genießen.
Verwendung als generischer Failover-Dienst
- Wenn Sie den lokalen (nicht geclusterten) und Failover-(geclusterten) Zabbix-Agenten gleichzeitig verwenden möchten, müssen Sie die Anweisung „ListenPort“ des Zabbix-Agenten in der Konfiguration des „geclusterten Agenten“ von der Standardeinstellung auf eine andere nicht verwendete (möglicherweise 16092 oder so) ändern. Andernfalls kann es bei der Migration des geclusterten Zabbix-Agenten zu Fehler 1067 kommen. Dies liegt daran, dass sich die erste gestartete Instanz des Agenten an alle verfügbaren Hostadressen bindet und die zweite Instanz beim Start einfach beendet wird.
- Erstellen Sie eine Kopie der Zabbix-Agent-Konfiguration (nennen Sie sie beispielsweise zabbix_agentd_WSFC-A.conf ) auf dem einen Clusterknoten.
- Fügen Sie zbx_wsfc.conf zur Zabbix Agent-Konfiguration hinzu, falls Sie dies noch nicht getan haben;
- Wählen Sie eine neue IP-Adresse und einen neuen Domänennamen für die Verwendung mit dem generischen Dienst. Es sollte nicht die IP-Adresse und der Hostname des Clusters sein. Ändern Sie die ListenIP- und Hostname-Anweisung in neue Werte in zabbix_agentd_WSFC-A.conf .
- Legen Sie wsfc.ps1 und zabbix_agentd_WSFC-A.conf auf jedem Knoten im Cluster ab (oder versuchen Sie, Windows-Freigaben zu verwenden);
- Deinstallieren Sie auf jedem Knoten den Dienst des lokalen Zabbix-Agenten und installieren Sie ihn erneut mit dem Schlüssel -m (zabbix_agentd.exe -c ... -x, zabbix_agentd.exe -c ... -d, zabbix_agentd.exe -c ... -i -m, zabbix_agentd.exe -c ... -s -m);
- Installieren Sie auf jedem Knoten den Dienst des zweiten Zabbix-Agenten mit zabbix_agentd_WSFC-A.conf und dem Schlüssel -m (zabbix_agentd.exe -c ... zabbix_agentd_WSFC-A.conf -i -m). Starten Sie diesen Dienst nicht manuell – er wird automatisch von WSFC auf dem Besitzerknoten des Dienstes gestartet.
- Wenn Sie .SummaryInformation verwenden müssen. Metriken – Sie müssen das Zabbix-Dienstkonto von „Lokales System“ in ein beliebiges Konto ändern, das über lokale Administratorrechte zur Verwendung von FailoverClusters-Cmdlets und Rechte zum Durchführen von WMI-Abfragen an alle Clusterknoten über das Netzwerk verfügt. Andernfalls erhalten Sie einen Skriptfehler;
- Erstellen Sie mit Failover Cluster MMC einen neuen „Generic Service“ für Ihren Cluster und weisen Sie ihm eine IP-Adresse und einen Hostnamen zu, die in Schritt 4 definiert wurden.
- Vorlage auf Zabbix Server importieren;
- Denken Sie zweimal darüber nach, bevor Sie die Vorlage mit dem Host verknüpfen, und deaktivieren Sie Erkennungsregeln, die nicht so wichtig sind (z. B. „Virtuelle Maschinen“, „Allgemeine Dienste“, „Cluster-Netzwerke“). Andernfalls können Sie mit PowerShell-Aufrufen eine CPU-Auslastung von über 9000 % erreichen;
- Erstellen Sie auf dem Zabbix-Server einen neuen Host mit IP-Adresse und Hostnamen aus Schritt 4;
- Beten und Link-Vorlage;
- Starten Sie den generischen Dienst, den Sie in Schritt 9 erstellt haben, mit Failover Cluster MMC;
- Genießen. Vielleicht.
Hinweis: Versuchen Sie nicht, die Zabbix v2.4-Vorlage in Zabbix vor v2.4 zu importieren. Sie müssen die .xml-Datei bearbeiten und einige Änderungen im Bereich „discovery_rule – Filter-Tags“ vornehmen und in Trigger-Ausdrücken „#“ in „ <>“ ändern. Ich werde versuchen, eine Vorlage für das alte Zabbix zu erstellen.
Hinweis In der Vorlage wird der Artikeltyp Zabbix Agent (aktiv) verwendet. Sie müssen die ServerActive- Direktive des Zabbix-Agenten einrichten oder den Elementtyp in Zabbix-Agent ändern. In diesem Fall muss die Anzahl der Poller des Zabbix-Servers erhöht werden, da jede Ausführung des PowerShell-Skripts den Poller-Thread auf 2 Sekunden einfriert (auf meiner Hardware).
Hinweise
- Um Schlüssel anzuzeigen, führen Sie das Skript ohne die Option -Key aus: ... "wsfc.ps1" -Action "Get" -Object " Object " [-Key "{SummaryInformation.VirtualMachine | ClusterParameter}"]. Beachten Sie, dass nicht alle Objekte verwandte Metriken in den Tabellen „ClusterParameter“ und „SummaryInformation“ haben (versuchen Sie, diese Schlüssel zum Testen mit dem Objekt „ClusterResourceVirtualMachine“ zu verwenden). Weitere Informationen finden Sie bei MSDN;)
- Bitte lesen Sie die Beschreibung der Discovery-Regeln und -Elemente, um hilfreiche Informationen zu finden (Links zu MSDN-Seiten, die Metriken beschreiben).
- Wenn Sie nicht-englische (z. B. russisch-kyrillische) Symbole in VM-Namen verwenden und auf der Zabbix-Serverseite korrektes UTF-8 erhalten möchten, müssen Sie der Befehlszeile den Parameter -consoleCP your_native_codepage hinzufügen. Um beispielsweise von der russisch-kyrillischen Codepage (CP866) zu konvertieren, verwenden Sie ... "wsfc.ps1" ... -consoleCP CP866
- Verwenden Sie zum Debuggen im Standalone-Modus die Option -defaultConsoleWidth, um die Standardbreite der Konsole beim Ausführen des Skripts beizubehalten, und -Verbose , um zusätzliche Verarbeitungsinformationen abzurufen.
- Wenn Sie Zabbixs „Sollte JSON sein“ erhalten, versuchen Sie, den Zahlenwert in der Konstantenvariablen CONSOLE_WIDTH in wsfc.ps1 zu erhöhen. Powershell verwendet die Konsolenbreite, um ausgegebene JSON-Zeilen zu formatieren, und kann diese beschädigen.
- Mit der ClusterNetworkInterface-Erkennung können Sie {#NETWORKADDRESS} verwenden, um nicht routbare Netzwerke zu filtern, um nicht pingbare IP-Adressen auszuschließen, um zu vermeiden, dass verwandte Elemente in den nicht unterstützten Status versetzt werden.
Beachten Sie, dass häufige Anfragen an PowerShell-Skripts die CPU beanspruchen und die Last erhöhen. Um dies zu vermeiden, verwenden Sie keine kleinen Aktualisierungsintervalle für die Datenelemente von Zabbix und deaktivieren Sie ungenutzte Elemente.