PowerCLI – Snapshots monitoren

9. März 2021 at 12:43

Snapshots sind in vSphere eine tolle Möglichkeit einen Stand einer VM einzufrieren. Allerdings ist es ratsam so wenige Snapshots wie möglich auf einer VM zu halten und so kurz wie möglich. Um dies zu erreichen sollte man die Snapshots monitoren.
Oft sieht eine Snapshotkette wie folgt aus:

Snapshotkette in vSphere
Auf einer VM sind mehrere Snapshots vorhanden

Oft werden in virtuellen Infrastrukturen aber auch Backups über Snapshots gehandelt. Manchmal bleiben hierbei Snapshots aber liegen und werden nicht gelöscht. Ein Grund dafür ist beispielsweise eine etwas zu lange Reaktionszeit des vCenters oder ein Fehler in der Backupprozedur.

Doch warum ist dies nicht ratsam? Die Funktionsweise von Snapshots ist relativ schnell erklärt: Für jeden Snapshot wird eine eigene Delta-Disk erstellt, welche die neue Basis-Disk für die jeweilige VM darstellt. Alle Write-IOs werden nun auf diese Delta-Disk umgeleitet. Weitere Informationen dazu sind in diesem KB-Artikel verfügbar: https://kb.vmware.com/s/article/1015180

Um diesem Problem entgegen zu treten, habe ich einen Snapshotdetector geschrieben. Dieser basiert auf der PowerCLI und sucht sich alle VMs raus die “unrechtmäßig” einen Snapshot besitzen.
Die “rechtmäßigen” VMs selektiere ich dabei mit Hilfe von einem Tag:

Der Tag "allow Snapshots" aus der Kategorie "snapshots" selektiert VMs welche Snapshots besitzen dürfen.
Der Tag “allow Snapshots” aus der Kategorie “snapshots” selektiert VMs welche Snapshots besitzen dürfen.

Diesen Tag habe ich nun allen VMs angehangen, welche Snapshots haben dürfen.
Doch nun zu dem Script. Das Script erwartet eine aktive Verbindung auf eine vSphere-Umgebung bspw. mittels Connect-VIserver -Server vcsa01.vclass.lab

Das Script speichert standardmäßig im Pfad C:\Scripts\Snapshotdetector\Logs\snaphots.txt welche VMs einen Snapshot besitzen.
Der Pfad wird in der Variable $logPath festgelegt und der Dateiname ist fix. Die Daten lassen sich natürlich von anderen Systemen weiterverwenden. So habe ich dieses Script in einen PRTG-Sensor integriert, welcher mir mehrmals täglich die aktuellen VMs sucht und meldet.
Wie immer kann das Script an die eigenen Bedürfnisse angepasst werden und bietet so eine flexible Möglichkeit Snapshots monitoren zu können.