Beszereztem egy CyberPower VP1000ELCD szünetmentes tápegységet a szerverhez és az ISZ routeréhez. A szerver USB-n keresztül tud kommunikálni a UPS-sel, amit a NUT projekt tesz egyszerűvé, ezt fogjuk telepíteni és konfigurálni.
Mi ellen ad védelmet e UPS:
- áramkimaradás miatti leállás (gyors átkapcsolás akkura, majd kb. 10 perc áthidalási idő, ami általában elég);
- egy szabálytalan leállás okozta adatvesztés vagy fájlrendszer-inkonzisztencia (alacsony akkuszintnél szabályos leállítás);
- rövid időtartamú túlfeszültség, feszültségtüskék;
- hosszabb időtartamú feszültségingadozás (line‑interactive AVR).
Telepítés
# apt install nut
$ echo "MODE=standalone" | sudo tee -a /etc/nut/nut.conf
# nano /etc/nut/ups.conf
# upsdrvctl start
$ # pwgen -N1 20
# nano /etc/nut/upsd.users
# nano /etc/nut/upsmon.conf
# systemctl restart nut-server nut-monitor
/etc/nut/ups.conf:
[cyberpower]
driver = usbhid-ups
port = auto
desc = "CyberPower VP1000ELCD"
pollinterval = 15
/etc/nut/upsd.users:
[admin]
password = ezittkamujelszo
actions = SET
instcmds = ALL
/etc/nut/upsmon.conf:
MONITOR cyberpower@localhost 1 admin ezittkamujelszo primary
Tesztelés és egyéb:
$ # NUT client: print configured UPS names with their description for localhost
$ upsc -L
$ # NUT client: print UPS data
$ upsc cyberpower
$ # UPS admin: print supported commands
$ upscmd -l cyberpower
$ # config: suppress SSL warning
$ echo "export NUT_QUIET_INIT_SSL=1" | tee -a ~/.profile
Áramkimaradások naplózása
A upsmon kliens automatikusan naplózza a UPS állapotváltozásait is a journal-ba. Ám mivel a journal bármikor üríthető, illetve a retenciós beállításai változhatnak, célszerű lenne külön naplóba gyűjteni a számunkra fontos eseményeket. Csináljunk erre egy szkriptet, amelyet ütemezhetünk.
# nano /usr/local/bin/export-nut-events.sh
# chmod +x /usr/local/bin/export-nut-events.sh
A szkript tartalma:
#!/usr/bin/env bash
# Cél: másolja a UPS eseményeket a journal-ból.
# hová:
LOGFILE="/var/log/ups-events.json"
# mikortól: elmúlt 24 óra
SINCE="-1d"
# journal lekérdezés JSON formátumban
journalctl --unit=nut-monitor --since="$SINCE" \
-o json \
| jq -c 'select(.MESSAGE | test("on battery|on line power|battery low|shutdown")) | {__CURSOR, __REALTIME_TIMESTAMP, _TRANSPORT, _SYSTEMD_UNIT, PRIORITY, MESSAGE}' \
>> "$LOGFILE"
Tegyünk a root crontab-jába egy napi időzítést:
25 2 * * * /usr/local/bin/export-nut-events.sh