Der Letzte macht das Licht aus - USV anbinden mit den Network UPS Tools - Christian Knermann
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
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
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
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