Der Letzte macht das Licht aus - USV anbinden mit den Network UPS Tools - Christian Knermann

Die Seite wird erstellt Edith Pfeifer
 
WEITER LESEN
Der Letzte macht das Licht aus - USV anbinden mit den Network UPS Tools - Christian Knermann
USV anbinden mit den Network UPS Tools

Der Letzte macht
das Licht aus
von Dr. Christian Knermann

Mit einer unterbrechungsfreien Stromversorgung
schützen Sie angeschlossene Geräte vor Über-
spannung und Stromausfall. Sollte der Strom
längere Zeit ausbleiben, sorgen die "Network
UPS Tools" dafür, dass gleich mehrere Systeme

                                                                                                                                         Quelle: jagcz – 123RF
ordnungsgemäß herunterfahren, bevor die
Batterien erschöpft sind. IT-Administrator
stellt das Open-Source-Projekt vor.

        ine unterbrechungsfreie Stromver-     neten System läuft. Sowohl der Master         ist NUT schnell konfiguriert. Für unseren
     E  sorgung (USV) – im Englischen         selbst als auch mehrere Slaves genannte       Workshop verwenden wir im Folgenden
als Uninterruptible Power Supply (UPS)        Clients führen zusätzlich den "UPS mo-        den Kleinstcomputer Raspberry Pi sowie
bezeichnet – gehört in großen Rechen-         nitor and shutdown controller" (upsmon)       exemplarisch eine USV des Herstellers
zentren zur Grundausstattung. Doch auch       aus. Letzterer überwacht standardmäßig        APC. Wir nehmen hierbei an, dass das
in Außenstellen und im Home Office ha-        alle fünf Sekunden den Status des Masters     Betriebssystem "Raspbian Buster Lite"
ben kleinere Modelle ihre Daseinsberech-      und initiiert einen Shutdown, sobald die      [3] bereits installiert und mit Updates
tigung, helfen sie Ihnen im Ernstfall doch,   Batterie der angeschlossenen USV einen        versorgt ist.
PCs und NAS noch so lange mit Strom           kritischen Wert erreicht.
zu versorgen, dass Sie Ihre Systeme sauber                                                  Schließen Sie die USV per USB an den
herunterfahren können, ohne Datenver-         Sollen Clients bereits früher herunter-       Raspi an und verschaffen Sie sich an-
lust zu riskieren.                            fahren oder weitere Aktionen ausführen,       schließend per lsusb einen Überblick über
                                              hilft der optionale "Timer helper for sche-   den USB-Bus. In der Ausgabe sollten Sie
Damit das auch in einem unbeaufsich-          duling events from upsmon" (upssched).        die USV mitsamt ihrer ID wiederfinden.
tigten Moment gelingt, empfiehlt es sich,     Zu guter Letzt erfasst der "UPS status        Da in unserem Beispiel die USV das ein-
den Vorgang zu automatisieren. Aller-         logger" (upslog) periodisch den Zustand       zige angeschlossene Gerät ist, fällt die
dings verfügen USV-Modelle in entspre-        der USV und schreibt konfigurierbare          Rückgabe kurz aus. Die ID, in unserem
chender Größenordnung meist lediglich         Werte in eine Datei.                          Beispiel "051d:0002", besteht aus der Ven-
über eine USB-Schnittstelle, so dass sie                                                    dor-ID vor dem Doppelpunkt und der
im Notfall nur einen angeschlossenen          Optional sorgt eine Anbindung an das          Product-ID dahinter. Merken Sie sich bei-
Client über das drohende Unheil infor-        Trio Node-RED, InfluxDB und Grafana           de Werte zur späteren Verwendung. Mit
mieren können. Hier helfen die Network        für ein erweitertes Logging mitsamt gra-      dem Kommando ls /dev/usb finden Sie
UPS Tools (NUT) weiter [1].                   fischer Auswertung. Doch darauf werden        den Namen der zugehörigen Gerätedatei
                                              wir später zurückkommen. Wenden wir           "/dev/usb/ hiddevX" heraus, die als Para-
Modulare                                      uns nun zunächst dem grundlegenden            meter für den nächsten Befehl dient:
Client-Server-Architektur                     Setup zu.
Die Open-Source-Software bringt Treiber                                                     udevadm info --attribute-walk
für USV-Modelle von über 140 Herstel-         Raspberry Pi als Master                         --name=/dev/usb/hiddevX | egrep
lern mit und setzt auf einen modularen        NUT ist unter der Haube in den Be-              'manufacturer|product|serial'
Aufbau mit mehreren Daemons. Den              triebssystemen diverser etablierter NAS-
Kern bildet der "UPS Information Server"      Hersteller aktiv [2]. Doch auch falls Sie     Dieser verrät Ihnen zusätzlich zu Ven-
(upsd), der auf einem als Master bezeich-     kein solches System Ihr Eigen nennen,         dor- und Product-ID auch die Serien-

92       Juli 2020                                                                                            www.it-administrator.de
Der Letzte macht das Licht aus - USV anbinden mit den Network UPS Tools - Christian Knermann
USV anbinden            Schwerpunkt

nummer der USV. Nun installieren Sie         to start (exit status=1)" quittiert, deutet        SSL und TCP-Wrappers verzichten wir
NUT mitsamt allen Abhängigkeiten:            dies auf fehlende Zugriffsrechte hin. Sie          in unserem Testaufbau. Hierbei hilft die
                                             benötigen dann eine udev-Regel, die der            NUT-Dokumentation unter [5]. Nun feh-
sudo apt-get install nut                     Gruppe "nut" Zugriff auf das USB-Gerät             len noch Benutzerkonten, die der NUT-
                                             erteilt. Erzeugen Sie dazu die Datei "/etc/        Monitor für den Verbindungsaufbau be-
Der NUT-Monitor-Service wird an-             udev/rules.d/90-nut-ups.rules" mit fol-            nötigt. Fügen Sie am Ende der Datei "/etc/
schließend vergeblich versuchen zu star-     gendem Inhalt:                                     nut/upsd.users" noch die folgenden Sek-
ten, da der NUT-Server noch nicht kon-                                                          tionen hinzu:
figuriert ist.                               ACTION=="add", SUBSYSTEM=="usb",
                                               ATTR{idVendor}=="051d", ATTR{id-                 [localuser]
USV per USB ansteuern                          Product}=="0002", MODE="0660",                           password = 
Vergewissern Sie sich zunächst anhand          GROUP="nut"                                              upsmon master
der Hardware Compatibility List [4], wel-
cher Treiber für Ihre USV der passende       Lesen Sie das udev-Regelwerk neu ein:              [remoteuser]
ist, und fügen Sie der Konfigurationsdatei                                                              password = 
"/etc/nut/ups.conf " eine Sektion für Ihre   sudo udevadm control --reload                              upsmon slave
USV hinzu. Der String innerhalb der
eckigen Klammern ist dabei ein frei wähl-    sudo udevadm trigger                               Die Strings in den eckigen Klammern
barer Name:                                                                                     sind wiederum frei wählbar. Sie verfügen
                                             Anschließend sollte der Start des Treibers         damit über zwei User. Den einen werden
[UPS01]                                      per sudo upsdrvctl start gelingen.                 wir im Folgenden lokal auf dem Raspi
   driver = usbhid-ups                                                                          verwenden, der als Master agiert. Weitere
   port = auto                               Netzwerk und Benutzer                              Clients verwenden den zweiten User zum
   desc = "Back-UPS CS 650"                  konfigurieren                                      Zugriff über das Netzwerk als Slave. Kon-
   vendorid = "051d"                         Weiter geht es dann mit upsd. Ändern Sie           figurieren Sie abschließend upsd für den
   productid = "0002"                        in der Datei "/etc/nut/nut.conf " die letzte       automatischen Start und setzen Sie den
                                             Zeile zu "MODE=netserver". In der Datei            Dienst in Gang:
Falls mehrere USV mit identischen Ven-       "/etc/nut/upsd.conf " fügen Sie am Ende
dor- und Product-IDs am NUT-Server           die beiden folgenden Zeilen ein:                   sudo systemctl enable
angeschlossen sein sollten, verwenden Sie                                                         nut-server.service
in der Konfiguration alternativ die Seri-    LISTEN 127.0.0.1 3493
ennummer:                                    LISTEN  3493                         sudo systemctl start nut-server.
                                                                                                  service
[…]                                          Dies sorgt dafür, dass der Server unter
   desc = "Back-UPS CS650"                   der lokalen Loopback-Adresse und seiner            USV per Shell auslesen
   serial =               IP-Adresse im Netzwerk über den Port               Nun können Sie sich bereits mit dem
                                             TCP/3493 erreichbar ist. Auf die für den           NUT-Client davon überzeugen, ob der
Nun starten Sie den USV-Treiber mittels      produktiven Einsatz empfehlenswerte Ab-            Server funktioniert: upsc UPS01@localhost.
                                             sicherung der Kommunikation mittels                Das Kommando liefert eine Liste sämtli-
sudo upsdrvctl start

Der Befehl sollte darauf antworten mit:

Network UPS Tools - UPS driver con-
  troller 2.7.4
Network UPS Tools - Generic HID
  driver 0.41 (2.7.4)
USB communication driver 0.33
Using subdriver: APC HID 0.96

Startschwierigkeiten umschiffen
Falls der Befehl stattdessen den Start-
versuch mit einer Fehlermeldung der
Form "Can't claim USB device could not
detach kernel driver from interface 0:
Operation not permitted Driver failed        Bild 1: Der Node-RED-Flow bereitet Messwerte der USV auf und schreibt sie in eine Datenbank.

www.it-administrator.de                                                                                                      Juli 2020      93
Der Letzte macht das Licht aus - USV anbinden mit den Network UPS Tools - Christian Knermann
Sch w e rp unk t   USV anbinden

        cher Parameter Ihrer USV zurück. Nütz-
        lich sind hier etwa die Ladung der Batterie
        (battery.charge), deren Restlaufzeit in Se-
        kunden (battery.runtime) und der Status
        (ups.status). Im Regelbetrieb weist Letz-
        terer den Wert "OL", also online, aus.

        Sobald der Strom ausfällt, wechselt der
        Status zu "OB DISCHRG" (on battery,
        discharging). Kehrt der Strom zurück,
        weist der Status "OL CHRG" (online,
        charging) aus, bis er schließlich wieder
        zu "OL" wechselt, sobald die Batterie voll-
        geladen ist. Doch falls die Stromversor-
        gung nicht rechtzeitig wiederhergestellt
        werden solle, geht der Status zu "OB LB"
        (on battery, low battery) über. Und dies
        ist dann für upsmon auf den Slaves sowie
        anschließend auch auf dem Master das
        Signal, die Systeme herunterzufahren.         Bild 2: Grafana visualisiert den Betriebszustand der USV übersichtlich in einem Dashboard.

        upsmon auf Master und Slave                   sudo systemctl start nut-                            MODE=netclient
        Ergänzen Sie zur Inbetriebnahme von             monitor.service
        upsmon in der "/etc/nut/upsmon.conf "                                                              Weiterhin erzeugen Sie aus der Datei
        die Zeile                                     Windows-Client                                       "upsmon.conf.sample" die "upsmon.conf".
                                                      nur mit Workaround                                   Hier müssen Sie neben dem Ziel für den
        MONITOR UPS01@localhost 1 localuser           Das NUT-Projekt hat die Software auch                Monitor allerdings auch noch das Shut-
           master                         auf Windows portiert und stellt ein pas-             down-Kommando für Linux gegen die pas-
                                                      sendes MSI-Paket zur Installation bereit             sende Variante für Windows austauschen:
        und starten Sie den Daemon mit                [6]. Die Version verharrt allerdings leider
                                                      seit Jahren im Beta-Stadium und lässt sich           MONITOR UPS01@
        sudo systemctl enable                         nur mit einem Workaround für einen be-                 1 remoteuser  slave
          nut-monitor.service                         kannten Fehler zur Arbeit überreden [7].             (…)
        sudo systemctl start                                                                               SHUTDOWNCMD
          nut-monitor.service                         Installieren Sie das MSI-Paket und deak-               "C:\\WINDOWS\\system32\\shutdown.
                                                      tivieren Sie die Option "Install libUSB                exe -s -t 0"
        Auf einem Slave unter Linux installieren      driver", da wir das Windows-System nur
        Sie die Software ebenso:                      als Slave konfigurieren wollen. NUT re-              Abschließend starten Sie über die Com-
                                                      gistriert sich daraufhin als Dienst für den          puterverwaltung den Dienst "Network
        sudo apt-get install nut                      automatischen Start, startet aber nicht so-          UPS Tools", der sich daraufhin im Ereig-
                                                      fort. Laden Sie nun ein ZIP-Archiv herun-            nisprotokoll "Anwendung" als funktions-
        Die Konfiguration erfordert aber deutlich     ter, das fehlende Bibliotheken enthält [8].          fähig meldet.
        weniger Handgriffe. Ändern Sie in der
        Datei "/etc/nut/nut.conf " die letzte Zeile   Kopieren Sie die beiden Dateien libeay32.dll         Den Ernstfall proben
        zu MODE=netclient. In "/etc/nut/ups-          sowie ssleay32.dll aus dem Archiv nach               Damit verfügen wir nun über einen Mas-
        mon.conf " sorgt die Zeile                    "C:\Program Files (x86)\NUT\sbin". Wei-              ter mit zwei Slaves und die Stunde der
                                                      terhin kopieren Sie die Datei libgcc_s_dw2-          Wahrheit ist gekommen. Trennen Sie die
        MONITOR UPS01@ 1                1.dll aus "C:\Program Files (x86)\NUT\bin"           USV vom Stromnetz und warten Sie da-
          remoteuser  slave               ebenfalls nach ""C:\Program Files (x86)\             rauf, dass NUT die Shutdown-Prozedur
                                                      NUT\sbin". Damit ist NUT startklar.                  einleitet [9]. Die beginnt, sobald die USV
        dafür, dass upsmon über das Netzwerk                                                               zum Status "OB LB" wechselt. Wann dies
        mit upsd kommuniziert. Setzen Sie nun         Die weitere Konfiguration erledigen Sie              der Fall ist, hängt vom Modell der USV
        auch hier den Daemon in Gang:                 ähnlich der Linux-Variante unter "C:\Pro-            ab. Das hier verwendete Gerät von APC
                                                      gram Files (x86)\NUT\etc". Hier benennen             wartet, bis der Parameter "battery.charge.
        sudo systemctl enable nut-                    Sie die "nut.conf.sample" zu "nut.conf" um           low", also zehn Prozent Restkapazität der
          monitor.service                             und passen die letzte Zeile an:                      Batterie, erreicht ist.

       94      Juli 2020                                                                                                        www.it-administrator.de
USV anbinden           Schwerpunkt

Die Slaves erhalten dann vom Master           npm install node-red-contrib-unit-              wandelt im ersten Panel oben links den
die Anweisung herunterzufahren, was             converter                                     Zahlenwert des USV-Status zurück in
sie nach einer mittels des Parameters         npm install node-red-node-email                 Text mitsamt passender farblicher Dar-
FINALDELAY in der upsmon.conf de-                                                             stellung. Alle weiteren Werte sind als Pa-
finierten Frist auch tun werden. Der          npm audit fix                                   nel vom Typ "Gauge" konfiguriert.
Standardwert für diese Frist ist fünf Se-
kunden. Der Master wartet zusätzlich          Daraufhin starten Sie Node-RED neu:             Fazit
die im Parameter HOSTSYNC konfigu-                                                            Die Server mit USVs vor Stromausfällen
rierte Zeitspanne, typischerweise weitere     sudo systemctl restart nodered.                 abzusichern, ist eine sinnvolle Sache. Mit
15 Sekunden, bevor auch er herunter-            service                                       dem einmaligen Installieren entsprechen-
fährt und als letzte Amtshandlung die                                                         der Systeme ist es allerdings nicht getan.
USV selbst abschaltet.                        Nun legen Sie eine leere Datenbank an,          Vielmehr wollen diese auch überwacht
                                              die später die Messwerte der USV auf-           sowie für Ihre Umgebung passend kon-
Durch Ändern der Parameter FINALDE-           nehmen wird:                                    figuriert werden. Und für den Fall der
LAY sowie HOSTSYNC passen Sie das                                                             Fälle müssen Sie das Prozedere vorab ein-
Ganze nach Ihren Wünschen an. Noch            sudo influx -execute 'CREATE                    deutig festlegen.
deutlich flexibler erweist sich der Einsatz     DATABASE apcbackupscs650'
von upssched, falls Sie nicht bis zum Sta-                                                    Mit den Network UPS Tools binden Sie
tus "OB LB" warten oder zusätzliche           Einen Flow aufbauen                             mehrere Slaves an Ihre Notstromversor-
Kommandos skripten möchten [10].              So gerüstet, bauen Sie nun im Frontend          gung an und sorgen so dafür, dass Ihre Sys-
                                              von Node-RED einen Flow auf, der                teme im Ernstfall geordnet schlafen gehen.
Grafisches Monitoring                         Werte der USV abfragt und in die Da-            Dabei behalten Sie per Node-RED und
Bis hierher erwies sich die Arbeit mit        tenbank befördert. Eine fertige Vorlage         Grafana grafisch aufbereitet stets den Zu-
NUT als sehr textlastig und auch die in-      für einen Flow sowie ein passendes Gra-         stand Ihrer USV im Blick Das Einrichten
tegrierte Logging-Funktion mittels ups-       fana-Dashboard zum Import finden Sie            geht dabei leicht von der Hand. (dr)
log wendet dies leider nicht zum Besse-       unter [12]. Der Flow verwendet einen
ren, da NUT seine Status-Informationen        Knoten vom Typ "inject" als Zeitgeber,           Link-Codes
von Haus aus lediglich in Textdateien         der periodisch – in diesem Beispiel mi-
schreibt. Wer Monitoring und Alarmie-         nütlich – einen Eingabeknoten vom Typ              [1] Network UPS Tools
                                                                                                     k7z01
rung komfortabler gestalten möchte,           "nut ups" triggert (Bild 1). Letzterer stellt
bindet NUT an die Workflow-Engine             dann sämtliche Werte bereit, die Sie               [2] NUT-Integrationen
                                                                                                     bei NAS-Herstellern
Node-RED an, schreibt die Messwerte           auch per upsc in der Linux-Shell abfra-
                                                                                                     k7z02
der USV von dort in die Zeitreihen-Da-        gen können.
                                                                                                 [3] Raspbian Buster Lite
tenbank InfluxDB und visualisiert das
                                                                                                     hbp51
Ganze mittels Grafana.                        Ein Knoten vom Typ "Funktion\ func-
                                              tion" sorgt jeweils dafür, den empfange-           [4] Hardware Compatibility List
                                                                                                     k7z04
Nebenbei verschickt Node-RED auch             nen Wert für die Datenbank aufzuberei-
noch E-Mails, sobald sich der Online-Sta-     ten. Im Falle der Restlaufzeit wandelt zu-         [5] NUT-Dokumentation
                                                                                                     k7z05
tus der USV verändert. Im Folgenden           vor noch die Funktion "unit converter"
nehmen wir an, dass die drei Open-            Sekunden in Minuten um. Den Status der             [6] MSI-Paket
                                                                                                     k7z06
Source-Produkte bereits grundsätzlich         USV wertet der Flow gleich zweimal aus.
eingerichtet sind. Wie dies gelingt, hatten   Zum einen landet dieser übersetzt auf ei-          [7] Workaround für Windows-Client
                                                                                                     k7z07
wir in unserem Workshop zum Internet          nen Zahlenwert in der Datenbank, zum
der Dinge erläutert [11].                     anderen reagiert Node-RED auf jede Än-             [8] Archiv mit fehlenden Bibliotheken
                                                                                                     k7z08
                                              derung und verschickt eine E-Mail an die
Workflow-Engine anbinden                      im Knoten mit dem Namen "Mail notice"              [9] Shutdown-Prozedur
                                                                                                     k7z09
Nun wollen wir Node-RED für die An-           konfigurierte Ziel-Adresse.
bindung von NUT ertüchtigen. Installie-                                                         [10] Verwenden von upssched
ren Sie dazu das Node-RED-Modul für           Mit Grafana visualisieren                              k7z00
NUT und auch den Einheiten-Rechner            Vorausgesetzt, dass auch in Grafana eine          [11] Workshop: Bestandteile und
sowie die E-Mail-Erweiterung, falls noch      Verbindung zur Datenbank mit den                       Aufbau eines IoT,
                                                                                                     IT-Administrator 09/2019
nicht vorhanden:                              Messwerten der USV konfiguriert ist, im-
                                                                                                     k7z0a
                                              portieren Sie das Dashboard und gelan-
                                                                                               [12] Flow-Vorlage und
cd /home/pi/.node-red/node_modules            gen so zu einer grafischen Auswertung,
                                                                                                    passendes Grafana-Dashboard
                                              mit der Sie den Zustand Ihrer USV stets
                                                                                                    k7z0b
npm install node-red-contrib-nut-ups          im Blick haben (Bild 2). Das Dashboard

Link-Codes eingeben auf www.it-administrator.de                                                                            Juli 2020     95
Sie können auch lesen