Horizon Networklabel Monitoring

Horizon View

Öfter möchte man bestimmt mehrere Netzwerke in einem Desktoppool innerhalb von VMware Horizon verwenden. Ein Grund dafür ist zum Beispiel das die zur Verfügung stehenden Subnetze recht klein sind oder man den zur Verfügung stehenden Adressraum möglichst effektiv nutzen möchte.

Standardmäßig wird die virtuelle Portgruppe der Master-VM an die provisionierte VM vererbt. Dieses Verhalten lässt sich aber ändern. Über die PowerCLI lassen sich mehrere Netzwerke einem Pool zuordnen. Die Daten darüber lassen sich auch wieder per CLI abfragen:
PS C:\Program Files\VMware\VMware View\Server\bin> Get-Pool | Select pool_id, networkLabelSpecs | fl

pool_id : WIN10_general01
networkLabelSpecs : [nl=192.168.10.X;nic=Netzwerkadapter
1;enabled=1;max=20;usage=15]

pool_id : WIN10_finance
networkLabelSpecs : [nl=192.168.10.X;nic=Netzwerkadapter
1;enabled=1;max=15;usage=5]

pool_id : WIN10_sales
networkLabelSpecs : [nl=192.168.21.X;nic=Netzwerkadapter 1;enabled=1;
max=30;usage=15];[nl=192.168.10.X;nic=Netzwerkada
pter 1;enabled=1;max=40;usage=26]

PS C:\Program Files\VMware\VMware View\Server\bin>

Diese Daten lassen sich so aber nur schwer auswerten. Um dem Provisionierungsteam die Arbeit zu erleicherten (damit diese rausfinden können wie viele Adressen in einem Pool noch nutzbar sind und ab wann man eine Erweiterung der Netze planen muss), habe ich ein Script geschrieben, welches die Daten entsprechend aufbereitet:

$networkConfig = @{}
$parsedData = @()
$pools = Get-Pool
$pools | ForEach {
    $networkLabelSpecs = ($_ | Select networkLabelSpecs).networkLabelSpecs
    $poolID = $_.pool_id

    $networkConfig.Add($poolID, $networkLabelSpecs)
}

$networkConfig.GetEnumerator() | % {
    $poolID = $_.Key
    if($_.Value -ne "disabled" ) {
        $networkData = $_.Value -split "\]\;\["
        ForEach($networkLabel IN $networkData) {
            $networkLabelConfig = (($networkLabel -replace "\[","") -replace "\]","")
            $var1 = $networkLabelConfig -match 'nl=(.+);nic=(.+);enabled=(.+);max=(.+);usage=(.+)$'
            $poolData = @()
            $name = $Matches[1]
            $max = $Matches[4]
            $usage = $Matches[5]

            $object = New-Object System.Object;
            $object | Add-Member -type NoteProperty -name "Pool" -value $poolID
            $object | Add-Member -type NoteProperty -name "Netzwerk" -value $name
            $object | Add-Member -type NoteProperty -name "maximum" -value $max
            $object | Add-Member -type NoteProperty -name "Nutzung" -value $usage
            $object | Add-member -type NoteProperty -name "frei" -value ($max - $usage)

            $parsedData += $object
        }
    }
}

Das Script stellt die Daten in der Variable $parsedData bereit. Diese lassen sich beliebig weiterverarbeiten. Wir verwenden dies beispielsweise in Verbindung mit PRTG.
Für die Integration mit PRTG gibt es im Grunde zwei Möglichkeit.

  1. Die Einrichtung eines Custom Sensors (EXEXML) der das Powershell-Skript auf der Probe benötigt.
  2. Der Abruf der XML-Datei über einen HTTP-Sensor

In beiden Fällen muss eine entsprechende XML-Struktur generiert werden. Diese muss diesem Schema folgen:

René Gessinger

Ich arbeite seit einigen Jahren als Infrastructure Architect in einem Systemhaus und Cloud Provider und betreibe vorwiegend vSphere-Umgebungen. Meine Kenntnisse und Interessen reichen von vSphere und NSX über Networking und VMware Horizon auch bis tief in Windows und Linux. Mit der Zeit kamen auch Lösungen für die Automatisierung hinzu, so z.B. Powershell, vRealize Orchestrator und Ansible. Darüber hinaus arbeite ich intern als Trainer für die Produkte vSphere, vSAN, Horizon und NSX.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.