Сага о Nagios: Написание плагинов для Nagios/NRPE/NSClient++
Вданной статье дается описание механизму написания собственных, нестандартных скриптов(сервисов/проверок) для Nagios.
Оригинал: Nagios Plugin API
Другие ресурсы
Если вы собираетесь писать собственные плагины для Nagios, ознакомтесь со следующими ресурсами:
Обзор плагинов
Скрипты и бинарные файлы должны выполнять две следующие функции (как минимум), чтобы считать их плагинами для Nagios:
- При выходе вернуть один из возможных кодов возврата (см. ниже)
- Вернуть как минимум одну строку текста в STDOUT
Внутренне устройство вашего плагина абсолютно безразлично для Nagios. Ваш плагин может проверять статус TCP порта, выполнять запрос к базе данных, проверять место на диске, или делать еще что-то, что вам необходимо проверять. Детали о будут зависеть только от того что вы хотите проверять.
Коды возврата
Nagios различает статус сервиса или хоста по возвращаемым плагином кодом возврата. Таблица ниже показывает список возможных кодов возврата, вместе с расшифровкой их значений.
| Код возврата плагина | Состояние сервиса | Состояние хоста |
|---|---|---|
| 0 | OK | UP |
| 1 | WARNING | UP or DOWN/UNREACHABLE* |
| 2 | CRITICAL | DOWN/UNREACHABLE |
| 3 | UNKNOWN | DOWN/UNREACHABLE |
Замечание: Если опция use_aggressive_host_checking включена, код 1 в возврате плагина проверки хоста будет означать DOWN или UNREACHABLE. Иначе 1 будет означает что хост в состоянии UP. The process by which О том как Nagios определяет находиться в состоянии DOWN или UNREACHABLE можно прочесть здесь here.
Описание вывода плагинов
Плагин должен вывести как минимум одну строку текста на консоль (STDOUT). Начиная с Nagios версии 3, плагины могут, пожеланию, выводить несколько строк текста. Плагин также может выдавать данные о динамике (perfomance) которые будут обработаны сторонними приложениями (к примеру программами ) Стандартные примеры вывода плагиноа привидены ниже:
TEXT OUTPUT | OPTIONAL PERFDATA
LONG TEXT LINE 1
LONG TEXT LINE 2
…
LONG TEXT LINE N | PERFDATA LINE 2
PERFDATA LINE 3
…
PERFDATA LINE N
Performance данные (показаны оранжевым) не обязательны. Если скрипт возвращает perfomance данные в своем выводе, значит они должны отделятся от остального вывода вертикальной чертой (|). Дополнительные линии длинного вывода плагина (более 1й чтроки)(выделены синим) также не обязательны.
Примеры выводов плагинов
Давайте рассмотрим примеры возможных выводов плагинов…
Пример 1: Одна строка вывода(только текст)
Предполжим что у нас есть плагин который выводитодну строку как показано в примере:
Если этот плагин будет использован для выполнения проверки, данная строка бкдет передана в переменную $SERVICEOUTPUT$.
Пример 2: Одна строка вывода(текст и perfdata)
Плагин может возвращать perfomance-данные которые могут использованы сторонними приложениями (к примеру построителем графиков в Centreon или NagiosGrapher). Не забывает отделять perfomance данные вертикальной чертой (|):
Пример 3: Несколько строк вывода (текст и perfdata)
Плагин возвращает несколько строк основных и perfdata:
/ 15272 MB (77%);
/boot 68 MB (69%);
/home 69357 MB (27%);
/var/log 819 MB (84%); | /boot=68MB;88;93;0;98
/home=69357MB;253404;253409;0;253414
/var/log=818MB;970;975;0;980
Красным помечен вывод проверки, помещается в макрос $SERVICEOUTPUT$. Оранжевым помеченыстроки (текст) который будет помещен в макрос $SERVICEPERFDATA$. Синим помечены 2 – 5 строки вывода будут соединены (с экранированием переводов строк) и помещены в макрос $LONGSERVICEOUTPUT$.
В итоге значения макросов будут следующими:
| Макрос | Значение |
|---|---|
| $SERVICEOUTPUT$ | DISK OK – free space: / 3326 MB (56%); |
| $SERVICEPERFDATA$ | /=2643MB;5948;5958;0;5968 /boot=68MB;88;93;0;98 /home=69357MB;253404;253409;0;253414 /var/log=818MB;970;975;0;980 |
| $LONGSERVICEOUTPUT$ | / 15272 MB (77%);\n/boot 68 MB (69%);\n/var/log 819 MB (84%); |
[...]
Требования к длинне вывода плагинов
Nagios читает первые 4 KB данных возвращаемых плагином. Это сделано для предотвращения ситуаций, когда плагин будет отдавать мегабайты и гигабайты данных обратно Nagios`у. Лимит в 4 KB можно легко изменить если необходимо. Просто измените значение MAX_PLUGIN_OUTPUT_LENGTH в файле include/nagios.h.in исходных кодов и пересоберите Nagios. Ничего больше изменять ненужно!
Примеры
Если вам нужны примеры плагинов вы можете скачать официальные плагины для Nagios, там вы сможете найти примеры на C, Perl и shell. Информацию о получении официальных плагинов вы можете найти здесь.
Perl плагины
Одна и возможностей Nagios это встроенный интерпритатор Perl который позволяет выполнять плагины быстрее. Больше информации о том как писать плагины с использование встроенного Perl можно найти здесь.

