Apcupsd
Содержание
Настройка apcupsd на ОС Альт
Я точно знаю, что оно должно работать, но не работает. Почему?
Потому что по умолчанию порт
/dev/ttyS0
занят сервисом
getty@ttyS0
, который задействует этот порт (обычно, единственный на сервере com-порт) для вывода туда программы
login
Чтобы, например, не держать монитор для сервера а зацепляться за консоль по гипертерминалу.
Отличное решение, но чтобы понять почему на нужный для обмена с UPS порт не происходит должным образом подключение посредством сервиса
apcupsd
у пользователя, в зависимости от квалификации и опыта, может уйти от одного дня до ... бесконечности...
Привет, Alt Linux Team :-)
Как всё сделать как надо?
1. Отключаем сервис, чтобы он больше не занимал порт
systemctl stop getty@ttyS0 systemctl disable getty@ttyS0
2. Поставить apcupsd
apt-get update && apt-get install -y apcupsd
3. Настроить и включить сервис на порту /dev/ttyS0
Конфиг файл
/etc/apcupsd/apcupsd.conf
должен содержать следующие параметры раскомментированными
UPSNAME apc UPSCABLE smart UPSTYPE apcsmart DEVICE /dev/ttyS0 LOCKFILE /var/lock/serial SCRIPTDIR /etc/apcupsd PWRFAILDIR /etc/apcupsd NOLOGINDIR /etc ONBATTERYDELAY 6 BATTERYLEVEL 5 MINUTES 3 TIMEOUT 0 ANNOY 300 ANNOYDELAY 60 NOLOGON disable KILLDELAY 0 NETSERVER on NISIP 127.0.0.1 NISPORT 3551 EVENTSFILE /var/lib/apcupsd/apcupsd.events EVENTSFILEMAX 10 UPSCLASS standalone UPSMODE disable STATTIME 0 STATFILE /var/lib/apcupsd/apcupsd.status LOGSTATS off DATATIME 0
Включить и запустить сервис
systemctl enable --now apcupsd
4. Проверка вручную
/sbin/apcaccess
ну и дальше на-grep-пать по вкусу, как это сделано ниже для интеграции с zabbix-агентом...
А если хочется в zabbix?
Скачать шаблон и импортировать в свою версию Zabbix
Качать отсюда
Далее этот импортированный шаблон нужно добавить на тот хост, на zabbix-agent-е которого настроены дополнительные пользовательские переменные (об этом см. ниже).
А сам процесс настройки пользовательских переменных для zabbix-агента заботливо описан в README.md на github по некоторой ссылке, которая отсутствует в свободном доступе...
Настраиваем zabbix-agent
Если ещё не установлен:
apt-get update && apt-get install -y zabbix-agent
После установки файл конфигурации агента
/etc/zabbix/zabbix_agentd.conf
нужно привести к виду:
LogFile=/var/log/zabbix/zabbix_agentd.log Server=%SERVER_ADDR% Hostname=%ZABBIX_AGENT_HOSTNAME% Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf
, где
%SERVER_ADDR%
это ip или домен сервера zabbix, а
%ZABBIX_AGENT_HOSTNAME%
это хостовое имя системы, на которой настраивается zabbix-agent.
Добавляем пользовательские параметры
Просто бросьте это к консоль:
cat << 'EOF' > /etc/zabbix/zabbix_agentd.conf.d/userparameter_apcupsd.conf UserParameter=UPSNAME,/sbin/apcaccess|awk '/^(UPSNAME).*:/ {print $3}' UserParameter=STATUS,/sbin/apcaccess|awk '/^(STATUS).*:/ {print $3,$4,$5}' UserParameter=ITEMP,/sbin/apcaccess|awk '/^(ITEMP).*:/ {print $3}' UserParameter=LOADPCT,/sbin/apcaccess|awk '/^(LOADPCT).*:/ {print $3}' UserParameter=NUMXFERS,/sbin/apcaccess|awk '/^(NUMXFERS).*:/ {print $3}' UserParameter=BCHARGE,/sbin/apcaccess|awk '/^(BCHARGE).*:/ {print $3}' UserParameter=SENSE,/sbin/apcaccess|awk '/^(SENSE).*:/ {print $3}' UserParameter=LINEV,/sbin/apcaccess|awk '/^(LINEV).*:/ {print $3}' EOF
Включить и запустить сервис
systemctl enable --now zabbix_agentd
А если хочется выключить сервер при длительной работе от аккумулятора и сигналить об этом в Telegram?
Источник [1]
Добавить соответствующий скрипт
Просто бросьте это в консоль
cat << 'EOF' > /etc/apcupsd/doshutdown #!/bin/bash TELEGRAM_BOT_TOKEN="ваш токен бота" TELEGRAM_DESTINATION_GROUP_ID="идентификатор чата, в который надо направлять сообщения" function send_message_telegram(){ message=${1} curl -s -X POST \ -H 'Content-Type: application/json' \ -d "{\"chat_id\": \"${TELEGRAM_DESTINATION_GROUP_ID}\", \"text\": \"${message}\", \"disable_notification\": true}" \ https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage > /dev/null } WALL=wall echo "Shutdown initiated by apcupsd" | ${WALL} send_message_telegram "Сетевое хранилище и сервер получили сигнал на выключение в связи с критическим уровнем заряда на ИБП" echo "Issuing shutdown command to STORAGE" | ${WALL} # например, выключаем хранилище, посредством выполнения команды через ssh (storage в данном случае это имя сервера хранилища, # доступ к которому настроен через ключи ssh) ssh storage "/sbin/poweroff" & echo "Issuing shutdown command to SERVER" | ${WALL} # например, даём команду прямо на сервере, где работает apcupsd /sbin/shutdown -h now & EOF
Сделать скрипт исполняемым
chmod +x /etc/apcupsd/doshutdown
Настроить параметры реагирования по вкусу
В файле
/etc/apcupsd/apcupsd.conf
есть несколько параметров, которые могут влиять на момент выполнение выше описанного скрипта
/etc/apcupsd/doshutdown
# этот параметр не совсем влияет на выполнение скрипта, но тоже полезен # он задаётся в секундах и определяет сколько секунд apcupsd будет игнорировать сигналы о пропадании питания ONBATTERYDELAY 6 # параметры BATTERYLEVEL, MINUTES и TIMEOUT (выкручен в 0, т.к. в основном нужен для не очень умных ИБП. Подробнее см. в оригинальном файле) # работают вместе. Влияют на выполнение скрипта по принципу "какое событие раньше наступит" # уровень заряда батареи ИБП в процентах (по мнению самого ИБП) BATTERYLEVEL 50 # количество времени в минутах, в течение которого ИБП недоступно электропитание, по истечении которого будет запущен скрипт doshutdown MINUTES 20
Например при такой конфигурации:
ONBATTERYDELAY 6 BATTERYLEVEL 50 MINUTES 20
скрипт
/etc/apcupsd/doshutdown
будет запущен или по достижении процента заряда аккумулятора ИБП в значение 50%, или через 20 минут после потери ИБП электропитания: в зависимости от того, что наступит раньше.
Сервер apcupsd при этом не будет реагировать на отключение электропитания в том случае, если отключение и подключение питания прошли в пределах 6-ти секунд
Важный параметр, некорректная настройка которого приведёт к непредвиденному выключению сервера!
Экспериментально было выяснено, что в файле
/etc/apcupsd/apccontrol
в конструкции case есть вариант
doshutdown) echo "UPS ${2} initiated Shutdown Sequence" | ${WALL} ${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown" ;;
, которая предполагает выполнение команды выключения сервера, на котором работает apcupsd.
Выключение произойдёт после выполнения выше описанного скрипта
/etc/apcupsd/doshutdown
(даже если в нём закомментировать вызов команды выключения сервера)
Таким образом, например, можно внезапно получить остановку сервера при тестировании (когда команда отключения сервера в скрипте не вызывается).
Следовательно, нужно отключить этот параметр. Для этого достаточно привести секцию внутри case к такому виду:
doshutdown) echo "UPS ${2} initiated Shutdown Sequence" | ${WALL} #${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown" ;;
затем перезапустить сервис apcupsd
Перезапуск сервера после перенастройки
После перенастройки конфигурационного файла нужно не забыть перезапустить сервер
systemctl restart apcupsd