Я думаю, что не нужно много рассказывать о таком известном продукте как Nagios, им пользуются многие. Для тех, кто не слышал, информирую: это система мониторинга, умеющая делать кроме этого много полезных вещей. Сейчас я активно изучаю эту систему и в этой публикации расскажу, как немного упростить работу системного администратора.
Для начала хочу уточнить: я подразумеваю, что в организации уже имеется сервер с Nagios и настроен мониторинг каких-либо узлов и/или сервисов. Итак, допустим, есть сервер с именем PrintServer, у которого часто останавливается сервис spooler. Вполне банально, но это всего лишь пример, на основе которого можно придумать массу полезного. Первое, что нужно сделать, это настроить мониторинг этого сервиса.
Заходим в веб-интерфейс Nagios под администратором и вверху страницы выбираем Configure. Далее для добавления нового мониторинга нужно запустить Monitoring Wizard. Впоследствии для редактирования и добавления новых хостов рекомендую запускать сразу Core Config Manager (колонка слева), а для первого знакомства лучше визард.
Визард состоит из нескольких простых шагов, в которых указываются необходимые параметры.
1. Раз это Windows сервис, нужно выбрать пункт Windows Server.
2. Ввести ip адрес.
3. Здесь уже интереснее. В разделе Windows Agent можно загрузить (по ссылке с сайта Nagios.com) последнюю версию Агента для Windows (он устанавливается на клиентской стороне) И ввести пароль Агента. Пароль задается на серверной стороне, и настраивается на клиентской для взаимодействия клиент-сервер. Далее раздел Server Metrics. Здесь можно настроить различные метрики для проверки. Думаю тут все понятно, и, т.к. настроить нужно сервис, в этом разделе необходимо снять все галки. Далее раздел Services. Вот тут и нужно прописать нужный сервис для мониторинга и поставить галку. В колонке Windows Service нужно указать Service Name, это важно.
Далее идут разделы Processes и Performance Counters. В будущем они скорее всего пригодятся, но сейчас их нужно пропустить и перейти к шагу 4.
4. Здесь можно выставить частоту проверки в минутах и интервал времени и числа проверок, прежде чем Nagios сгенерирует алерт. Эти настройки зависят только от конкретной задачи, поэтому этот раздел я пропущу. Теперь можно нажать Finish и посмотреть отчет визарда. Если все три этапа прошли успешно, то это значит, что сервис создан.
Далее нужно выбрать в левом меню Core Config Manager и ниже в разделе Monitoring выбрать Services. В этом разделе в поиске вбиваем Print Spooler и находим созданный конфиг. Теперь Nagios мониторит состояние сервиса. Далее можно перейти к настройке перезапуска сервиса по событию. Для этого нужно сначала настроить клиентскую часть. Заходим на сервер и устанавливаем агент Nagios. После установки идем в папку C:Program FilesNSClient++. Возможно, путь будет другой, главное нужно попасть в папку установки программы. Ищем NSC.ini или nsclient.ini и открываем для редактирования. Здесь нужно изменить несколько параметров:
1. Раскомментировать запись CheckExternalScripts.dll в начале файла, убрав «;»;
2. Раскомментировать allow_arguments и поставить параметр 1 вместо 0;
3. В секцию [External Scripts] добавить запись restart_svc=scriptsrestart_svc.bat “$ARG1$”.
Сохраняем изменения и зарываем файл. Далее в этой папке находим папку Scripts и в ней создаем батник svc_restart.bat следующего содержания:
echo off
Net stop %1
Net start %1
Exit 0
После этого нужно перезапустить сервис NSClient++ чтобы он подгрузил изменения .ini файла. На этом настройка клиента готова, осталось настроить сервер.
Процесс перезапуска выглядит так:
1. Сервис останавливается, и в Nagios создается событие, что состояние сервиса Critical;
2. Обработчик событий запускает настроенную у него команду;
3. Команда запускает находящийся на сервере Nagios скрипт;
4. Скрипт передает команду с аргументами на NSClient++;
5. NSClient++ запускает находящийся на клиенте .bat скрипт который уничтожает землю перезапускает сервис.
В принципе, все просто. Теперь пойдем по порядку. Мониторинг сервиса настроен, так что событие при остановке сервиса создастся. Прежде чем идти дальше, создадим команду для обработчика событий. Заходим Configure=>Core Config Manager=>Commands. Создаем новую команду с помощью Add New и вбиваем нужные параметры.
Command Name=svc_restart
Command Line=$USER1$/svc_restart.sh $SERVICESTATE$ $HOSTADDRESS$ $_SERVICESERVICE$
Command Type=misc command
И ставим галку ACTIVE.
Команда создана, жмем Apply Configuration. Далее переходим к разделу Services и открываем созданный сервис Print Spooler. Здесь во вкладке Check Settings в обработчике событий(Event Handler) выбираем команду(svc_restart), которая запуститься при наступлении события и включаем сам обработчик.
Далее идем во вкладку Misc Settings и далее Manage Variable Definitions. Здесь заполняем:
Variable name=_SERVICE
Variable Value=spooler
И нажимаем Insert и Close.
На этом настройка сервиса завершена, можно сохранять и применять изменения(Save & Apply Configuration). Теперь Nagios при остановке сервиса будет запускать команду svc_restart, которая в свою очередь запустит svc_restart.sh с необходимыми параметрами. Проблема в том, что такого скрипта нет, и его нужно создать. Команда будет искать скрипт в локальной папке со скриптами и бинарниками на сервере, поэтому следующим щагом будет залогинится на сервер в консоль и зайти в папку /usr/local/Nagios/libexec и с помощью любого удобного текстового редактора (я использовал nano) создать там файл svc_restart.sh со следующим содержанием:
1. #!/bin/sh
2. # Event Handler for Restarting Windows Services
3. case "$1" in
4. OK)
5. ;;
6. WARNING)
7. ;;
8. UNKNOWN)
9. ;;
10. CRITICAL)
11.
12. /usr/local/nagios/libexec/check_nrpe -H "$2" -p 5666 –c svc_restart -a "$3"
13. ;;
14. esac
15.
16. exit 0
Теперь нужно изменить разрешения на этот файл следующими консольными командами:
chown nagios:nagios /usr/local/nagios/libexec/servicerestart.sh
chmod 775 /usr/local/nagios/libexec/servicerestart.sh
На этом настройка завершается. Если все делать по инструкции, проблем быть не должно. Напоследок еще раз опишу механизм работы и немного траблшутинга:
1. Сервис останавливается, клиент передает на сервер, что у него состояние сервиса Critical;
2. Сервер создает событие с аргументами hostname, servicename, servicestate;
3. Обработчик событий выполняет команду svc_restart с заданными параметрами;
4. Команда запускает svc_restart.sh с нужными параметрами;
5. Svc_restart.sh запускает check_nrpe с нужными параметрами;
6. Check_nrpe передает клиенту что нужно выполнить svc_restart с указанными параметрами;
7. Клиент в ini файле находит, что svc_restart это bat файл, лежащий в scripts;
8. Выполняется bat файл с указанными параметрами;
9. Bat файл перезапускает сервис.
Если что-то не работает:
1. Попробуйте сам bat файл, если работает, дальше;
2. На сервере зайдите в консоль и попробуйте следующее:
cd /usr/local/nagios/libexec
./check_nrpe -H -p 5666 -c svc_restart -a spooler
Эта команда проверит, работает ли обрабочик команд на клиенте, если работает, дальше;
3. В консоли попробуйте
cd /usr/local/nagios/libexec
./svc_restart.sh CRITICAL spooler
Эта команда проверит правильность написания скрипта svc_restart.sh.
При написании был использован мануал Nagios с официального сайта. К сожалению ссылок не осталось, но думаю их легко нагуглить самостоятельно.
Автор: sat3452