
Если уж вы решили заняться мониторингом серверов, вряд ли вам удалось ограничиться проверками пинга и доступа к сайтам по HTTP. Проверка загрузки CPU, свободного места на сервере и т.д. можно конечно проверять с помощью SNMP, но искать новые модули для проверки проверки или лазить по дереву SNMP не самое интересное занятие, да и не очень нужное, ведь есть отличные команды для локальной проверки сервера из стандартного комплекта модулей «check_load, check_storage» и т.д. Изобретать велосипед конечно благородно, но бесполезно. Дальше речь пойдет о мониторинге Unix серверов при помощи NRPE.
Общий обзор NRPE
На помощь может прийти NRPE, приложение созданное специально для проверки удаленного сервера с помощью «локальных» команд. Алгоритм работы можно видеть на рисунке ниже:

Хост с Nagios (слева), инициирует проверку с помощью команды check_nrpe к удаленному серверу (справа), на котором установлен NRPE, в зависимости от конфигурации выполняется та или иная команда проверки. На хостк с NRPE можно еще раз выполнить команду check_nrpe для проверки хоста с NRPE, это позволяет создавать конфигурации при которых Nagios не находиться в той-же подсети что и хосты, но при этом может проверять хосты из другой сети:

Преимуществами NRPE по сравнению с SNMP можно считать:
- проверки произволяться «локальными» командами
- ненужно расшаривать какие-то области SNMP, это может быть небезопасно
- NRPE имеет возможность создания защищенного соединения (SSL) между Nagios и хостом, в отличии от SNMP, который чуть ли не UDP пакеты посылает
- для добавления новой проверки достаточно написать консольный скрипт в Perl или Bash, не заморачиваясь на SNMP-ловушках или еще чем-нибудь более заумном
Установка NRPE
Ну думаю теории хватит, можно приступать к практике.
Для начала скачайте последнюю версию NRPE с официального сайта http://www.nagios.org/download/addons/
(Более полную информацию по NRPE можно найти по адресу http://nagios.sourceforge.net/docs/nrpe/NRPE.pdf)
В моем случае версия NRPE была 2.12, далее начнем компиляцию и установку.
Распакуем архив
tar xzf nrpe-2.12.tar.gz
cd nrpe-2.12/ |
Далее проводим конфигурирование, опция –disable-ssl отключает SSL в NRPE, если у вас действительно большое количество проверок на одном сервере SSL лучше отключить, чтобы не загружать сервер. Опция –enable-command-args определяет можно ли будет командам передавать аргументы, заранее подумайте над тем стоит ли их включать, т.к. это может создать проблемы в безопасности системы, к примеру если в качестве аргумента передать что-нибудь типа «-w=5 -c=6; cat /etc/passwd» в bash эта строка будет интерпретирована не совсем так как вы хотите
./configure --disable-ssl --enable-command-args |
Далее создаем пользователя и группу под которыми будет работать NRPE, опцию -d /home/nagios лучше оставить т.к. в дальнейшем домашняя директория для NRPE вам еще пригодиться
groupadd nagios
useradd nagios -d /home/nagios -g nagios -m |
Последний этап компиляции, собственно компиляция, установка плагина check_nrpe, установка демона NRPE и конфигов для xinetd
make all && make install-plugin && make install-daemon && make install-xinetd |
Для работы NRPE лучше всего использовать xinetd, т.к.он позволяет обновлять конфигурацию без перезагрузки демона и вам не нужно следить за тем загружен NRPE или нет. Также xinetd обеспечивает некоторую дополнительную безопасность с помощью определения списка IP адресов с которых может инициироваться доступ к порту NRPE.
Если у вас не установлен xinetd нужно его установить:
yum install xinetd
zypper install xinetd
apt-get install xinetd (зависит от системы) |
Дальше редактируем /etc/xinetd.d/nrpe, находим строку
only_from = 127.0.0.1 IP1 IP2 |
вместо IP1 и IP2 подставляет IP-адреса Nagios или хостов с которых будет осуществляться проверка, адреса должны быть написаны через пробел.
Добавить описание NRPE в конец файла /etc/services.
После нужно перезагрузить xinetd:
Возможно вам также придется добавить правило в firewall, которое бы разрешало подключения на порт 5666:
iptables -I RH-Firewall-1-INPUT -p tcp -m tcp –dport 5666 -j ACCEPT
service iptables save |
Далее вам нужно скопировать плагины для проверки в папку /usr/local/nagios/libexec/. Плагины можно взять из этой папки на сервере с Nagios (или в папке /usr/lib/nagios/plugins/, если вы ставили Nagios из бинарных архивов).
Если все сделано правильно мы можем проверить работоспособность NRPE, выполнив следующий скрипт:
/usr/lib/nagios/plugins/check_nrpe -H localhost |
Должно вы появиться что-то вроде:
Все, установку закончили.
Конфигурирование NRPE
После установки файл конфигурации по умолчанию находиться в файле /usr/local/nagios/etc/nrpe.cfg. Первое что стоит отредактировать это опять таки хосты с которых будет производиться проверка:
allowed_hosts=127.0.0.1,IP1,IP2 |
опция allowed_hosts определяет список хостов с которых будут идти проверки, адреса должны быть перечислены через запятую.
Дальше определяем количество можно ли передавать аргументы командам:
если «0″ аргументы передавать нельзя, если «1″ можно.
Далее можно перейти непосредственно к команда которыми мы будем оперировать. Общий синтаксис таков:
command[command_name]=/path/to/check/command args |
например:
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10 |
если у вас включена передача аргументов, команда будет выглядеть так:
command[check_users]=/usr/local/nagios/libexec/check_users -w $ARG1$ -c $ARG2$ |
Командой может быть любой скрипт или строка bash, главное чтобы она удовлетворяла правилам написания модулей для Nagios.
для выполнения команды проверки check_users выполните:
/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_users или
/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_users -a 5 10 |
Получим что-нибудь вроде этого:
USERS OK - 1 users currently logged in |users=1;5;10;0 |
Конфигурирование Nagios для работы с NRPE
После того как NRPE успешно установлен можно приступить к конфигурированию самого Nagios.
Первое что следует сделать, это скопировать скрипт check_nrpe в папку с плагинами Nagios (см. выше). Дальше открываем файл с описанием комманд (чаще всего commands.cfg) и добавляем вот такую конфигурацию:
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
} |
таким образом мы добавили команду check_nrpe в список команд NRPE, далее создаем новый сервис (проверку):
define service{
use generic-service
host_name remotehost
service_description USERS
check_command check_nrpe!check_users
} |
после «!» передается команда которая будет вызвана на хосте с NRPE.
Для того чтобы уменьшить количество ошибок и недочетов при конфигурировании Nagios лучше всего создавать команды с заранее определенными параметрами, так лучше пример приведенный выше лучше представить так:
define command{
command_name check_nrpe_users
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_users
}
....
define service{
use generic-service
host_name remotehost
service_description USERS
check_command check_nrpe_users
} |
таким образом мы определяем соответствие команды Nagios команде NRPE и допускаем меньше ошибок при конфигурировании.
ВНИМАНИЕ
Если вы собирали NRPE –disable-ssl, в описании команды проверки добавляйте «-n» т.е.
command_line $USER1$/check_nrpe -n -H $HOSTADDRESS$ -c check_users |
иначе при проверке возникнет ошибка.
P.S.
Чуть позже думаю появяться стать по автоматизации обновления NRPE и правилах написания модулей(плагинов).