Ключевые слова:nagios, monitoring, nrpe, (найти похожие документы)
Автор: STALKER <http://stproject.blogspot.com>
Date: Mon, 8 Jun 2009 17:02:14 +0000 (UTC)
Subject: Настройка nagios для проверки в труднодоступных местах (NRPE)
Оригинал: http://stproject.blogspot.com/2009/02/nagios-nrpe.htmlhttp://stproject.blogspot.com/2008/12/full-automated-nrpe.html
Если уж вы решили заняться мониторингом серверов, вряд ли вам удалось ограничиться
проверками пинга и доступа к сайтам по HTTP. Проверка загрузки CPU, свободного места на
сервере и т.д. можно конечно проверять с помощью SNMP, но искать новые модули для проверки
проверки или лазить по дереву SNMP не самое интересное занятие, да и не очень нужное, ведь
есть отличные команды для локальной проверки сервера из стандартного комплекта модулей
"check_load, check_storage" и т.д. Изобретать велосипед, конечно, благородно, но бесполезно.
Общий обзор
На помощь может прийти 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 успешно установлен можно приступить к конфигурированию самого 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
иначе при проверке возникнет ошибка.
Full-automated NRPE
В первой части, я описывал спсоб проверки Unix-серверов с помощью NRPE, теперь же займемся
автоматизацией.
Представьте такую ситуацию, у вас уже есть десяток-другой хостов подключенных к Nagios и
проверяемых с помощью NRPE, но вдруг вам понадобилось добавить на этих сервера новую, очень
важную проверку. Будете лазить по всем серверам и править конфиги? Надеюсь вы на это не
согласны, поэтому предлагаю способ по автоматизации обновления NRPE без прямого участия.
Для описанного случая вам понадобиться FTP-сервер (в принципе систему можно переработать на
использование scp и ssh), желательно на том-же хосте что и Nagios. Система будет
действовать примерно как показано на диаграмме ниже:
На хосте с Nagios выполняеться команда
check_nrpe -H -c update_nrpe
после чего происходит обновлениеконфигов и команд проверки. Скачиваеться последняя версия
скрипта на обновление и выполняеться. Внутри скрипта прописано откуда брать новый конфиг и
плагины для проверки...
Предположим вы поставили FTP-сервер на хост с Nagios (например [10]vsftp), предположим вы
создали FTP-аккаунт "nrpe". Дальше в папке доступной по FTP зададим папку NRPE и положим
туда эталонный "nrpe.cfg" и архив с плагинами для проверок "libexec.tar.gz" (у меня они
называються именно так, у вас могут иначе). Дальше осталось только написать скрипты.
Скрипт на обновление NRPE (кладём в папку с FTP_PATH/NRPE/):
#!/bin/sh
#
#
# Удаляем то что осталось от прошлого обновления
rm -f libexec.tar.gz
rm -r -f libexec
rm -f nrpe.cfg
# Скачиваем по FTP новые конфиги и плагины
wget ftp://nrpe:ftp_pass@ftp_server_ip/NRPE/libexec.tar.gz
wget ftp://nrpe:ftp_pass@ftp_server_ip/NRPE/nrpe.cfg
#Разархивируем и перемещаем в папку с плагинами
tar xzf libexec.tar.gz
mv libexec/* /usr/local/nagios/libexec/
#На всякий случай создаем папку для конфигов NRPE
mkdir -p /usr/local/nagios/etc/
# Копируем сам конфиг
cp nrpe.cfg /usr/local/nagios/etc/nrpe.cfg
# Добавляем в конфиг данные о дате последнего обновления(еще пригодиться)
echo "# [LAST_UPDATE]=`date +%d-%m-%y`" >> /usr/local/nagios/etc/nrpe.cfg
В эталонный конфиг добавляем следующие команды:
Обновления:
command[update_nrpe]=echo "Starting"; cd /home/nagios/; rm update_nrpe.sh; wget
ftp://nrpe:ftp_pass@ftp_server_ip/NRPE/update_nrpe.sh && chmod +x update_nrpe.sh &&
./update_nrpe.sh
Проверки даты обновления:
command[update_date]=/usr/local/nagios/libexec/check_update_date
содержимое скрипта libexec/check_update_date(этот файл должен находиться в архиве
libexec.tar.gz):
#!/bin/sh
#
#
awk -F= '/\[LAST_UPDATE\]/ {print "STATUS: Last update " $2}'
/usr/local/nagios/etc/nrpe.cfg
Этот скрипт находит в конфиге NRPE строку с указанием даты последнего обновления и выдает в
качестве ответа.
Первоначальное обновление
Если вы только установили NRPE или у вас уже установлен NRPE на хост, пробуем обновиться:
#заходим под пользователем nagios, чтобы не сбить права на файлы
~> su nagios
~> cd ~
#Обнавляемся
~> wget ftp://nrpe:ftp_pass@ftp_server_ip/NRPE/update_nrpe.sh && chmod +x update_nrpe.sh
&& ./update_nrpe.sh
если все прошло ОК, на хосте с Nagios выполняем команду
.../check_nrpe -H nrpe_host -c update_date
Должны получить что-то вроде:
STATUS: Last update 21-01-09
Использование
Теперь если вам нужно внести изменения в работу NRPE (добавить проверку например), на
сервере с FTP меняем конфиг nrpe.cfg, добавляем в архив libexec.tar.gz новый плаги и
выполняем команду
check_nrpe -H nrpe_host -c update_nrpe
и получаем полноценное обновление.
Для работы этой системы необходимо чтобы NRPE был установлен для работы с xinetd (см.
прошлую статью). При работе со с FTP будьте вниматнльны к правам на файлы, иначе могут
возникнуть непонятные ошибки...
не ясно где подвох ==> 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.