Nagios плагин · 6 min read · Nov 18, 2025

Как написать пользовательский плагин проверки Nagios

Этот учебник был протестирован с использованием Nagios Core 4.3.4 на Debian 9.2

Несмотря на то, что Nagios Exchange имеет тысячи доступных плагинов для бесплатной загрузки, иногда статус, который необходимо проверить, очень специфичен для вашего сценария.

Соображения

Предполагается, что:

  • У вас установлен и работает Nagios (Вы можете следовать этому учебнику, если нет).
  • Вы знаете основы администрирования Nagios.

Сервер Nagios в этом примере размещен на 192.168.0.150, а пример клиента размещен на IP 192.168.0.200

Код выхода

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

Nagios понимает следующие коды выхода:

  • 0 - Служба в порядке.
  • 1 - У службы есть ПРЕДУПРЕЖДЕНИЕ.
  • 2 - Служба находится в КРИТИЧЕСКОМ состоянии.
  • 3 - Статус службы НЕИЗВЕСТЕН.

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

Пример плагина

Я использую простой пример. Я написал плагин в bash-скрипте для проверки текущих предупреждений. Предположим, у меня настроен сервер Nagios, чтобы оповещать только о критическом состоянии, поэтому я хочу получить оповещение, если у меня слишком много служб в состоянии предупреждения.

Рассмотрим следующий скрипт (check_warnings.sh):

#!/bin/bash

countWarnings=$(/usr/local/nagios/bin/nagiostats | grep "Ok/Warn/Unk/Crit:" | sed 's/[[:space:]]//g' | cut -d"/" -f5)

if (($countWarnings<=5)); then
                echo "OK - $countWarnings services in Warning state"
                exit 0
        elif ((6<=$countWarnings && $countWarnings<=30)); then
            # Этот случай не имеет смысла, потому что он добавляет только одно предупреждение.
            # Это просто пример всех возможных выходов.
                echo "WARNING - $countWarnings services in Warning state"
                exit 1
        elif ((30<=$countWarnings)); then
                echo "CRITICAL - $countWarnings services in Warning state"
                exit 2
        else
                echo "UNKNOWN - $countWarnings"
                exit 3
fi

Основываясь на информации, предоставленной инструментом nagiostats, я предполагаю, что все в порядке, если пять или меньше служб находятся в состоянии предупреждения.

Я оставлю этот скрипт со всеми другими плагинами Nagios внутри /usr/local/nagios/libexec/ (Этот каталог может отличаться в зависимости от вашей конфигурации).

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

Не забудьте разрешить выполнение скрипта:

sudo chmod +x /usr/local/nagios/libexec/check_warnings.sh

А затем запустите его как любой другой скрипт:

Результатом будет текстовое сообщение и код выхода:

Установите новую команду проверки и службу

Этот шаг будет таким же с вашими собственными плагинами, и если вы загрузите сторонний плагин из интернета.

Сначала вы должны определить команду в файле commands.cfg. Местоположение этого файла зависит от вашей конфигурации, в моем случае он находится в /usr/local/nagios/etc/objects/commands.cfg.

Итак, я добавлю в конец файла следующий блок:

# Команды пользовательских плагинов...
define command{
    command_name check_warnings
    command_line $USER1$/check_warnings.sh
}

Помните, что переменная $USER1$ - это локальная переменная Nagios, установленная в файле resource.cfg, в моем случае указывающая на /usr/local/nagios/libexec.

После определения команды вы можете ассоциировать эту команду со службой, а затем с хостом. В этом примере мы собираемся определить службу и назначить ее localhost, потому что эта проверка выполняется на самом Nagios.

Отредактируйте файл /usr/local/nagios/etc/objects/localhost.cfg и добавьте следующий блок:

# Пример - Проверка текущих предупреждений...
define service{
    use local-service
    host_name localhost
    service_description Nagios Server Warnings
    check_command check_warnings
}

Теперь мы готовы, единственное, что осталось сделать, это перезагрузить Nagios, чтобы он снова прочитал конфигурационные файлы.

Всегда помните, перед перезагрузкой Nagios, проверьте, что в конфигурации нет ошибок. Вы можете сделать это с помощью команды nagios -v от имени root:

sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Вы должны получить что-то вроде этого:

Проверка конфигурации Nagios

Убедитесь, что он возвращает 0 ошибок и 0 предупреждений и продолжайте перезагрузку службы:

sudo systemctl reload-or-restart nagios.service

После перезагрузки службы вы увидите связанную проверку на localhost. Сначала как ожидающую:

А после выполнения с результатом:

Используйте NRPE для выполнения на клиентах

Чтобы запустить скрипт на удаленном клиенте, вам нужно настроить Nagios Remote Plugin Executor (NRPE)

Поскольку этот учебник основан на Debian 9, я покажу в качестве примера, как его установить, но вы можете найти инструкции для любой дистрибуции.

Общая установка на клиенте на базе Debian

Обратите внимание, что вся конфигурация в этом разделе выполняется на клиенте, который будет проверяться, а не на сервере nagios.

Установите NRPE и плагины Nagios:

sudo apt-get install libcurl4-openssl-dev nagios-plugins nagios-nrpe-server nagios-nrpe-plugin --no-install-recommends  
sudo ln -s /usr/lib/nagios/plugins/check_nrpe /usr/bin/check_nrpe

Разрешите серверу Nagios выполнять команды на клиенте, добавив его в запись allowed_hosts в /etc/nagios/nrpe.cfg. Строка должна выглядеть так:

allowed_hosts=127.0.0.1,::1,192.168.0.150

Определите стандартные проверки, которые вы будете выполнять на каждом клиенте с NRPE. Определите проверки в /etc/nagios/nrpe_local.cfg. Например, модель для файла может выглядеть так:

######################################
# Выполните любую локальную конфигурацию nrpe здесь
######################################
#-----------------------------------------------------------------------------------
# Пользователи
   command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10

# Нагрузка
   command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
   command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
   command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200

# Диск
   command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
   command[check_boot]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /boot
   command[check_usr]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /usr
   command[check_var]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /var
   command[check_tmp]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /tmp
   # Если вы хотите добавить нестандартную точку монтирования:
   # command[check_mnt1]=/usr/lib/nagios/plugins/check_disk -w 4% -c 1% -p /export
#-----------------------------------------------------------------------------------

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

Убедитесь, что локальный файл и каталог .d включены в основной конфигурационный файл с:

cat /etc/nagios/nrpe.cfg | grep include | grep -v ^#

Перезапустите службу:

sudo systemctl restart nagios-nrpe-server.service

Проверьте, что служба NRPE работает:

cat /etc/services | grep nrpe  
netstat -at | grep nrpe

Теперь проверьте одну из ранее определенных команд NRPE с сервера Nagios:

Обратите внимание, что команда check_users NRPE была определена в файле /etc/nagios/nrpe_local.cfg для выполнения /usr/lib/nagios/plugins/check_users -w 5 -c 10.

В случае, если у вас нет плагина на сервере Nagios, вы можете установить его с:

sudo apt-get install nagios-nrpe-plugin

Таким образом, подводя итог, NRPE будет запускать скрипт на удаленном хосте и возвращать код выхода на сервер Nagios.

Конфигурация для пользовательских скриптов

Чтобы использовать пользовательский скрипт в качестве плагина для удаленного выполнения через NRPE, вам сначала нужно написать скрипт на сервере, например в /usr/local/scripts/check_root_home_du.sh:

#!/bin/bash

homeUsage=$(du -s /root/ | cut -f1)

if (($homeUsage<=$((1024*1024)))); then
                echo "OK - Root home usage is $(du -sh /root/ | cut -f1)"
                exit 0
        elif (($((1024*1024))<$homeUsage && $homeUsage<=$((3*1024*1024)))); then
                echo "WARNING - Root home usage is $(du -sh /root/ | cut -f1)"
                exit 1
        elif (($((3*1024*1024))<$homeUsage)); then
                echo "CRITICAL - Root home usage is $(du -sh /root/ | cut -f1)"
                exit 2
        else
                echo "UNKNOWN - Value received: $homeUsage"
                exit 3
fi

Разрешите выполнение скрипта:

sudo chmod +x /usr/local/scripts/check_root_home_du.sh

Предыдущий скрипт является очень простым примером, проверяющим использование диска в каталоге /root и устанавливающим порог для его оценки как OK, Warning или Critical.

Добавьте команду в файл конфигурации NRPE на клиенте (/etc/nagios/nrpe_local.cfg):

# Пользовательский
   command[check_root_home_du]=/usr/local/scripts/check_root_home_du.sh

И перезапустите слушатель NRPE:

sudo systemctl restart nagios-nrpe-server.service

Теперь мы можем получить доступ к серверу и протестировать его, как любой стандартный плагин

Установите проверку NRPE в конфигурационные файлы сервера

Теперь мы знаем, что пользовательский плагин работает на клиенте и на сервере, и что NRPE правильно взаимодействует, мы можем продолжить и настроить файлы Nagios для проверки удаленного устройства. Итак, на сервере установите файлы:

/usr/local/nagios/etc/objects/commands.cfg:

#...
define command{
    command_name check_nrpe
    command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

/usr/local/nagios/etc/objects/nrpeclient.cfg:

define host{
    use          linux-server
    host_name    nrpeclient
    alias        nrpeclient
    address      192.168.0.200
}

define service{
    use                 local-service
    host_name           nrpeclient
    service_description Root Home Usage
    check_command       check_nrpe!check_root_home_du
}

Обратите внимание, что знак ! разделяет команду от аргументов в записи check_command. Это определяет, что check_nrpe является командой, а check_root_home_du - значением $ARG1$.

Также, в зависимости от вашей конфигурации, вам следует добавить этот последний файл в основной файл (/usr/local/nagios/etc/nagios.cfg):

#...
cfg_file=/usr/local/nagios/etc/objects/nrpeclient.cfg
#...

Проверьте конфигурацию и, если нет ошибок или предупреждений, перезагрузите службу:

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
sudo systemctl reload-or-restart nagios.service

И теперь у вас есть новая пользовательская проверка на хосте:

Заключение

Nagios имеет огромную библиотеку плагинов, доступных на Nagios Exchange. Однако в большой среде очень вероятно, что вам понадобятся некоторые пользовательские проверки для специфических задач, например: Проверка результата определенной задачи, мониторинг разработанного в-house приложения и т.д.

Гибкость, предоставляемая Nagios, идеально подходит для этих сценариев.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.