Replikationsstatus bei Hyper-V Server versenden per Email möglich?

INHUMAN94

Cadet 3rd Year
Registriert
Juni 2024
Beiträge
49
Moin moin,

3 Hyper-V Server replizieren sich untereinander gegenseitig sodass wenn einer ausfällt sofort alles weitergehen kann auf den anderen 2 Maschinen. Am liebsten wäre es mir wenn der Zustand der Replikationen mir ab und zu z.B an ein Email Supportpostfach geschickt wird ob alles i.O. ist. So mache ich es mit den Veeam Sicherungen auch. So hat man alles schnell parat und muss sich nicht erst per RDP irgendwo hin verbinden usw. Gibt es inzwischen irgendwelche Tools für mein vorhaben? Sind erst vor kurzem auf Hyper-V umgestiegen

Ansonsten hab ich dei meiner Recherche nur einige Skripts gefunden die ich mir ansonsten mal genauer anschauen werde. Evtl hat ja jemand von euch eine ähnliche Konstellation. Würde mich interessieren wie ihr das gelöst habt.

Beste Grüße
 
Zuletzt bearbeitet:
Wenn du kein Geld ausgeben willst, dann musst du dir was mit der PowerShell zusammenfrickeln.
 
Grundsätzlich ist Geld ausgeben kein Problem wenn es sich denn lohnt. Hast du denn einen explizieten Vorschlag? Sind erst vor kurzem auf Hyper-V gewechselt darum bin ich noch nicht ganz so vertraut welche Optionen es diesbezüglich denn gibt.

Grüße
 
Witzigerweise hatte ich gerade für einen Kollegen recherchiert, was es in Bezug auf Hyper-V gibt (da ich VMware-Kind bin), um den Status von Replikationen zu überprüfen. Das Manko: es wurde bisher nicht fix benötigt, daher gab es auch keinen Entwicklungsaufwand, aber das ist auch nicht so schwer.

Um einen echten Ausfall zu entdecken und abzufedern, müsstest Du wohl auf eine HA-Lösung wie haproxy setzen, die Du vor die drei Hosts setzt. Dieser würde periodisch prüfen, ob die Hosts erreichbar sind und umschwenken, wenn einer ausfällt (so etwas wird oft für Web- oder E-Mail-Services gemacht).

Wenn Dich nur der Status der Replikation interessiert und Du das via PowerShell prüfen möchtest, um im Falle eines Fehlers (oder wenn erfolgreich) per E-Mail informiert zu werden, ist das aber ebenfalls kein Problem. Schau Dir dazu am Besten die folgenden Cmdlets an:

Get-VMReplication
Get-VMReplicationServer
Measure-VMReplication
Send-MailMessage

Ich würde Dich ermutigen, es selbst auszuprobieren. Dass Du etwas PowerShell verstehst, ist heute schon wichtig und könnte in Zukunft immer wichtiger werden, plus die Komplexität Deiner Anfrage ist zum Glück niedrig.

Ansonsten, und das sage ich natürlich nicht ohne den virtuellen, erhobenen Zeigefinger, kannst Du ja AI-Bots zum Generieren von Code befragen, jedoch mit der entsprechend gebotenen Vorsicht.
 
  • Gefällt mir
Reaktionen: INHUMAN94
Hab jetzt mal ein kleines Skript zusammengebastelt falls es jemanden interessiert oder mit google hier drauf stößt. Ist auch aktuell so im Einsatz und funktioniert. Mit der Aufgabenplanung wird es ganz simpel einmal am Tag ausgeführt.


PowerShell:
$smtpServer = "dein.smtp.server.de"

$smtpFrom = "deine Email"

$smtpTo = "Sende Email"

$smtpSubject = "Hyper-V Replikationsstatus"

$smtpUser = "test123"

$smtpPassword = "test123#"

$smtpPort = 587



function Send-Email($subject, $body) {

    $smtp = New-Object System.Net.Mail.SmtpClient($smtpServer, $smtpPort)

    $smtp.Credentials = New-Object System.Net.NetworkCredential($smtpUser, $smtpPassword)

    $smtp.EnableSsl = $true

    $mailmessage = New-Object system.net.mail.mailmessage($smtpFrom, $smtpTo, $subject, $body)

    $smtp.Send($mailmessage)

}



function Check-HyperVReplicationStatus {

    $replicationStatus = Get-VMReplication


    $statusMessage = ""

    $allOk = $true

    $errorOccurred = $false


    foreach ($vm in $replicationStatus) {

        switch ($vm.ReplicationState) {

            "Normal" {

                $statusMessage += "VM: $($vm.Name) - Replikation erfolgreich. Status: $($vm.ReplicationState)`r`n"

            }

            "Replicating" {

                $statusMessage += "VM: $($vm.Name) - Replikation läuft. Status: $($vm.ReplicationState)`r`n"

            }

            "Error" {

                $statusMessage += "VM: $($vm.Name) - Replikation fehlgeschlagen. Status: $($vm.ReplicationState)`r`n"

                $allOk = $false  # Fehler gefunden

                $errorOccurred = $true

            }

            "Paused" {

                $statusMessage += "VM: $($vm.Name) - Replikation pausiert. Status: $($vm.ReplicationState)`r`n"

                $allOk = $false

                $errorOccurred = $true

            }

            default {

                $statusMessage += "VM: $($vm.Name) - Unbekannter Status. Status: $($vm.ReplicationState)`r`n"

                $allOk = $false  # Unbekannter Status -> Annahme: Problem

                $errorOccurred = $true

            }

        }

    }


 

    if ($errorOccurred) {

        $statusMessage = " Fehler aufgetreten! Es gibt Probleme mit der Hyper-V-Replikation.`r`n" + $statusMessage

    }


 

    if ($allOk) {

        $statusMessage += "`r`nAlles OK - Alle Replikationen laufen erfolgreich oder sind abgeschlossen.`r`n"

    }


    return $statusMessage

}




$statusMessage = Check-HyperVReplicationStatus

if ($statusMessage) {

    $subject = "Hyper-V Replikationsstatus - " + (Get-Date).ToString("yyyy-MM-dd HH:mm:ss")

    Send-Email -subject $subject -body $statusMessage

}

Kann man bestimmt noch etwas eleganter lösen aber funktioniert zumindest
 
  • Gefällt mir
Reaktionen: Misdemeanor
Hallo @INHUMAN94. Erst einmal freut es mich zu lesen, dass Du nun alles klären konntest.

Aber, eine Bitte: Könntest Du PowerShell-Code bitte auch als solchen deklarieren? Dann haben wir hier alle die Möglichkeit, diesen besser lesen und überblicken zu können. Dazu kannst Du im Editor die Code-Komponente auswählen.

PowerShell:
# Kommentar
Write-Host "Dies ist ein Beispiel-Code."

Danke.
 
  • Gefällt mir
Reaktionen: INHUMAN94
Habe nochmal editiert. Dürfte so lesbar sein oder? Hab mich relativ schnell zurecht gefunden mit dem ganzen :)

Beste Grüße
 
  • Gefällt mir
Reaktionen: Misdemeanor
Bis auf die doppelten Leerzeilen definitiv nun lesbar und verständlich. ;-)

An der einen oder anderen Stelle würde ich Dir ein try-catch-Konstrukt empfehlen, aber ich sage mal so: es funktioniert so und genügt Deinen Ansprüchen – und das ist die Hauptsache.
 
  • Gefällt mir
Reaktionen: INHUMAN94
Danke fürs Feedback. Werde ich mir mal anschauen danke

Beste Grüße
 
  • Gefällt mir
Reaktionen: Misdemeanor
Zurück
Oben