Продолжая тему мониторинга сетевых устройств по протоколу SNMP в Icinga на примере модулей управления источников бесперебойного питания (ИБП), можно в очередной раз отметить тот факт, что рассмотренная ранее схема с использованием плагина check_snmp дает нам лишь базовые возможности обработки получаемых по SNMP данных. Когда описанным базовым методом мы начали мониторить входное напряжение ИБП разных производителей и разных моделей, со временем пришли к выводу, что использование статически заданных границ (верхней и нижней) для входного напряжения – не очень приемлемый вариант. Проблема заключалась в том, что даже в рамках одной марки ИБП в нашем окружении присутствует множество разных моделей, каждая из которых имеет свои допустимые рабочие диапазоны входного напряжения. При этом на некоторых моделях ИБП эти диапазоны могут регулироваться администратором, как в сторону сужения, так и в сторону расширения.
По началу возникла идея попросту персонализировать Службы Icinga, связанные с мониторингом входного напряжения для устройств, выбивающихся из общих, заданных для всех однотипных ИБП, границ. Но со временем стало понятно, что такой вариант настройки Служб Icinga неудобен и трудозатратен пропорционально расширению модельного ряда ИБП. При этом нам известно, что практически все марки и модели ИБП наряду с текущим значением входного напряжения по протоколу SNMP могут возвращать и значения нижней/верхней границы рабочего напряжения, заданные на каждом отдельно взятом ИБП.
Например, для ИБП марки APC мониторить входное напряжение можно, используя следующие OID:
- 1.3.6.1.4.1.318.1.1.1.3.2.1.0 – Текущее входное напряжение (VAC)
- 1.3.6.1.4.1.318.1.1.1.5.2.2.0 – Верхняя допустимая граница (VAC)
- 1.3.6.1.4.1.318.1.1.1.5.2.3.0 – Нижняя допустимая граница (VAC)
В Вики можно найти соответствующие OID для других марок ИБП, например для Eaton Powerware и Hewlett-Packard.
Учитывая возможности представленных OID, был создан отдельный плагин мониторинга к Icinga - check_snmp_value_from_range. Данный плагин работает по аналогии с плагином check_snmp, но имеет иную структуру входных параметров и отдельный принцип обработки полученных по SNMP данных. Проще говоря, используя утилиту snmpget плагин получает с сетевого устройства данные сразу трех OID (текущего значения, верхней и нижней границы) и проверяет вхождение текущего значения в допустимую "вилку".
Скачать плагин можно c GitHub.
Плагин имеет встроенную справку с описанием допустимых параметров вызова:
# /usr/lib/nagios/plugins/check_snmp_value_from_range.sh --help Icinga Plugin Check Command to get value status from range of values (from SNMP data), v.2018.01.31 Usage: /usr/lib/nagios/plugins/check_snmp_value_from_range.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 -i --oid-curr OID for monitoring -m --oid-min OID for low limit of value from oid-curr -M --oid-max OID for high limit of value from oid-curr -E --exit-code Script exit code (if value from oid-curr not in range of values oid-min - oid-max). Possible values: 1|2 -u --units Units of value from oid-curr -l --perfdata-label Label for perfomance data output (perfdata enabled if label not empty) -q --help Show this message -v --version Print version information and exit
Пример использования плагина на ИБП APC Symmetra:
# /usr/lib/nagios/plugins/check_snmp_value_from_range.sh -H kom-up003.holding.com -P 2c -C "public" -i "1.3.6.1.4.1.318.1.1.1.3.2.1.0" -m "1.3.6.1.4.1.318.1.1.1.5.2.3.0" -M "1.3.6.1.4.1.318.1.1.1.5.2.2.0" -E 1 -u "VAC" -l "upsAdvInputLineVoltage"
OK - 230 VAC (allowed range: 155 - 276 VAC) | 'upsAdvInputLineVoltage'=230;;;155;276
В Icinga Director плагин подключается по аналогии с примерами, которые мы уже рассматривали ранее в цикле заметок об Icinga. При описании Команды (Icinga Command) в Icinga Director для определения значений аргументов, передаваемых плагину можно использовать те же Поля Данных (Data Field), которые были созданы на этапе настройки поддержки SNMP.
Дополнительно здесь потребуется лишь создать Поля Данных $snmp_oid_max$, $snmp_oid_min$, $plugin_exit_code$ для передачи значений в аргументы, определяющие OID верхней границы, OID нижней границы и код возврата плагина соответственно.
Поля (Fields) Команды будут определяться таким образом, чтобы Шаблоны Служб, использующие эту Команду имели возможность отдельной настройки параметров OID "вилки", OID текущего значения для сравнения с "вилкой" и прочих параметров:
После описания Команды создадим Шаблон Службы (Service Template), общий для отдельного класса устройств, например, ИБП. В этом Шаблоне Службы можно определить общие для ИБП любых марок параметры, такие как, например, интервал опроса, признак сбора perfdata для построения исторических графиков, код возврата плагина в случае выхода текущего значения за пределы "вилки" и т.п.
Затем на основании созданного Шаблона Службы для каждой отдельной совокупности однотипных устройств создадим Apply-Rule для динамического назначения соответствующей Службы на Хосты.
В случае с мониторингом входного напряжения ИБП можно создать отдельные правила Apply-Rule в разрезе марок ИБП (APC, Eaton, HP и т.п.), так как каждая из этих марок имеет свои OID, определяющие значения входного напряжения и его нижней/верхней границы. Эти значения OID мы сможем указать в наборе кастомных Полей, транзитивно наследуемых по цепочке Шаблон Службы <- Команда.
Конечный результат для ИБП, например марки APC, будет выглядеть следующим образом:
И теперь за счёт отображения реальной "вилки" администратору сразу наглядно видно то, в пределах каких значений допустимы колебания текущего значения. А также за счёт графика, строящегося на базе perfdata будет видно, если исторически эта "вилка" была изменена непосредственно на самом устройстве.
Рассмотренный пример мониторинга входящего напряжения ИБП - это не единственно возможный вариант использования представленного плагина check_snmp_value_from_range. С помощью этого плагина можно мониторить любые данные, получаемые с сетевых устройств по протоколу SNMP и подпадающих под аналогичную логику, когда имеется некая "вилка" из пары значений, получаемых из одних OID и сравнимых со значением, получаемым из третьего OID.
Добавить комментарий