Сага о Nagios: чекаем в труднодоступных местах (NRPE)

Если уж вы решили заняться мониторингом серверов, вряд ли вам удалось ограничиться проверками пинга и доступа к сайтам по 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.

	nrpe                 5666/tcp            # NRPE

После нужно перезагрузить xinetd:

service xinetd restart

Возможно вам также придется добавить правило в 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 v2.12

Все, установку закончили.

Конфигурирование NRPE

После установки файл конфигурации по умолчанию находиться в файле /usr/local/nagios/etc/nrpe.cfg. Первое что стоит отредактировать это опять таки хосты с которых будет производиться проверка:

	allowed_hosts=127.0.0.1,IP1,IP2

опция allowed_hosts определяет список хостов с которых будут идти проверки, адреса должны быть перечислены через запятую.
Дальше определяем количество можно ли передавать аргументы командам:

	dont_blame_nrpe=0

если «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 и правилах написания модулей(плагинов).

Похожие посты:

Комментарии

  1. Vladimir:

    Оччень)) полезные статьи, большое спасибо!
    Не подскажете, где есть список параметров для NRPE, примерно такой, как в Вашей ссылке для nscp: http://trac.nakednuns.org/nscp/wiki/CheckCommands?
    Заранее спсибо, Владимир.

  2. ese:

    Добрый день. Как заставить Nagios НЕ проверять сервисы, если хост недоступен ?

  3. admin:

    Как это?

    Может быть вы имеете ввиду не высылать нотификации когда хост не доступен?

  4. ese:

    Можно и так. Даже лучше так.

    • admin:

      Вообще если хост не доступен то по идее нотификации о нерабочих сервисах не ходят. Возможно у вас слишком большой период проверки живости хоста, лучше всего устанавливать его поменьше, 1 минута например.

  5. Денис:

    не ясно где подвох ==> UNKNOWN – Local copy/copies of nginx_status is empty.

    прооверяем напрямую
    root@s1 [~]# /usr/local/nagios/libexec/check_nginx -N -H localhost
    OK – nginx is running. 2 requests per second, 1 connections per second (2.00 requests per connection) | ‘reqpsec’=2 ‘conpsec’=1 ‘conpreq’=2.00

    через check_nrpe не хочет

    root@s1 [~]# /usr/local/nagios/libexec/check_nrpe -H localhost -c check_nginx
    UNKNOWN – Local copy/copies of nginx_status is empty.

    сама команда в nrpe.cfg

    command[check_nginx]=/usr/local/nagios/libexec/check_nginx -N -H localhost

    ну так где же подвох ?

    • admin:

      Судя по всему проблема с парвами на файл к которому обращается check_nginx. Под каким пользователем запускается nrep?

    • admin:

      попробуй запустить check_nginx от пользователя под которым стартует nrpe, sudo -u ‘/usr/local/nagios/libexec/check_nginx -N -H localhost’

  6. Денис:

    как не странно, сам когда-то запретил использование wget для других пользователей, проблема была именно в правах на wget

Оставить комментарий