PRTG mit Online-USV und DataWatch UPSMAN

Mit dem Einsatz einer USV kann man sich viele Probleme vom Hals halten und da ich zuhause doch das ein oder andere IT-Equipment habe, habe ich natürlich auch eine USV. Genau genommen sind es sogar zwei USV-Anlagen. Eine alte Belkin, die schon die dritte Batterie hat, sichert das Synology NAS in einem Raum ab, während der "Serverraum" über eine Online-USV (Zinto E 800) abgesichert ist. Dort hängen dann der Gigabit-Switch, die PoE-Einspeisung, der Fritz!Box und natürlich der Hyper-V-Server dran.

Aber natürlich interessiert mich, wie ich auch diese "SoHo/SMB"-USV überwachen kann. Sie hat ja zumindest einen USB und einen RS.232-Anschluss und passende Kabel zur Verbindung mit einem PC liegen sogar dabei. Die USB-Variante unterstützt das HID Power-Profil und dürfte damit von NAS-Geräten und auch Windows Desktops direkt erkannt werden. Für die Nutzung der seriellen Schnittstelle liegt die Software DataWatch dabei, die verschiedene Optionen bietet. Eine serielle Schnittstelle ist natürlich erforderlich

DataWatch GUI

Mit der Installation der DataWatch-Software läuft im Hintergrund ein Service, der die serielle Schnittstelle abfrage und die Daten für die UPSMan-Software oder per Webbrowser bereit stellt. Damit lässt sich schon einmal als Administrator kontrollieren, ob die Funktion an sich gegeben gegeben ist. Zudem hat erlaubt die Software umfangreiche Zugänge und Optionen, die für eine automatische Nutzung mit PRTG zur Verfügung stehen.

Interessant finde ich dabei, dass diese Software gar nicht on "Online-USV" kommt, sondern von der Firma Generex aus Hamburg..Die UPSMAN-Software wird anscheinend von 91 Herstellern (Stand Mai 2017) genutzt.

Anscheinend ist UPSMAN durchaus ein "übliches" System, welches von vielen Herstellern einfach als OEM lizenziert wird. Das macht es natürlich besonders interessant, sich die Software genauer anzuschauen und wie ich Sie in meine PRTG-Installation integrieren kann.

SNMP

Die kleineren USV-Systeme haben leider noch keinen Ethernet-Port. Über die DataWatch-Software kann aber ein Server (Windows/Unix/MacOS) die Daten per serieller Schnittstelle von der USV abrufen und auf viele Wege im internen LAN bereit stellen. Wenn auf einem Windows Server z.B. der SNMP-Dienst installiert ist, dann erweitert DataWatch die SNMP-Schnittstelle um eine eigene MIB, die im Progammverzeichnis mitgeliefert wird. Zudem unterstützt seit ca. 2003 die Software auch die generische SNMP-Mib RFC1213 & RFC1628

Die Aktivierung erfolgt sehr einfach direkt in der GUI, wenn Sie den Button "Advanced User" drücken

Achtung: Durch die Aktivierung dieser Funktion wird der UPSMAN-Dienst als vom SNMP-Dienst abhängig eingetragen. Wer dann den SNMP-Dienst durchstartet, startet damit auch UPSMAN durch.

Per SNMP bewegen wir uns dann unter der OID 1.3.6.1.2.1.33. Diesen Wert habe ich aber nicht per SNMP gefunden.

Stattdessen aber habe ich die folgende MIB aus dem Programmverzeichnis analysiert und gefunden

1.3.6.1.4.1.1356 = {iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise (1) upsman (1356)

Hier liefert der SNMP-Tester von Paessler dann auch schon Daten.

Die Bedeutung ist anhand der MIB schnell erklärt. Hier ein Auszug

OID Bezeichnung Bezeichnung

1.3.6.1.4.1.1356.1.1.1.0

upsIdentModelName

Durch den Admin vorgegebenen Namen

1.3.6.1.4.1.1356.1.1.2.0

upsIdentUpsIDName

Durch den Admin vorgegebene ID

1.3.6.1.4.1.1356.1.2.1.0

upsBatteryStatus

1=Unknow
2=Batterie Normal
3=Batterie Low

1.3.6.1.4.1.1356.1.2.2.0

upsBatteryCapacity

Verbleibende Kapazität In Prozent

1.3.6.1.4.1.1356.1.2.3.0

upsBatteryVoltage

Batteriespannung

1.3.6.1.4.1.1356.1.2.4.0

upsBatteryTemperature

Temperatur. Meine USV unterstützt diesen Wert leider nicht

1.3.6.1.4.1.1356.1.2.5.0

upsBatteryRunTimeRemaining

Restlaufzeit auf Batteriebetrieb

1.3.6.1.4.1.1356.1.2.6.0

upsBatteryLifeTimeRemaining

Restlaufzeit bezüglich Haltbarkeit

1.3.6.1.4.1.1356.1.3.1.0

upsInputLineVoltage

Eingangsspannung

1.3.6.1.4.1.1356.1.3.2.0

upsInputLineFrequence

Eingangsfrequenz

1.3.6.1.4.1.1356.1.4.1.0

upsOutputStatus

1=Unbekannt
2=online
3=OnBattery
4=OnBypass
5=Shutdown

1.3.6.1.4.1.1356.1.4.2.0

upsOutputLoad

Ausgangslast

1.3.6.1.4.1.1356.1.4.3.0

upsOutputFrequency

Ausgansfrequenz

1.3.6.1.4.1.1356.1.4.4.0

upsOutputVoltage

Ausgangsspannung

1.3.6.1.4.1.1356.1.5.3.0

upsLastTestResult

0=Undefiniert
1=Erfolgreich
2=Fehlerhaft
3=nicht unterstützt

Das Abfragen der Counter reicht natürlich nur dann als Signal bei einem Stromausfall, wenn die Abfragen sehr oft kommen. Da ist dann ein Trigger seitens der Software wichtiger. Mein Ziel mit "Überwachung" ist natürlich erst einmal die Fitness des Systems zu kennen. Ansonsten sollten Sie SNMP Trap-Verarbeitung aktivieren. So eine MIB lässt sich recht einfach mit PRTG MIB Importer einlesen und im OID-Format nach speichern

Danach kann ein neuer Sensor einfach anhand der Library eingerichtet werden. Jeder Counter wird dabei aber ein eigener Sensor, was aus meiner Sicht die Lesbarkeit der Daten erschwert.

In meinem Beispiel ist die UPSMAN-Software auf einem Hyper-V Server installiert und daher muss PRTG von dort auch die Daten per SNMP abrufen.

Mir wären weniger Sensoren mit mehreren Channels lieber. Aber es funktioniert so schon mal, wenngleich der Sensor natürlich dann "unter" dem Server liegt, auf dem UPSMAN installiert ist und die UPS kein eigenständiges Gerät in PRTG darstellt.

Logfiles

Eine zweite Möglichkeit Daten für Auswertungen anzuzapfen ist eine Log-Datei, die das Programm im Hintergrund schreibt. Per Default ist diese auf 1MB eingestellt und wird alle 5 Min aktualisiert. Diese Einstellungen können natürlich angepasst werden:

Bei mir liegt die entsprechende Datei auf "C:\Program Files (x86)\UPS\upsman\UpsData.csv" 

Wenn ich die Daten mit PRTG auslese, dann muss die Datei natürlich keine 1000KB groß sein. Ich habe Sie einfach auf 10 kB gestellt, wobei die Software dieses Limit wohl nicht genau einhält. Bei mir ist die Datei dann doch 17 KB groß. Das ist aber nicht weiter relevant, wenn mich eh nur die letzte Zeile interessiert. Wenn ich die Daten aber alle 5 Minuten abrufen dann sollte UPSMAN die Daten etwas häufiger schreiben, damit ich auch wirklich jedes mal aktuelle Daten einlesen kann. Es muss aber nun nicht wie bei einer Audio-Abtastung die doppelte Frequenz sein. Ich habe einfach 200 Sek eingetragen.

Auf die Datei kann man natürlich auf dem Server selbst zugreifen. Sie ist aber auch über den Webserver unter "http://localhost:8081/cgi-bin/ups_view.exe?-dl" erreichbar. Her ein Ausschnitt:

DATE, TIME, INPUT VOLT, INPUT FREQUENCY Hz, INPUT CURRENT, INPUT POWER, OUTPUT VOLT, OUTPUT CURRENT, OUTPUT FREQUENCY Hz, OUTPUT LOAD , BATTERY VOLTAGE, BATTERY RUNTIME, TEMPERATURE C°, BATTERY CAPACITY , AUTONOMY TIME, BYPASS VOLTAGE, BYPASS CURRENT, BYPASS FREQUENCY Hz
05/13/2017,10:50:30,235.40,N/A,N/A,N/A,235.10,N/A,50.00,20.00,26.90,0,N/A,100.00,34.02,N/A,N/A,N/A

Die Datei kann recht einfach per PowerShell eingelesen werden. Die letzte Zeile erhalte ich mit:

PS C:\> (import-csv "C:\Program Files (x86)\UPS\upsman\UpsData.csv")[-1]

DATE                : 05/14/2017
TIME                : 00:58:52
INPUT VOLT          : 237.30
INPUT FREQUENCY Hz  : N/A
INPUT CURRENT       : N/A
INPUT POWER         : N/A
OUTPUT VOLT         : 237.30
OUTPUT CURRENT      : N/A
OUTPUT FREQUENCY Hz : 50.00
OUTPUT LOAD         : 20.00
BATTERY VOLTAGE     : 26.70
BATTERY RUNTIME     : 0
TEMPERATURE C?      : N/A
BATTERY CAPACITY    : 100.00
AUTONOMY TIME       : 34.02
BYPASS VOLTAGE      : N/A
BYPASS CURRENT      : N/A
BYPASS FREQUENCY Hz : N/A

Achtung: Zwei Feldnamen enthalten ein "Leerzeichen" am Ende. Bei mir waren das "OUTPUT LOAD " und "BATTERY CAPACITY ". Dies ist auf dem Bildschirm so nicht zu sehen.

Hier ist es natürlich dann sehr leicht, diese Daten einmal alle 5 Minuten so auszulesen und entweder an PRTG zu "pushen" oder. Damit es ein eigenes Gerät in PRTG ist, habe ich dazu ein neues Device mit dem Namen "Zinto E800 UPS" angelegt und als verpflichtende IPv4-Adresse einfach 127.0.0.1 eingetragen. Noch hat die Zinto E800 ja keine IP-Adresse. Auf dem Server, auf dem nun die UPSMAN-Software installiert ist, habe ich einfach ein PowerShell-Skript geschrieben, welches durch den lokalen Taskplaner alle 5 Minuten gestartet wird, die letzte Zeile ausliest und eine XML-Antwort per HTTP-Push an die PRTG-Instanz sendet. Dann muss PRTG nicht "pollen"., ich spare mir Zugangsrechte o.ä. Allerdings fehlen hier natürlich dann Werte, die per SNMP nicht zu erhalten sind, z.B. der Name der USV.

prtg-upsman.1.0.ps1

Speichern Sie dieses Skript einfach auf dem Computer, auf dem eine UPSMAN-Instanz läuft und eine passende CSV-Datei schreibt. Passen Sie dann noch die URL und den Sensor-GUID zu ihren PRTG-Server an und sorgen Sie per Taskplaner, dass das Skript oft genug gestartet wird. Dann fehlt nur noch der Sensor in PRTG, um die empfangenen Daten zu visualisieren:

Anhand des Bildes sehen Sie die beim letzten Abruf erfassten Daten und in der Grafik kann man schon erkennen, dass die aktuelle Last "Rot" und die davon abhängige Autonomiezeit (türkis) schwanken. Das ist auch in den numerischen Werten abzulesen. Es gibt Administratoren die behaupten am Stromverbrauch einen Ausfall eines PCs vorhersagen zu können. Ich denke die aktuelle Auslastung spiegelt sich hier schon wieder. Allerdings misst die USV immer nur alle angeschlossenen Verbraucher und nicht jeden einzelnen Server. Es kann dennoch interessant sein z.B. eine Unterschreitung der Autonomiezeit mit einem Alarm zu versehen.

UPSMAN-API

Alle UPSMAN Programme verwenden das GENEREX eigene Kommunikationsprotokoll UPSMON, welches als API allen OEM Kunden zur Verfügung gestellt wird, um eigene Anwendungen zu erstellen. Ich habe hier nicht weiter gesucht, denn ich bezeichne mich selbst mal nicht als OEM und zudem kann ich ja mir den oben gezeigten Mitteln alles erreichen, was ich möchte. Aber da es schon sehr viele PRTG-Installationen gibt, könnte es für Generex als Hersteller vielleicht interessant sein, die HTTP-Push-Logik einfach schnell mal einzubauen um native auch PRTG zu unterstützen.

Serial zu IP

Die letzte Option bestände natürlich darin, die USV mit einem Netzwerk-Interface auszustatten. Die größeren USV-Systeme haben oft zumindest einen Slot zum Einschieben einer Netzwerkeinheit. Über diese können mehrere Server dann direkt mit der USV kommunizieren. Für die kleineren USV-Systeme gibt es derartige Lösungen zumindest nicht von Hause aus. Es gibt natürlich Zusatzboxen, die auf der einen Seite einen COM-Port haben und auf der anderen Seite dann SNMP, HTTP o.ä. bereitstellen. Sie müssen das Protokoll der USV kennen. Andere könnten auf den Gedanken kommen, einfach einen "Terminal Server" anzuschließen, mit dem ein Client per TCP sich über LAN mit der Box verbindet und diese dann die Eingaben 1:1 auf dem COM-Port weiter gibt. So könnte man wohl auch einen PRTG-Sensor bauen. Allen diesen Boxen ist gemein, dass Sie relativ "teuer" sind, zumindest wenn man den Preis einer kleinen USV mit 100-300€ zu Grunde legt.

Interessant wird das natürlich, wenn ich im Rahmen eines Bastelprojekts vielleicht mit einem ESP8266 SoC o.ä. eine direkte Kopplung des seriellen Ports an PRTG bereitstellen kann.

PRTG Support für UPSMAN

Am Beispiel einer Zinto E 800 haben ich aufgezeigt, wie sie auch eine kleine USV mit PRTG oder anderen Tools überwachen können, wenn ihnen die mitgelieferte Software zwar Schnittstellen bietet, aber Sie zusätzlich eine Einbindung in ihr Enterprise Monitoring haben wollen. Wenn die UPSMAN-Software von Generex wirklich bei vielen Anbietern zum Einsatz kommt und ihre USV doch etwas "kleiner" ist, dann gibt es eine große Menge an Systemen, die Sie mit PRTG oder wegen mir auch Nagios u.a. überwachen können.

Weitere Links