Um die eigene Infrastruktur in PRTG so übersichtlich wie möglich abzubilden gibt es die Möglichkeit die zu überwachenden Geräte sinnvoll zu Gruppieren. Grundsätzlich sieht die Objekthierarchie in PRTG wie folgt aus:


Bild: Objekthierarchie in PRTG

Beim Anlegen von Gruppen kann es, je nachdem wie die Struktur aussehen soll und von der Logik aufgebaut ist vorkommen, dass man vor der Herausforderung steht mehrere Gruppen samt Untergruppen erstellen zu müssen. Dies kommt zum Beispiel vor, wenn man mehrere Niederlassungen in Form von Gruppen anlegen möchte und somit unter Umständen mehrere hundert Niederlassungen samt Geo-Daten (damit in der PRTG Geo-Map auch die Standorte angezeigt werden) hinzufügen muss. Diese Aufgabe ist viel zu umfangreich und Zeitaufreibend um sie manuell zu erledigen.

Nun gibt es in PRTG aktuell keine Möglichkeit mehrere Gruppen anhand einer Liste oder eines Imports anzulegen. Für das mehrfache Anlegen von Geräten hat man die einfache Lösung der automatischen Erkennung, die anhand einer Liste, z.B. mehrere Geräte samt vorgegebenen Sensoren anlegen kann. Für die Erstellung von Gruppen gibt es hierzu bislang keine vergleichbare Möglichkeit.

Nun wie lösen wir dieses Problem? Die Antwort lautet; mithilfe PRTG API!

Die PRTG API ermöglicht es Informationen aus PRTG auszulesen um diese, z.B. in einem Powershell Skript weiter zu verarbeiten. Weitere Informationen zur PRTG API findet man in der PRTG Ajax Konsole unter Setup -> PRTG API

Wenn man nun, z.B. mehrere Gruppen anlegen möchte, in der jeweils die gleichen Untergruppen enthalten sind, legt man zunächst eine schematische Gruppe samt Untergruppen an. Diese wird dann später als Quellgruppe verwendet und stellt die Basis der zu klonenden neuen Gruppen dar.
Um dieses Ziel zu erreichen werden folgenden PRTG API http aufrufe benötigt:

"http(s)://PRTGServerName/api/duplicateobject.htm?id=ObjectID_der_Quellgruppe&name=Name_der_neuen_Gruppe&targetid=ID_der_Zielgruppe_in_die_geklont_wird&username=PRTGUser&passhash=PassHash"

 

Mit dieser http Abfrage wird die Quellgruppe mit dem entsprechenden Namen inklusive Untergruppen in die Zielgruppe geklont. Anschließend kann mithilfe des folgenden http requests die Adresse hinterlegt werden:

"http(s)://PRTGServerName/api/setlonlat.htm?id=ID_der_geklonten_Gruppe&location=Adresse_des_Standortes&username=&username=PRTGUser&passhash=PassHash"

Um nun auf einen Schlag mehrere Gruppen samt Geo-Daten und jeweiligen Namen anzulegen, gibt es die Möglichkeit diese beiden http requests in ein Powershell Skript zu packen. Diese werden dann in einer „foreach-Schleife“ nach und nach für jeden Standort verarbeitet. Mithilfe einer CSV Datei kann man eine Liste mit allen Standortnamen und Geo-Daten anlegen, welche dann eingelesen und in der „foreach- Schleife“ verarbeitet wird.

Das fertige Skript könnte dann so aussehen:

$PRTGServer = Namen des PRTG Servers
$PRTGUser = PRTG Benutzername
$PassHash = PassHash des PRTG Benutzers
$SourceObjectID = ID der PRTG Quellgruppe
$TargetObjectID = ID der PRTG Zielgruppe
$CSVPath = Pfad zur CSV Datei
$CSV = Import-Csv $CSVPath -Delimiter ';'
foreach ($Item in $CSV) {
$URL1 = "https://$PRTGServer/api/duplicateobject.htm?id=$SourceObjectID&name=$($item.Standort)&targetid=$TargetObjectID&username=$PRTGUser&passhash=$PassHash"
$NewObject = Invoke-RestMethod -Method POST -Uri $URL1 -ContentType "application/json"
$NewObject | Out-File -FilePath C:\temp\newprtggroup.txt

$NewObjectID = Select-String -Path C:\temp\newprtggroup.txt -SimpleMatch "group.htm?id="

$NewObjectID = $NewObjectid.ToString().split("=")[5].split('"')[0]
$URL2 = "https://$PRTGServer/api/setlonlat.htm?id=$NewObjectID&location=$($Item.Adresse)&username=$PRTGUser&passhash=$PassHash"

Invoke-RestMethod -Method POST -Uri $URL2 -ContentType "application/json"
$NewObject | Out-File -FilePath C:\temp\newprtggroup.txt
$NewObjectID = Select-String -Path C:\temp\newprtggroup.txt -SimpleMatch "group.htm?id="
$NewObjectID = $NewObjectid.ToString().split("=")[5].split('"')[0
Start-Sleep -s 1

}

 

In diesem Beispiel müssen die Angaben in der CSV Datei wie folgt angegeben werden:

Standort;Adresse

abtis Freiburg;Munzingerstraße 5, Freiburg

 

Zudem müssen Leerzeichen, Sonderzeichen und Umlaute entsprechend URL-Kodiert sein, damit diese auch als http request übermittelt werden können.

Um diese zu kodieren, müssen folgende Zeichen wie folgt ersetzt werden:

ä = %C3%A4

ö = %C3%B6

ü = %C3%BC

ß = %C3%9F

, = %2C

(Leerzeichen)  = %20

 

Nun kann entsprechend ein Powershell-Script und eine Liste der Standorte in Form einer CSV Datei erstellt werden, um mithilfe der PRTG http API requests mehrere Gruppen automatisiert anzulegen.

 

Redakt.: Ray-Jan Singrin