Icinga плагин check_snmp_apc_ups_state для расширенного отслеживания аварийных состояний ИБП APC по данным, полученным по протоколу SNMP из параметра upsBasicStateOutputState

Icinga plugin check_snmp_apc_ups_state for APC UPS monitoringРанее мы рассматривали пример настройки мониторинга контроллеров управления источников бесперебойного питания (ИБП) марки APC в Icinga с использованием протокола SNMP. При этом мы использовали плагин check_snmp, который использовался для создания каждой отдельной службы Icinga, использующей простую логику сравнения полученного по SNMP показателя с неким допустимым значением. Однако такой подход позволяет отслеживать не все состояния ИБП, которые можно отнести к нештатным и требующим внимания администратора.

Намедни ко мне обратился коллега по работе и сказал, что обнаружил на одном из ИБП APC Symmetra в зоне своей ответственности вышедший из строя вентиляторный модуль. Но при этом на нашем экземпляре Icinga, который используется для мониторинга сетевых устройств, нет информации об этой аварии. В подтверждение ситуации он прислал мне скриншот в веб-интерфейса модуля Network Management Card (NMC).

APC UPS NMC System Level Fan Fault

Последующий анализ ситуации показал, что своевременное оповещение о проблеме слукавивший коллега от 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.

Icinga Director create Command Arguments for check_snmp_apc_ups_state plugin

После описания Команды останется создать Шаблон Службы (Service Template) (в нашем примере "APC UPS State Flags Template") с привязкой к этой Команде, а затем на основании Шаблона Службы создать Apply-Rule (в нашем примере "APC UPS State Flags") для динамического назначения соответствующей Службы на Хосты.

Icinga Director Service Template for check_snmp_apc_ups_state plugin

Конечный результат для штатно работающего ИБП APC будет выглядеть следующим образом:

APC UPS State Flags in good state

Для ИБП, имеющего какую-либо проблему, как, например, с вентиляторным модулем в нашей ситуации, статус будет соответствующий:

APC UPS States Flags in CRITICAL state

И если высылаемый в нашем случае SNMP трап при обнаружении неисправности вентилятора может иметь не совсем информативное содержимое типа "APC: An abnormal condition has been detected.: An abnormal condition has been detected.", то представленный плагин за счёт расшифровки флагов параметра upsBasicStateOutputState даёт администратору более чёткое понимание ситуации.

Только один комментарий Комментировать

  1. Обратная ссылка: Icinga плагин check_snmp_value_from_range (вхождение в диапазон) /

Добавить комментарий