Как контролировать состояние USB-ИБП через SNMP
Как контролировать состояние USB-ИБП через SNMP
Есть несколько компьютеров с ИБП, подключенным через USB. Все компьютеры используют программу apcupsd. Допустим, вы хотите собрать информацию о состоянии источника питания для каждого блока в одном месте. Поскольку snmpd там уже запущен, было бы логично расширить его функционал.
Приведенное ниже решение, любезно предоставленное Блог администратора, соберет данные сразу со всех модулей snmpd.
Чтобы отслеживать состояние USB-ИБП через SNMP, нам нужно сначала изменить конфигурацию демона snmp.
Препараты
Добавляет следующее в конфигурацию snmpd.conf.
# ИБП APC
пройти .1.3.6.1.4.1.318.1.1.1 / bin / sh /etc/snmp/apcupsd.sh
Содержимое сценария /etc/snmp/apcupsd.sh выглядит следующим образом.
#! / bin / sh -f # Проверить, что apcupsd подключен к сети. apcaccess> / dev / null 2> & 1 || exit 0 PLACE = ". 1.3.6.1.4.1.318.1.1.1" REQ = "$ 2" # Запрошенный OID # # Обрабатывать запросы SET, просто регистрируя присвоенное значение. # Обратите внимание, что такие "назначения" непостоянны, # а также не проверяются синтаксис или запрошенное значение. # если ["$ 1" = "-s"]; тогда. echo $ * >> /tmp/passtest.log. выход 0. fi # # GETNEXT запросы - определить следующий допустимый экземпляр. # если ["$ 1" = "-n"]; тогда. case "$ REQ" в. $ МЕСТО | \ $ PLACE.0 | \ $ PLACE.0. * | \ $ PLACE.1 | \ $ PLACE.1.1.0 *) RET = $ PLACE.1.1.1.0;; $ PLACE.1 * | \ $ PLACE.2.0 | \ $ PLACE.2.0. * | \ $ PLACE.2.1 | \ $ PLACE.2.2.0 *) RET = $ PLACE.2.2.1.0;; $ PLACE.2.2.1 *) RET = $ PLACE.2.2.2.0;; $ PLACE.2.2.2 *) RET = $ PLACE.2.2.3.0;; $ PLACE.2.2.3 *) RET = $ PLACE.2.2.4.0;; $ МЕСТО.2 * | \ $ PLACE.3.0 * | \ $ PLACE.3.1 * | \ $ PLACE.3.2.0 *) RET = $ PLACE.3.2.1.0;; $ PLACE.3.2.1 * | \ $ PLACE.3.2.2 * | \ $ PLACE.3.2.3 *) RET = $ PLACE.3.2.4.0;; $ PLACE.3.2.4 *) RET = $ PLACE.3.2.5.0;; $ PLACE.3.2 * | \ $ PLACE.4.0 * | \ $ PLACE.4.1 * | \ $ PLACE.4.2.0 *) RET = $ PLACE.4.2.1.0;; $ PLACE.4.2.1 *) RET = $ PLACE.4.2.2.0;; $ PLACE.4.2.2 *) RET = $ PLACE.4.2.3.0;; $ PLACE.4.2.3 *) RET = $ PLACE.4.2.4.0;; $ PLACE.4.2. * | \ МЕСТО.5 $ * | \ $ МЕСТО.6 * | \ $ PLACE.7.0 * | \ $ PLACE.7.1 * | \ $ PLACE.7.2.0 * | \ $ PLACE.7.2.1 * | \ $ PLACE.7.2.2 *) RET = $ PLACE.7.2.3.0;; $ PLACE.7.2.3 *) RET = $ PLACE.7.2.4.0;; $ МЕСТО.7 * | \ $ PLACE.8.0 *) RET = $ PLACE.8.1.0;; *) exit 0;; esac. еще. # # GET запросы - проверить действительный экземпляр. # case "$ REQ" в. $ PLACE.1.1.1.0 | \ $ PLACE.2.2.1.0 | \ $ PLACE.2.2.2.0 | \ $ PLACE.2.2.3.0 | \ $ PLACE.2.2.4.0 | \ $ PLACE.3.2.1.0 | \ $ PLACE.3.2.4.0 | \ $ PLACE.3.2.5.0 | \ $ PLACE.4.2.1.0 | \ $ PLACE.4.2.2.0 | \ $ PLACE.4.2.3.0 | \ $ PLACE.4.2.4.0 | \ $ PLACE.7.2.3.0 | \ $ PLACE.7.2.4.0 | \ $ PLACE.8.1.0) RET = $ REQ;; *) exit 0;; esac. fi # # "Обрабатывать" запросы GET * - возвращать жестко запрограммированное значение. # эхо "$ RET" case "$ RET" в. $ PLACE.1.1.1.0) echo "строка"; apcaccess -u -p МОДЕЛЬ; выход 0;; $ PLACE.2.2.1.0) echo "Gauge32"; apcaccess -u -p BCHARGE; выход 0;; $ PLACE.2.2.2.0) echo "Gauge32"; apcaccess -u -p ITEMP; выход 0;; $ PLACE.2.2.3.0) echo "Timeticks"; echo $ (($ (LC_ALL = C printf "%. * f" 0 $ (apcaccess -u -p TIMELEFT)) * 6000)); выход 0;; $ PLACE.2.2.4.0) echo "строка"; apcaccess -u -p BATTDATE; выход 0;; $ PLACE.3.2.1.0) echo "Gauge32"; apcaccess -u -p LINEV; выход 0;; $ PLACE.3.2.4.0) echo "Gauge32"; apcaccess -u -p LINEFREQ; выход 0;; $ PLACE.3.2.5.0) echo "строка"; apcaccess -u -p LASTXFER; выход 0;; $ PLACE.4.2.1.0) echo "Gauge32"; apcaccess -u -p OUTPUTV; выход 0;; $ PLACE.4.2.2.0) echo "Gauge32"; apcaccess -u -p LINEFREQ; выход 0;; $ PLACE.4.2.3.0) echo "Gauge32"; apcaccess -u -p LOADPCT; выход 0;; $ PLACE.4.2.4.0) echo "Gauge32"; apcaccess -u -p LOADPCT; выход 0;; $ PLACE.7.2.3.0) echo "строка"; apcaccess -u -p САМОСТОЯТЕЛЬНЫЙ ТЕСТ; выход 0;; $ PLACE.7.2.4.0) echo "строка"; apcaccess -u -p САМОСТОЯТЕЛЬНЫЙ ТЕСТ; выход 0;; $ PLACE.8.1.0) echo "Gauge32"; эхо 1; выход 0;; *) echo "строка"; echo "ack... $ RET $ REQ "; выход 0;; # Не должно произойти. esac.
Если вас интересуют OID, вы можете их найти ЗДЕСЬ. Обратите внимание, что некоторые модели ИБП не возвращают все параметры или в неправильном формате, поэтому код может содержать неточности и заглушки.
Теперь все готово.
Как контролировать состояние USB-ИБП через SNMP
Чтобы отслеживать состояние USB-ИБП через SNMP, выполните следующую команду: snmpwalk -v 1 -c общедоступный 127.0.0.1 .1.3.6.1.4.1.318.1.1.1
. Результат будет таким:
SNMPv2-SMI:: enterprises.318.1.1.1.1.1.1.0 = СТРОКА: «Smart-UPS 750»
SNMPv2-SMI:: enterprises.318.1.1.1.2.2.1.0 = Gauge32: 100
SNMPv2-SMI:: enterprises.318.1.1.1.2.2.2.0 = Gauge32: 36
SNMPv2-SMI:: enterprises.318.1.1.1.2.2.3.0 = Timeticks: (432000) 1: 12: 00.00
SNMPv2-SMI:: enterprises.318.1.1.1.2.2.4.0 = СТРОКА: «2020-05-14»
SNMPv2-SMI:: enterprises.318.1.1.1.3.2.1.0 = Gauge32: 227
SNMPv2-SMI:: enterprises.318.1.1.1.3.2.4.0 = Gauge32: 50
SNMPv2-SMI:: enterprises.318.1.1.1.3.2.5.0 = STRING: «Автоматическое или явное самотестирование»
SNMPv2-SMI:: enterprises.318.1.1.1.4.2.1.0 = Gauge32: 227
SNMPv2-SMI:: enterprises.318.1.1.1.4.2.2.0 = Gauge32: 50
SNMPv2-SMI:: enterprises.318.1.1.1.4.2.3.0 = Gauge32: 13
SNMPv2-SMI:: enterprises.318.1.1.1.4.2.4.0 = Gauge32: 13
SNMPv2-SMI:: enterprises.318.1.1.1.7.2.3.0 = СТРОКА: «НЕТ»
SNMPv2-SMI:: enterprises.318.1.1.1.7.2.4.0 = СТРОКА: «НЕТ»
SNMPv2-SMI:: enterprises.318.1.1.1.8.1.0 = Gauge32: 1
Если вы дополнительно настроите сценарий мониторинга, вы можете получить эти изящные графики: