Nаgios – одна из самых популярных и гибких систем мониторинга, надежная помощь для администраторов средних и больших предприятий. Программа имеет огромное число плагинов для мониторинга практически всех сервисов и процессов, которые работают на любых ОС или сетевых устройствах, имеет гибкую систему оповещений по почте, на пейджер или смс. На официальном сайте Nagios можно всегда найти дополнительные web темы интерфейса и вспомогательные программы для этой системы.
Основными сервисами для мониторинга, которые не требуют каких-либо специальных настроек на удаленных машинах или сетевых устройствах являются PING, HTTP, FTP, SSH, проверка доступности определенных портов на удаленных машинах, ну и системные локальные проверки самой Unix машины, где установлен Nagios. Вот о настройке основ мониторинга Nagios и настройке стандартных сервисов и будет эта статья.
Про мониторинг процессов памяти, дискового пространства, мониторинг windows сервисов и процессов, мониторинг сетевых устройств и др. буду стараться писать в отдельных статьях, т.к. в одной статье систему Nagios просто не охватить.
1.Установка Nagios3
2.Настройка Nagios3
3.Добавление хостов и сервисов в Nagios3
4.Web интерфейс Nagios3
Установка Nagios3
Для работы Nagios должны быть уже настроены:
- http сервер с поддержкой выполнения cgi скриптов (я использую сервер apache)
- настроенная почтовая служба, для отправки оповещений по электропочте (я использовал sendmail)
Установка Nagios требует следующие основные зависимости:
- perl язык
- библиотеки GD, jpeg
Возможно потребуется установить и другие зависимости, например пакет snmp, но это все зависит от того, какие плагины и методы проверок хостов и сервисов вы будете использовать в Nagios.
Я опишу общий способ установки Nagios3 из исходников, которые скачиваем с официального сайта. Для установки Nagios3 требуется скачать Nagios3 Core и плагины к нему (последние версии на момент написания этой статьи Nagios Core 3.2.3 и Nagios-plugins 1.4.15).
Для запуска системы мониторинга будем использовать пользователя nagios и группу nagios. Создаем пользователя и группу командой adduser, addgroup или useradd, groupadd в зависимости от вашей ОС.
Конфигурируем Nagios3 Core с параметрами (пути до расположений файлов Nagios, файла httpd и до библиотек подставляем свои)
./configure --prefix=/usr/local/nagios3 \
--with-httpd-conf=/usr/local/apache/conf \
--with-cgiurl=/nagios3/cgi-bin \
--with-htmlurl=/nagios3 \
--with-nagios-user=nagios \
--with-nagios-group=nagios \
--with-gd-lib=/usr/local/lib \
--with-gd-inc=/usr/local/include
После конфигурирования должны увидеть примерно следующее показать
Выполняем
#make all
После выполнения команды обратите внимание, что для инсталляции отдельных компонентов Nagios3 Core требуется запускать перечисленные в подсказке команды
make install
- This installs the main program, CGIs, and HTML files
make install-init
- This installs the init script in /usr/local/etc/rc.d
make install-commandmode
- This installs and configures permissions on the
directory for holding the external command file
make install-config
- This installs *SAMPLE* config files in /usr/local/nagios3/etc
You'll have to modify these sample files before you can
use Nagios. Read the HTML documentation for more info
on doing this. Pay particular attention to the docs on
object configuration files, as they determine what/how
things get monitored!
make install-webconf
- This installs the Apache config file for the Nagios
web interface
От root или sudo выполняем их все
#make install
#make install-init
#make install-commandmode
#make install-config
#make install-webconf
Напоследок убедимся, что все компаненты Nagios Core инсталлировались в нужные места (/usr/local/nagios3 и стартовый скрипт nagios появился в системе) , а в конфиге apache http.conf есть строки показать
Приступаем к установка плагинов. Конфигурируем с параметрами нашей папки /usr/local/nagios3
./configure --prefix=/usr/local/nagios3 \
--with-ipv6=no \
--with-nagios-user=nagios \
--with-nagios-group=nagios \
--with-cgiurl=/nagios3/cgi-bin
затем от root или sudo
#make && make install
Установка на этом завершена, приступаем к настройке
Настройка Nagios3
По умолчанию конфиги nagios лежат в папке /usr/local/nagios3/etc, а конфиги хостов и сервисов и вспомогательных конфигов в /usr/local/nagios3/etc/objects.
Начинаем править основной конфиг – nagios.cfg.
Дописываем или убираем названия файлов конфигов, которые будут лежать в папке objects. Логика тут простая – можно все сгруппировать в один конфиг, но потом будет сложно ориентироваться в этом конфиге при редактировании информации, а можно каждую группу хостов, сервисов, команд и пр. выделить в отдельный конфиг, а потом этот конфиг подключить в nagios.cfg файле.
У меня после настройки образовались такие файлы конфигурации. Некоторые файлы уже были включены в шаблон nagios.cfg, некторые файлы я создал и подключил сам.
#описания команд nagios и команд плагинов nagios
cfg_file=/usr/local/nagios3/etc/objects/commands.cfg
#описания контактов админов и пользователей nagios
cfg_file=/usr/local/nagios3/etc/objects/contacts.cfg
#описания временных интервалов оповещений
cfg_file=/usr/local/nagios3/etc/objects/timeperiods.cfg
#шаблоны хостов и сервисов для различных устройств или ОС
cfg_file=/usr/local/nagios3/etc/objects/templates.cfg
#описание проверок хоста, где стоит сам Nagios
cfg_file=/usr/local/nagios3/etc/objects/localhost.cfg
#описание хостов и проверок windows машин
cfg_file=/usr/local/nagios3/etc/objects/windows.cfg
#описание хостов и проверок сетевых устройств
cfg_file=/usr/local/nagios3/etc/objects/switch.cfg
#описание хостов и проверок unix машин
cfg_file=/usr/local/nagios3/etc/objects/unix.cfg
#файл сервисных групп
cfg_file=/usr/local/nagios3/etc/objects/servicegroup.cfg
#файл описания logo картинок хостов
cfg_file=/usr/local/nagios3/etc/objects/hostextinfo.cfg
#файл для проверки принтеров (я не использовал его в данной статье)
#cfg_file=/usr/local/nagios3/etc/objects/printer.cfg
Далее правим файл cgi.cfg. Напротив нижеследующих переменных убираем пользователя nagiosadmin и прописываем логины своих админов. Если админов несколько, то пишем через запятую. Я вписал только пользователя mik
authorized_for_system_information=mik
authorized_for_configuration_information=mik
authorized_for_system_commands=mik
authorized_for_all_services=mik
authorized_for_all_hosts=mik
authorized_for_all_service_commands=mik
authorized_for_all_host_commands=mik
Если надо дать пользователю только доступ для чтения, то заносим логин этого пользователя в одну переменную
authorized_for_read_only=userlogin
Остальные переменные я оставил по умолчанию, но на всякий случай обращаю ваше внимание на эту переменную
refresh_rate=90
Это частота обновления web страницы в секундах. Не путайте с частотой проверки хостов и сервисов, до этих проверок мы еще дойдем 🙂
Для авторизации пользователей создаем файл соответствий логинов-паролей htpasswd.users, который можно расположить рядом с основными конфигами. Как создавать файл паролей для apache сервера написано в разделе Basic аутентификация статьи Доступ к http серверу по паролю.
После создания файла htpasswd.users создаем в папке /usr/local/nagios3/sbin файл .htaccess такого содержания
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios3/etc/htpasswd.users
require valid-user
Теперь когда кто-то попытается открыть страничку Nagios надо будет пройти авторизацию..
Добавление хостов и сервисов в Nagios3
Переходим в директорию /usr/local/nagios3/etc/objects, где хранятся конфиги отвечающие за мониторинг хостов.
Файл templates.cfg
В файле описаны шаблоны хостов и сервисов для различных типов машин или устройств. На эти шаблоны ссылаются при создании соответствующих новых хостов и сервисов. Файл достаточно подробно прокомментирован, я остановлюсь только на некоторых переменных
name generic-host ;можно задавать произвольное имя для своего шаблона
notification_period 24x7 ;период можно назвать произвольно, лишь бы имя этого периода
;было описано в файле timeperiods.cfg
contact_groups admins ;имя группы должно соответствовать названию группы, описанной
;в файле contacts.cfg
notification_options d,u,r ;соответсвует хост down, unknown, recovery
use name_templates ;внутри одного шаблона, можно ссылаться на предыдущий
Переменные отвечающие за частоту опроса хоста (сервиса)
max_check_attempts 4 ;cколько раз перепроверяем когда хост(сервис)
;стал недоступным
normal_check_interval 5 ;делаем проверку хоста (сервиса) каждые 5 минут
retry_check_interval 1 ;сколько пройдет минут между повторами, когда
;хост(сервис) не доступен
Рассмотрим самый пессимистичный сценарий исходя из вышеприведенных значений.
Предположим наш хост упал сразу после его успешной проверки раз в 5 минут, значит до следующей проверки должно пройти почти 5 минут в течении которых система не знает и не проверяет доступность этого хоста. На ~5 минуте после недоступности хоста Nagios делает очередную проверку и определяет что хост down, но оповещение сразу не шлет, а в дело вступает переменная retry_check_interval, которая перепроверяет теперь хост каждую 1 минуту. Таких перепроверок будет всего 4 по количеству max_check_attempts. Теперь прикинем максимальное время с момента падения ~5+4=~9мин, а минимальное время реагирования Nagios будет чуть больше 4мин.
Файл contacts.cfg
В самом простом случае он будет выглядеть примерно так
define contact{
contact_name mik
alias Mikhail
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email mik@localhost
}
define contactgroup{
contactgroup_name admins
alias all admins
members mik,user2,user3..
}
Если устройств в сети много и у каждого типа устройств свои админы, то создавайте отдельные группы для каждого типа админов, а в шаблонах или в самом описании проверок устройств ссылайтесь на эти группы.
Файл timeperiods.cfg
В этом файле я ничего не менял, т.к. везде использовал временной интервал 24×7, а можно достаточно гибко настроить свое время работы для каждого типа оповещений. Даже числа праздников учесть 🙂
Файл commands.cfg
Файл описаний команд хостов и сервисов. Сюда следует заносить свои команды для плагинов, рассылки почтовых оповещений, команды отсылки смс и т.д.
Приведу пример проверки работы squid сервера на порту 3128.
# 'check_squid' command definition
define command{
command_name check_squid
command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p 3128 -w 100 -c 300
}
Таким образом мы создали новую команду check_squid с предустановленными значениями порта и задержками ответа порта сервера.
Бинарный файл check_tcp является плагином для Nagios и находится в папке /usr/local/nagios3/libexec/.
Подбор переменных для плагина выполняем, запуская бинарные файлы плагинов, и только протестировав их заносим команды в файл commands.cfg.
Файл servicegroup.cfg
Я создал этот файл для разбиения сервисов по группам, чтобы потом в web интерфейсе была подробная информация по группам сервисов. Группы сервисов являются не обязательными для занесения в конфиги Nagios.
Пример файла на 4 группы сервисов показать
Файл localhost.cfg
Вот и дошли до описаний хостов и их сервисов 🙂 Структура этих файлов – сначала описываем группу этого типа хостов, затем сами хосты, а потом сервисы этих хостов.
Файл localhost.cfg предназначен для проверки работы самого хоста, где стоит Nagios3. У меня хост называется M2. Вот его конфиг показать
Обратите внимание на переменные servicegroups – они должны быть определены в файле servicegroup.cfg или отсутствовать совсем.
Файлы switch.cfg, unix.cfg, windows.cfg
Это файлы для различных типов устройств и сервисов. Примеры этих файлов, кроме unix.cfg, ставятся вместе с Nagios3 Core. Что-то дополнять тут особого смыла нет, замечание только одно, в примерах windows.cfg есть сервисы проверки места дисков, памяти, доступность сервисов – это работать не будет без установки специального сервиса на windows машинах. Аналогично с конфигом switch.cfg – snmp статусы, графики mrtg – это надо дополнительно настраивать. Как только дойдут руки обязательно напишу про это.
Мои файлы switch.cfg, unix.cfg, windows.cfg
Обратите внимание на переменную parents в описании хостов. Она служит для того, чтобы описать какой хост от кого зависит. Если этой переменной не задавать, то на карте хостов мы увидим, что будто все хосты отходят от нашего сервера c Nagios. А через parents мы будем задавать имя хоста от которого зависит опрашиваемый хост.
Это нам даст следующее:
- Корректную структуру нашей сети
- Поможет в определении корректных статусов устройств
Поясню. Если станет недоступен один из узловых коммутаторов сети, то статус DOWN получит только этот коммутатор, все остальные устройства зависящие от этого коммутатора будут иметь статус UNREACHABLE (недоступен). Таким образом Nagios не будет делать бесполезную проверку на доступность таких хостов, пока не станет доступен основной коммутатор.
Файл hostextinfo.cfg
В этом файле я ссылаюсь на логотипы ОС хостов и коммутаторов. Просто для красоты восприятия 🙂 Logo картинок лежат в папке /usr/local/nagios3/share/images/logos/. Как пример задаем logo коммутатору m76
define hostextinfo{
host_name m76
icon_image 3ComSS3s3300p.png
icon_image_alt 3Com Switch
vrml_image 3ComSS2h500.png
statusmap_image 3ComSS3s3300p.png
}
Я уже не помню где я брал эти логотипы, так что выложу их у себя. Для системы FreeBSD в портах я нашел отдельный порт для Nagios логотипов
Port: nagios-base-logos-1.0
Path: /usr/ports/misc/nagios-base-logos
Info: A collection of basic OS and device logos for Nagios
Думаю, что в некоторых linux дистрибутивах тоже есть отдельные пакеты с logo картинками для Nagios.
Web интерфейс Nagios3
Только после внимательного редактирования всех конфигов можно с первого раза запустить Nagios 🙂 Стартуем сервис для Linux /etc/init.d/nagios start, для FreeBSD /usr/local/etc/rc.d/nagios start.
Обязательно смотрим логи в файле /usr/local/nagios3/var/nagios.log, но обычно если в конфигах есть ошибка, то строка с именем файла вываливается на консоль. Если log файл не создался, проверяем права на запись в папку /usr/local/nagios3/var/ для пользователя Nagios.
После успешного запуска набираем в браузере http://имя_сервера_Nagios/nagios3/.
Для управления командами через web интерфейс (например отключить оповещение для хоста или сервиса) требуется чтобы на файл /usr/local/nagios3/var/nagios.cmd были права на запись пользователю от которого работает http сервер.
Напоследок мои скриншоты
PS: Есть вопросы, замечания? или вы заметили какие-то неточности в статье – прошу в камменты.
Материалы к прочтению:
Приветствую!
Все замечательно, годная статья!:)
Вам известно как можно массово коментарии к сервисам из старой версии нагиоса на третью запилить?
Спасибо , Отличная статья!
спасибо огромное, статья очень помогла, тут нет выпедрежа, как у тру админов при этом по ней легко все настраивается, наворачивается и понимается..
Добрый день!
Достался сервер администрирования Nagios в наследство. Он настроен и вроде всё ок, но вот пароль от веб-морды я не знаю, да и спросить не у кого. Подскажите пожалуйста, как можно его сменить или узнать?
Пробовал просто менять пароль для пользователя nagios в системе, но на веб-интерфейс меня всё равно не пускает.
Тут пароль не от самого nagios, а от httpd сервера. У меня стоит apache. В каталоге sbin для nagios прописан файл доступа .htaccess. Вот в нем можно посмотреть в какой файлик он лазиет для файла паролей. Потом найти этот файл паролей и сгенерить новый пароль уже для своего пользователя или старого.
Если сгенерите для нового то не забудьте еще поправить файл cgi.cfg для выдачи прав админа.
Вчера уже выполнил это. Но всё равно большое вам спасибо за ответ!
Приветствую. Вопрос следующий: нормально будет работать проверка если один пользователь внесен в несколько групп?
Да. Проблем не будет.
А есть варианты скрипта для автоматического добавления новых хостов, появившихся в сети? Не хотелось бы мигрировать на забикс, или самому такого монстра придумывать.
Допустим у нас имеется 3и вида свичей в неком диапазоне. необходимо чтобы скрипт шерстил этот диапазон по пингу, сравнивал со списком существующих свичей, новые, допустим, проверял на эхо и добавлял свич в список с определённой группой.
Или-же как-то проще можно придумать?
Хороший вопрос 🙂 Но я не знаю как сделать это в автоматическом режиме средствами Nagios.
Но в принципе все решаемо, если написать скрипт который будет опрашивать диапазон некой сети и добавлять новые хосты в конфиги нагиоса и передергивать службу при добавлении. А может такой скрипт уже и есть..
подскажите пожалуйста как включить оповещение при пропадание пингов? зарание спасибо.
само собой контакт надо прописать в файл contacts.cfg, а пинги надо мониторить с помощью команды check_ping. В файле switch.cfg показан пример устройтсв на которых мониторятся только пинги.
Сначала описываем все хосты, а во второй половине файла описаны применения команды check_ping.
Отличная статья! Большое спасибо!