Мониторинг ИБП на сервере: NUT и apcupsd вместо бумажной «как-нибудь переживём»
Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. За 15 лет сопровождения серверных в офисах на 30–500 рабочих мест я видел десятки случаев, когда дорогой ИБП стоит на стойке, моргает красным огоньком и никак не связан с серверами, которые он должен защищать. Свет мигнул — сервер ушёл на холодный рестарт, SQL-база Битрикс24 слетела в recovery, а бухгалтерия полдня ждёт, пока 1С поднимется. А решается всё одной грамотной связкой Network UPS Tools или apcupsd.
Зачем мониторить ИБП программно
Я всегда повторяю на аудитах: ИБП без софтового мониторинга — это батарейка, а не защита. Физический ИБП даёт только буфер времени. Если софт не знает, что питание пропало, сервер доработает до полного разряда батарей и получит резкое отключение. Последствия — повреждение файловых систем, журналов СУБД, иногда контроллеров RAID.
Задачи софтового мониторинга на практике три:
- Узнать, что 220В пропало, и отсчитать время, на которое осталось питание.
- Корректно выключить виртуальные машины и гипервизор по достижении порога (заряд/время).
- Отправить алерт в Telegram и на почту — чтобы админ знал и доехал до офиса.
У нас на практике ни один клиент, у которого настроен NUT с алертами, не терял данные при внезапном отключении питания. А без него — минимум раз в год всплывает «у нас тут в пятницу вечером свет мигнул, сервер не стартует».
NUT против apcupsd: что выбрать
Два основных инструмента в мире Linux — Network UPS Tools (NUT) и apcupsd. Оба старые, стабильные, работают на Debian/Ubuntu/CentOS/Proxmox/TrueNAS. Но у каждого своя ниша.
| Критерий | NUT | apcupsd |
|---|---|---|
| Поддержка ИБП | APC, Eaton, CyberPower, Ippon, PowerCom, Riello — сотни моделей | Только APC (USB + SNMP через NIS) |
| Протоколы | USB, Serial, SNMP, XML/HTTP | USB, SNMP (ограниченно) |
| Мастер/слейв | Да, один сервер обслуживает несколько клиентов | Да, через NIS |
| Сложность настройки | Средняя (4 конфига) | Низкая (1 конфиг) |
| Интеграция с Proxmox | Есть статьи, плагины | Есть, проще |
Правило простое: один сервер + один ИБП APC — apcupsd. Смешанный парк ИБП или кластер из двух гипервизоров, питающихся от одного ИБП через сеть — NUT. На наших клиентах с Eaton 9130 и Ippon Innova RT я всегда ставлю только NUT.
Установка и настройка apcupsd на Debian/Proxmox
Самый быстрый сценарий — Proxmox-хост с APC Smart-UPS подключён по USB. Ставим пакет:
apt update
apt install apcupsd apcupsd-cgi -y
# Проверяем, что ИБП увиделся по USB
lsusb | grep -i american
# Bus 001 Device 004: ID 051d:0002 American Power Conversion
Правим /etc/apcupsd/apcupsd.conf:
UPSNAME smartups1500
UPSCABLE usb
UPSTYPE usb
DEVICE
LOCKFILE /var/lock
ONBATTERYDELAY 10
BATTERYLEVEL 30
MINUTES 5
TIMEOUT 0
ANNOY 60
ANNOYDELAY 300
NOLOGON disable
KILLDELAY 0
NETSERVER on
NISIP 127.0.0.1
NISPORT 3551
Включаем автозапуск и тестируем:
sed -i 's/ISCONFIGURED=no/ISCONFIGURED=yes/' /etc/default/apcupsd
systemctl enable --now apcupsd
apcaccess status
Вывод должен показать STATUS ONLINE, LINEV ~220V, LOADPCT, BCHARGE 100%. Если увидели — настройка прошла.
Установка и настройка NUT с нуля
NUT состоит из четырёх компонентов: upsd (сервер опроса), upsmon (мониторинг), upslog (логгер) и upscmd (команды). Ставим всё:
apt install nut nut-client nut-server -y
Первый конфиг — /etc/nut/ups.conf. Описываем подключённый ИБП:
[eaton9130]
driver = usbhid-ups
port = auto
desc = "Eaton 9130 3kVA, стойка 1"
vendorid = 0463
Второй — /etc/nut/upsd.conf:
LISTEN 127.0.0.1 3493
LISTEN 10.10.10.5 3493
Третий — /etc/nut/upsd.users — учётки:
[monuser]
password = S3cr3tM0nP4ss
upsmon master
[admin]
password = S3cr3tAdmPass
actions = SET
instcmds = ALL
Четвёртый — /etc/nut/upsmon.conf:
MONITOR eaton9130@localhost 1 monuser S3cr3tM0nP4ss master
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /etc/nut/notify.sh
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
MINSUPPLIES 1
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
Режим работы NUT задаётся в /etc/nut/nut.conf: MODE=standalone для одного сервера или netserver, если другие хосты будут подключаться по сети. Перезапуск:
systemctl restart nut-server nut-client
upsc eaton9130@localhost
Скрипт алертов в Telegram
Сам по себе NUT пишет только в syslog. Я всегда добавляю скрипт, который отсылает уведомление в Telegram по трём событиям: OnBattery, LowBattery, OnLine. Файл /etc/nut/notify.sh:
#!/bin/bash
TOKEN="123456:AAEx..."
CHAT_ID="-1001234567890"
MSG="$(hostname): $NOTIFYTYPE на $UPSNAME — $(upsc $UPSNAME ups.status 2>/dev/null)"
curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
-d "chat_id=${CHAT_ID}" \
-d "text=${MSG}" >/dev/null
Не забудьте chmod +x и привязать в upsmon.conf через NOTIFYCMD. Дополнительно в том же конфиге задаются сами уведомления:
NOTIFYFLAG ONBATT SYSLOG+EXEC
NOTIFYFLAG LOWBATT SYSLOG+EXEC
NOTIFYFLAG ONLINE SYSLOG+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+EXEC
Реальный кейс: тюнинг защиты юридической фирмы
В марте 2026 года ко мне обратилась юрфирма в центре Москвы — 42 рабочих места, один Proxmox-сервер на Dell Xeon Platinum 8280, ИБП APC Smart-UPS 1500VA. Ранее ИБП стоял «для галочки», без мониторинга. За полгода трижды случался внезапный рестарт после кратковременных отключений, один раз база 1С ушла в recovery на 6 часов.
За один выезд мы подключили USB-кабель от ИБП к хосту, поставили NUT в режиме standalone, прописали shutdown всех VM через скрипт на upssched, настроили Telegram-бот. Пороги: 180 секунд на батарее или 30% заряда — отдаём команду остановки, ещё 60 секунд на завершение VM, потом halt гипервизора. Проверили живым тестом: вытащили кабель 220В, засекли секундомер. Через 3 минуты 12 секунд сервер ушёл в чистое выключение, база Битрикс24 и 1С вернулись без потерь при включении. Стоимость работ — 18 000 руб.
Мониторинг через Zabbix и Grafana
NUT отдаёт метрики через upsc. Zabbix-агент с шаблоном UPS NUT собирает: заряд батареи, runtime, нагрузку, статус, входное/выходное напряжение, частоту. У нас на практике порог алерта — BCHARGE < 80% (деградация батареи), LOADPCT > 75% (перегруз), STATUS != OL (не в режиме онлайн).
# Основные метрики для мониторинга
upsc eaton9130 | grep -E "battery.charge|ups.load|ups.status|input.voltage|battery.runtime"
battery.charge: 100
battery.runtime: 2340
input.voltage: 229.0
ups.load: 38
ups.status: OL
Для Grafana подходит Prometheus-exporter prometheus-nut-exporter — собирает те же метрики и визуализирует историю напряжения, времени на батарее, циклов перехода ON/OFF.
Типичные ошибки и грабли
За годы мы собрали стабильный список проблем, на которые наступают при первой настройке:
- USB-кабель не от производителя. Стандартный USB-B в APC Smart-UPS работает, но у Eaton и Ippon свой проприетарный порт — без фирменного кабеля ИБП не опознается.
- Два процесса на один USB-порт. Если запустить одновременно NUT и apcupsd, они блокируют устройство по очереди. Удалите ненужный пакет, иначе будете ловить random errors.
- Shutdown не доходит до VM. На Proxmox нужен скрипт, который останавливает VM через
qm shutdownи только потом халтит хост. Прямой shutdown хоста убивает VM по таймауту. - Забыли про fsck у VM. Если в гостевой системе Windows включена гибернация или BitLocker, грязное выключение всё равно ведёт к CHKDSK при старте. Отключайте hibernate, fastboot, настройте quiet shutdown.
- Игнорируют батарею. Батареи в ИБП живут 3–5 лет. BCHARGE всегда 100%, но реальный runtime падает. Раз в полгода делайте
upscmd eaton9130 test.battery.start.deepи проверяйте результаты.
Настроим мониторинг ИБП для вашей серверной
Поставим NUT или apcupsd, протестируем shutdown живым отключением 220В, подключим Telegram-алерты и Zabbix. Делаем под ключ за 1–2 выезда. Проверяем батареи, перекоммутируем стойку, оформляем паспорт питания серверной.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — частые вопросы
- Что лучше — NUT или apcupsd?
- NUT поддерживает сотни моделей ИБП разных производителей и работает по сети. apcupsd заточен под APC и проще в настройке при одном сервере с одним ИБП. В смешанном парке я всегда ставлю NUT.
- Нужен ли ИБП с сетевой картой?
- Для одного сервера хватит USB. Если у вас два сервера и один ИБП, либо ИБП стоит в стойке отдельно от хоста — берите модель с сетевой картой AP9630/AP9641 или внешним SNMP-адаптером.
- Через сколько секунд после пропадания 220В выключать сервер?
- Рекомендую порог 180 секунд либо 30% остаточного заряда — в зависимости от того, что наступит раньше. Это даёт буфер на кратковременные отключения и гарантированный чистый shutdown до полного разряда.
- Как проверить, что shutdown реально сработает?
- Проведите реальный тест: выдерните кабель 220В из ИБП при работающих сервере и клиентах. Сервер должен уйти в shutdown по заданному порогу, все VM должны корректно выключиться, журнал NUT — содержать событие OB LB.
- Можно ли мониторить ИБП через Zabbix?
- Да. NUT предоставляет upsc-интерфейс, через который Zabbix-агент собирает charge, runtime, load, status. Шаблон UPS NUT публично доступен в zabbix-share. Альтернатива — прямой SNMP-опрос сетевой карты ИБП.