Individuelle Netzwerküberwachung mit dem Solarwinds SDK
Das Software Development Kit für Solarwinds Orion ist eine Werkzeugsammlung, die es dem Benutzer ermöglicht die Funktionalität der Monitoring Software vielfältig zu erweitern.
Kai Bosch, 01.09.2017
Primär unterstützt das SDK die Entwicklung individueller Softwarelösungen für das Netzwerk Monitoring auf Basis von Solarwinds in PowerShell und Python. Aber auch unabhängig davon kann es ganz universell via SOAP und REST genutzt werden.
Das SDK wird seitens Solarwinds auf Github unter freier Lizenz bereitgestellt: Github SDK
Einfache Datenmanipulation mit SWIS
Als einer der Hauptbestandteile des SDK ist der Solarwinds Information Service (SWIS) eine Schnittstelle, um Daten aus Solarwinds abzufragen und zu manipulieren.
SWIS bringt seine eigene SQL ähnliche Sprache mit, die Solarwinds Query Language (SWQL). Über eine der Datenbank nachempfundenen Struktur lassen sich hier Daten aus Solarwinds Orion abfragen.
Die dem SWIS zugrundeliegende Datenstruktur lässt sich ebenfalls auf Github nachschlagen: Github Datenstruktur
Beispiel einer SWQL Abfrage mit dem Solarwinds SDK Powershell Snapin:
Add-PSSnapin SwisSnapin; $swis = Connect-Swis; #name of the application monitor $ComponentName = "get mountpoints"; #### #get application ids for applications containing the component monitor [string]$sAppIDs = Get-SwisData $swis "SELECT ApplicationID FROM Orion.APM.Component WHERE Name = @name" @{name = $ComponentName}; $aAppIDs = $sAppIDs.Split(" "); Write-Output "Found $($aAppIDs.Length) Application(s) with Component"; ForEach ( $sAppID in $aAppIDs) { #get it's node id and name $nodeID = Get-SwisData $swis "SELECT NodeID FROM Orion.APM.Application WHERE ApplicationID = @AppID" @{AppID = $sAppID}; $NodeName = Get-SwisData $swis "SELECT NodeName FROM Orion.Nodes WHERE NodeID = @node;" @{node = $nodeID}; Write-Output "Node ID: $($nodeID) Name: $($NodeName)"; }
Der oben gezeigte Code lässt sich als PowerShell Script speichern und ausführen. Vorher muss das PowerShell SnapIn installiert werden. Wie das geht, erfahren Sie hier
Das Script fragt Applikationen ab, welche einen Component-Monitor namens „get mountpoints“ haben. Über die Applikations-IDs werden dann die Knoten, die diese Applikation zugeordnet haben abgefragt. Anschließend wird deren Name sowie ihre ID ausgegeben.
Statt sich extra um die Datenbankauthentifizierung kümmern zu müssen, kann SWIS mit den Solarwinds Anmeldedaten verwendet werden. Natürlich werden hier die Berechtigungseinstellungen des jeweiligen Users berücksichtigt.
Ein weiterer Vorteil ist die Isolation der SWIS Komponenten vor Änderungen am Datenbankschema, so dass auch im Zuge der zukünftigen Weiterentwicklung von Solarwinds über das SWIS Interface ein konsistentes, rückwärtskompatibles Datenmodell bereitgestellt werden kann.
Für das Bauen von SWQL Abfragen ist das „SWQL Studio“ in der Solarwinds SDK Installation enthalten.
Neben der auf lesenden Zugriff beschränkten SWQL gibt es auch noch eine Reihe von SWIS-Funktionen, die vollständige CRUD (Create Read Update Delete) Operationen unterstützen. Diese lassen sich mittels PowerShell Snapin, Python Client, SOAP oder REST nutzen. Allerdings sind sie nicht für alle Arten von Solarwinds-Daten implementiert.
SWIS Funktionen nutzen sie sogenannte SWIS-URI zur Datenselektion, wie hier in einem PowerShell Beispiel demonstriert:
$swisUri = 'swis://localhost/Orion/Orion.Nodes/NodeID=$nodeID/Volumes/VolumeID=$volumeId';
Neben dem SWIS Snapin für PowerShell gibt es noch „PowerOrion“, ein PowerShell Modul welches einige der Beispielscripte aus dem Github Repository des SDKs als SWIS Funktionen bereitstellt.
Durch SWIS-Verbs Solarwinds-Management automatisieren
Mit sogenannten SWIS-Verbs, lassen sich viele gängige Arbeitsschritte aus Solarwinds Orion auch direkt per Scriptbefehl ausführen.
Im Folgenden wird anhand eines Beispiels ein Solarwinds Knoten unter Verwendung eines SWIS-Verbs aus der Überwachung durch Solarwinds temporär ausgeschlossen.
Zuerst wird die Node ID (Knoten ID) eines beliebigen Servers benötigt, auf den wir das SWIS-Verb anwenden wollen.
Die Node ID lässt sich mittels einer simplen SWQL Query ausfindig machen:
SELECT NodeID, Caption, Status, StatusDescription FROM Orion.Nodes WHERE Caption like '%Test%';
Das Ergebnis:
NodeID Caption Status StatusDescription 78 Testserver 1 Node status is Up.
Die ermittelte Node ID wird nun in einem kleinen Powershell-Demonstrations-Script als Parameter an den Invoke-SwisVerb Funktionsaufruf übergeben:
Add-PSSnapin SwisSnapin; $swis = Connect-Swis;
[datetime]$timestampNow = "01.09.2017"
[datetime]$timestampLater = "12.09.2017"
Invoke-SwisVerb $swis Orion.Nodes Unmanage @("N:78", $timestampNow, $timestampLater, "false")
In diesem Beispiel, welches ebenfalls in unserer zuvor besprochenen PowerShell-Umgebung zum Einsatz kommt, wird der Knoten mit sofortiger Wirkung „$timestampNow“ aus der Überwachung durch Solarwinds ausgeschlossen und zu einem späteren Zeitpunkt „$timestampLater“ wieder aufgenommen.
Mit dem oben bereits genannten SWQL-Query lässt sich der Effekt prüfen, der Knoten ist nun aus der Solarwinds Überwachung ausgeschlossen:
SELECT NodeID, Caption, Status, StatusDescription FROM Orion.Nodes WHERE Caption like '%Test%';
Das Ergebnis:
NodeID Caption Status StatusDescription 78 Testserver 9 Node status is Unmanaged.
Die konkreten Parameter eines SWIS-Verbs lassen sich ebenfalls über eine Query im SWQL Studio abfragen:
SELECT EntityName, VerbName, Position, Name, Type, IsOptional FROM Metadata.VerbArgument WHERE VerbName='Unmanage' AND EntityName='Orion.Nodes'
Welche SWIS-Verbs jeweils unterstützt werden ist vom Umfang der Solarwinds Installation abhängig und lässt sich ebenfalls mit einer einfachen SWQL Query in Erfahrung bringen:
SELECT Name, EntityName FROM Metadata.Verb
Wissen ist Macht – Das Wiki zum Solarwinds Orion SDK
All die oben genannten Funktionalitäten wären nichts ohne eine anständige Dokumentation.
Diese findet sich im Wiki auf dem eigenen Github Repository, was auch gleichzeitig der Startpunkt auf dem Weg zur produktiven Nutzung der SDK Werkzeuge ist.
Übersichtlich aufgebaut und klar strukturiert findet man hier praktische Hilfe und Anleitungen zur Verwendung der mitgelieferten Funktionalitäten.
Das SWIS-Datenschema auf einen Blick gibt es hier:
Eine hilfsbereite Community rund um die Nutzung des SDKs gibt es ebenfalls in der Solarwinds Thwack Community