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Вы должны получить что-то вроде этого:

Убедитесь, что он возвращает 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.cfgsudo systemctl reload-or-restart nagios.serviceИ теперь у вас есть новая пользовательская проверка на хосте:
Заключение
Nagios имеет огромную библиотеку плагинов, доступных на Nagios Exchange. Однако в большой среде очень вероятно, что вам понадобятся некоторые пользовательские проверки для специфических задач, например: Проверка результата определенной задачи, мониторинг разработанного в-house приложения и т.д.
Гибкость, предоставляемая Nagios, идеально подходит для этих сценариев.
Get new posts in your inbox
No spam. Unsubscribe anytime.