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

Icinga plugin check snmp value from range OIDsПродолжая тему мониторинга сетевых устройств по протоколу 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.

Add Command Arguments for check_snmp_value_from_range plugin in Icinga Director

Дополнительно здесь потребуется лишь создать Поля Данных $snmp_oid_max$, $snmp_oid_min$, $plugin_exit_code$ для передачи значений в аргументы, определяющие OID верхней границы, OID нижней границы и код возврата плагина соответственно.

Add Data Fields for plugin check_snmp_value_from_range in Icinga Director

Поля (Fields) Команды будут определяться таким образом, чтобы Шаблоны Служб, использующие эту Команду имели возможность отдельной настройки параметров OID "вилки", OID текущего значения для сравнения с "вилкой" и прочих параметров:

Add Command Custom Fields for check_snmp_value_from_range plugin in Icinga Director

После описания Команды создадим Шаблон Службы (Service Template), общий для отдельного класса устройств, например, ИБП. В этом Шаблоне Службы можно определить общие для ИБП любых марок параметры, такие как, например, интервал опроса, признак сбора perfdata для построения исторических графиков, код возврата плагина в случае выхода текущего значения за пределы "вилки" и т.п.

Add Service Template for check_snmp_value_from_range plugin in Icinga Director

Затем на основании созданного Шаблона Службы для каждой отдельной совокупности однотипных устройств создадим Apply-Rule для динамического назначения соответствующей Службы на Хосты.

В случае с мониторингом входного напряжения ИБП можно создать отдельные правила Apply-Rule в разрезе марок ИБП (APC, Eaton, HP и т.п.), так как каждая из этих марок имеет свои OID, определяющие значения входного напряжения и его нижней/верхней границы. Эти значения OID мы сможем указать в наборе кастомных Полей, транзитивно наследуемых по цепочке Шаблон Службы <- Команда.

Add Apply Rules for check_snmp_value_from_range plugin in Icinga Director

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

View of APC UPS Input Voltage from check_snmp_value_from_range plugin in Icinga Web

И теперь за счёт отображения реальной "вилки" администратору сразу наглядно видно то, в пределах каких значений допустимы колебания текущего значения. А также за счёт графика, строящегося на базе perfdata будет видно, если исторически эта "вилка" была изменена непосредственно на самом устройстве.

Рассмотренный пример мониторинга входящего напряжения ИБП - это не единственно возможный вариант использования представленного плагина check_snmp_value_from_range. С помощью этого плагина можно мониторить любые данные, получаемые с сетевых устройств по протоколу SNMP и подпадающих под аналогичную логику, когда имеется некая "вилка" из пары значений, получаемых из одних OID и сравнимых со значением, получаемым из третьего OID.

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