Ранее мы рассматривали пример настройки мониторинга контроллеров управления источников бесперебойного питания (ИБП) марки APC в Icinga с использованием протокола SNMP. При этом мы использовали плагин check_snmp, который использовался для создания каждой отдельной службы Icinga, использующей простую логику сравнения полученного по SNMP показателя с неким допустимым значением. Однако такой подход позволяет отслеживать не все состояния ИБП, которые можно отнести к нештатным и требующим внимания администратора.
Намедни ко мне обратился коллега по работе и сказал, что обнаружил на одном из ИБП APC Symmetra в зоне своей ответственности вышедший из строя вентиляторный модуль. Но при этом на нашем экземпляре Icinga, который используется для мониторинга сетевых устройств, нет информации об этой аварии. В подтверждение ситуации он прислал мне скриншот в веб-интерфейса модуля Network Management Card (NMC).
Последующий анализ ситуации показал, что своевременное оповещение о проблеме слукавивший коллега от Icinga всё-таки получил, так как у нас помимо опроса базовых параметров по SNMP настроена ещё и ловля SNMP-трапов с сетевых устройств. Но не смотря на это мне захотелось, чтобы статус устройства в Icingа давал более внятное положение вещей.
В качестве точки опоры был взят документ SNMP Monitoring for Smart-UPS - SNMP Metrics Catalogue, ref: PowerNet MIB, UPS MIB RFC-1628, в котором было обнаружено наиболее актуальное описание одного интересного параметра, значение которого можно вытягивать с NMC по SNMP:
upsBasicStateOutputState OID: 1.3.6.1.4.1.318.1.1.1.11.1.1
Возвращаемое этим параметром значение представляет собой строку ASCII, содержащую 64 динамически меняющихся флага, в каждом из которых возможно значение "1" или "0". Самый первый флаг определяет штатность работы ИБП ("0" – штатно, "1" – есть проблемы). Каждый последующий флаг отвечает за то или иное состояние ИБП, либо состояние какой-то отдельной компоненты ИБП. Например, в нашем случае с проблемного ИБП данный OID возвращает строку вида:
1001010000000001001000000000000000000000000000000000000000000000
В данном случае 16-ый флаг в значении "1" определяет наличие проблемы с вентилятором, что приводит к автоматической установке первого флага в значение "1". Описания всех флагов добавлены в нашу отдельную заметку в Вики: Идентификаторы OID для мониторинга модулей управления ИБП APC Network Management Card по протоколу SNMP.
Стало очевидно, что с точки зрения выше упомянутой логики простейшего мониторинга с помощью плагина check_snmp, нельзя односложно интерпретировать данные, получаемые из этого OID. Поэтому был написан отдельный плагин мониторинга для Icinga, позволяющий получить и интерпретировать интересующую нас строку данных в читаемый вид и изменить текущий статус объекта мониторинга в Icinga.
Плагин check_snmp_apc_ups_state работает по аналогии с плагином check_snmp, но имеет более узкую специализацию, так как работает только с предопределённым конкретным OID.
Скачать плагин можно c GitHub.
Плагин использует для своей работы утилиту snmpget и имеет встроенную справку с описанием допустимых параметров вызова:
# /usr/lib/nagios/plugins/check_snmp_apc_ups_state.sh --help
Icinga Plugin Check Command to calculate APC UPS current state (from SNMP data), version 2019.09.16
Usage: /usr/lib/nagios/plugins/check_snmp_apc_ups_state.sh [OPTIONS]
Option GNU long option Meaning
------ --------------- -------
-H --hostname Host name, IP Address
-P --protocol SNMP protocol version. Possible values: 1|2c|3
-C --community SNMPv1/2c community string for SNMP communication (for example,public)
-L --seclevel SNMPv3 securityLevel. Possible values: noAuthNoPriv|authNoPriv|authPriv
-a --authproto SNMPv3 auth proto. Possible values: MD5|SHA
-x --privproto SNMPv3 priv proto. Possible values: DES|AES
-U --secname SNMPv3 username
-A --authpassword SNMPv3 authentication password
-X --privpasswd SNMPv3 privacy password
-q --help Show this message
-v --version Print version information and exit
Пример использования плагина на ИБП, имеющем проблему с вентилятором:
# /usr/lib/nagios/plugins/check_snmp_apc_ups_state.sh -H kom-up003.holding.com -P 2c -C public
APC UPS State CRITICAL
Current active flags:
Flag 01: Abnormal Condition Present
Flag 04: On Line
Flag 06: Serial Communication Established
Flag 16: In Bypass due to Fan Failure
Flag 19: On
В Icinga Director плагин подключается по аналогии с примерами, которые мы уже рассматривали ранее в цикле заметок об Icinga. При описании Команды (Icinga Command) в Icinga Director для определения значений аргументов, передаваемых плагину можно использовать те же Поля Данных (Data Field), которые были созданы на этапе настройки поддержки SNMP.
После описания Команды останется создать Шаблон Службы (Service Template) (в нашем примере "APC UPS State Flags Template") с привязкой к этой Команде, а затем на основании Шаблона Службы создать Apply-Rule (в нашем примере "APC UPS State Flags") для динамического назначения соответствующей Службы на Хосты.
Конечный результат для штатно работающего ИБП APC будет выглядеть следующим образом:
Для ИБП, имеющего какую-либо проблему, как, например, с вентиляторным модулем в нашей ситуации, статус будет соответствующий:
И если высылаемый в нашем случае SNMP трап при обнаружении неисправности вентилятора может иметь не совсем информативное содержимое типа "APC: An abnormal condition has been detected.: An abnormal condition has been detected.", то представленный плагин за счёт расшифровки флагов параметра upsBasicStateOutputState даёт администратору более чёткое понимание ситуации.
Обратная ссылка: Icinga плагин check_snmp_value_from_range (вхождение в диапазон) /