Icinga плагин snmp_memusage_percent для мониторинга процента утилизации памяти по данным, полученным по SNMP

Ранее мы рассмотрели настройку мониторинга сетевых устройств в Icinga по протоколу SNMP. При этом мы использовали плагин check_snmp. И в большинстве сценариев этого плагина достаточно для получения желаемого результата. Однако иногда возникают ситуации, когда получаемые плагином check_snmp данные не очень наглядны, и хочется чего-то большего.

Например, когда я добрался до настройки мониторинга USB-концентраторов Digi выяснилось, что с данных устройств информацию о текущем уровне утилизации памяти можно получить по протоколу SNMP только в виде абсолютных значений в байтах:

OID 1.3.6.1.4.1.332.11.6.1.8.0 - Возвращает полный размер памяти устройства в байтах
OID 1.3.6.1.4.1.332.11.6.1.9.0 - Возвращает текущий размер свободной памяти в байтах
OID 1.3.6.1.4.1.332.11.6.1.10.0  - Возвращает текущий размер используемой памяти в байтах

И тут возникает пара моментов, с которыми приходится мириться в случае использования стандартного плагина check_snmp. К примеру, для того, чтобы получить какой-то наглядный график исторического изменения метрик, нам придётся хранить метрики, как минимум, двух значений - общего объема памяти и используемого (либо свободного) объема памяти. А с точки зрения установки порогов для срабатывания механизма оповещений, ситуация тоже не очень симпатичная, так как в данном случае нам придётся задавать пороговые значения в виде абсолютных величин в байтах. Понимая это, хочется иметь возможность более простого и более удобного варианта работы с этими данными. Для решения этих, по большому счёту, косметических проблем, был сделан и успешно протестирован в моём окружении нехитрый Nagios/Icinga совместимый плагин.

Плагин snmp_memusage_percent работает по аналогии с плагином check_snmp, но в качестве требуемых входных параметров принимает пару OID (общий и свободный объём памяти), которые затем использует для расчёта процента утилизации памяти. Это позволяет хранить всего одну метрику в виде процента используемой памяти. Наряду с этим, плагин может принимать пороговые значения для срабатывания оповещений в зависимости от вычисленного процента утилизации памяти.

Скачать плагин можно c GitHub.

Плагин snmp_memusage_percent использует для своей работы утилиту snmpget.
Плагин имеет встроенную справку с описанием допустимых параметров вызова:

$ /usr/lib/nagios/plugins/snmp_memusage_percent.sh --help

Icinga Plugin Check Command to calculate the percentage of memory used (from SNMP data), version 2017.05.01

Usage: /usr/lib/nagios/plugins/snmp_memusage_percent.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
 -t      --total-mem-oid   Total memory OID
 -f      --free-mem-oid    Free memory OID
 -w      --warning         Warning threshold for memory usage percents
 -c      --critical        Critical threshold for memory usage percents
 -q      --help            Show this message
 -v      --version         Print version information and exit

Пример вызова плагина делается следующим образом:

$ /usr/lib/nagios/plugins/snmp_memusage_percent.sh -H netdev01.holding.com -P 1 -C public -t 1.3.6.1.4.1.332.11.6.1.8.0 -f 1.3.6.1.4.1.332.11.6.1.9.0 -w 85 -c 95

Memory Usage percent OK - 45 % | MemoryUsagePercent=45

В Icinga Director плагин подключается по аналогии с примерами, которые мы уже рассматривали ранее в цикле заметок об Icinga. При описании Команды (Icinga Command) в Icinga Director для определения значений аргументов, передаваемых плагину можно использовать те же Поля Данных (Data Field), которые были созданы на этапе настройки поддержки SNMP.

Дополнительно здесь потребуется лишь создать Поля Данных $snmp_total_mem_oid$ и $snmp_free_mem_oid$ для передачи значений в аргументы, определяющие OID общего объёма памяти и OID свободного объёма памяти соответственно.

Поля (Fields) Команды будут определяться следующим образом:

После описания Команды останется создать Шаблон Службы (в нашем примере "SNMP Memory Usage Percent") с привязкой к этой Команде, а затем на основании Шаблона Службы создать Apply-Rule (в нашем примере "Digi Memory Usage") для динамического назначения соответствующей Службы на Хосты

Щёлкните по изображению для увеличения

Конечный результат будет выглядеть примерно так (кстати, теперь на графике наглядно видно, что наблюдаемое устройство Digi AnywhereUSB страдает какой-то утечкой памяти):

И в оповещениях теперь будет фигурировать не нечитаемое абсолютное значение памяти в байтах, а "удобоваримый" процент утилизации.

При несущественной правке плагина, вы можете переделать его под собственные нужды для мониторинга не только памяти, но и других показателей, значение которых нужно вычислять исходя из пары заведомо известных OID.

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