Bei einer Hyper-V Installation unter Windows Server 2022 werden virtuelle Server per Hyper-V Replica von Knoten 1 auf Knoten 2 repliziert, und andere wiederum von Knoten 2 auf Knoten 1. Die eigentliche Replikation an sich läuft recht stabil, allerdings soll trotzdem eine aktive Überwachung stattfinden, um bei einem möglichen Fehler eingreifen zu können. Zu diesem Zweck habe ich ein kleines Skript per PowerShell geschrieben, welche per Checkmk aufgerufen und ausgeführt wird. Das Resultat des Skripts wird dann in der zentralen Monitoring-Oberfläche angezeigt. Sollte es mal zu Fehlern kommen, werden wir zusätzlich per Email benachrichtigt.
Das Skript selbst muss auf den beiden Systemen in den Standard-Einstellungen unter C:\ProgramData\checkmk\agent\local abgelegt werden.
Nachdem das Skript dort vorhanden ist, kann im Checkmk eine Abfrage nach neuen Plugins und lokalen Checks gemacht werden. Danach werden die VMs sichtbar, die eine aktive Replikation haben inkl. dem Status. Der oder die Checks können hinzugefügt werden, und werden ab jetzt dann aktiv überwacht.
Wird der Dienst hinzugefügt, ist er ab jetzt unterhalb des Hosts sichtbar.
Überprüfung per PowerShell Skript
# 17.08.2023
# Jan Kappen - Building Networks - j.kappen@building-networks.de
# Vorlage von Constantin.Lotz@ruv-bkk.de
# Check Hyper-V Replica
#
# Dieser Check prueft den Status aller Hyper-V Replicas
#
# Version 0.2
#
# Hyper-V Replica Check
$ReplicaSummary = Get-VMReplication | Select VMName, Health
foreach ($ReplicaState in $ReplicaSummary) {
$ReplicaStateName = $ReplicaState.VMName -replace '"', "" -replace ' ', "_"
if ($ReplicaState.Health -eq "Normal") {
# All good
$status = "0"
$statusText = "OK " + $ReplicaStateName + " is in good state. ReplicationStatus: " + $ReplicaState.Health
} else {
$status = "1"
$statusText = "Warning - " + $ReplicaStateName + " is in unusual state. ReplicationStatus: " + $ReplicaStateName.Health
}
$stringToPost = $status + " " + '"' + "Replication of " + $ReplicaStateName + '"' + " " + "-" + " " + $statusText
Write-Host $stringToPost
}