# cd /usr/local/nagios/etc
# ll
total 92
-rw-rw-r-- 1 nagios nagios 17028 Nov 11 15:41 cgi.cfg-sample
-rw-rw-r-- 1 nagios nagios 4480 Nov 11 15:41 checkcommands.cfg-sample
-rw-rw-r-- 1 nagios nagios 1577 Nov 11 15:41 contactgroups.cfg-sample
-rw-rw-r-- 1 nagios nagios 1485 Nov 11 15:41 contacts.cfg-sample
-rw-rw-r-- 1 nagios nagios 1651 Nov 11 15:41 dependencies.cfg-sample
-rw-rw-r-- 1 nagios nagios 2022 Nov 11 15:41 escalations.cfg-sample
-rw-rw-r-- 1 nagios nagios 1658 Nov 11 15:41 hostgroups.cfg-sample
-rw-rw-r-- 1 nagios nagios 5774 Nov 11 15:41 hosts.cfg-sample
-rw-rw-r-- 1 nagios nagios 4277 Nov 11 15:41 misccommands.cfg-sample
-rw-rw-r-- 1 nagios nagios 21332 Nov 11 15:41 nagios.cfg-sample
-rw-rw---- 1 nagios nagios 3074 Nov 11 15:41 resource.cfg-sample
-rw-rw-r-- 1 nagios nagios 17668 Nov 11 15:41 services.cfg-sample
-rw-rw-r-- 1 nagios nagios 1594 Nov 11 15:41 timeperiods.cfg-sample
В названии каждого файла есть фрагмент -sample, значит, все вышеперечисленные файлы являются не полноценными конфигурациями, а всего лишь примерами. На случай, если нам вдруг захочется посмотреть, что там у них внутри, скопируем их в директорию sample. Может быть, когда-то они нам еще пригодятся.
# mkdir sample
# cp * ./sample
Переименовываем все файлы, отсекая цепочку символов -sample. Таким образом, мы готовим файлы к тому, чтобы Nagios смог их заметить и правильно воспринять. В результате должно получиться что-то вроде:
# ll
total 94
-rw-rw-r-- 1 nagios nagios 17028 Nov 11 16:13 cgi.cfg
-rw-rw-r-- 1 nagios nagios 4480 Nov 11 16:13 checkcommands.cfg
-rw-rw-r-- 1 nagios nagios 1577 Nov 11 16:13 contactgroups.cfg
-rw-rw-r-- 1 nagios nagios 1485 Nov 11 16:13 contacts.cfg
-rw-rw-r-- 1 nagios nagios 1651 Nov 11 16:13 dependencies.cfg
-rw-rw-r-- 1 nagios nagios 2022 Nov 11 16:13 escalations.cfg
-rw-rw-r-- 1 nagios nagios 1658 Nov 11 16:13 hostgroups.cfg
-rw-rw-r-- 1 nagios nagios 5774 Nov 11 16:13 hosts.cfg
-rw-rw-r-- 1 nagios nagios 4277 Nov 11 16:13 misccommands.cfg
-rw-rw-r-- 1 nagios nagios 21332 Nov 11 16:13 nagios.cfg
-rw-rw---- 1 nagios nagios 3074 Nov 11 16:13 resource.cfg
drwxr-xr-x 2 root nagios 512 Nov 11 16:07 sample
-rw-rw-r-- 1 nagios nagios 17668 Nov 11 16:13 services.cfg
-rw-rw-r-- 1 nagios nagios 1594 Nov 11 16:13 timeperiods.cfg
К сожалению, файлы все еще не готовы к употреблению. Nagios даже не сможет стартовать, если мы попытаемся его запустить. Разобраться в содержимом файлов примеров, созданных во время инсталляции, довольно сложно. Самым лучшим выходом из подобной ситуации будет уничтожение всех конфигурационных данных и создание их вручную под моим чутким руководством. Такой подход принесет более глубокое понимание используемой методики настройки. Обнуляем все необходимые файлы.
Начиная с версии 1.0b2, в Nagios появилась возможность использовать шаблоны внутри конфигурационных файлов. Такая методика настройки позволяет многократно снизить время создания рабочей конфигурации.
Перед нами стоит задача описать два хоста mail.firma.ru и proxy.firma.ru.
Каждый сервер, находящийся под наблюдением, должен быть описан в файле хостов. Поэтому первым делом заполняем именно этот файл.
Содержимое файла hosts.cfg
# Описываем шаблон хоста
define host{
name generic-host
# Имя шаблона - будем ссылаться на него позже при описании каждого хоста
notifications_enabled 1
# Включаем уведомления
event_handler_enabled 1
# Включаем обработчик событий
process_perf_data 1
# Собирать статистику об эффективности работы процесса
retain_status_information 1
# Сохранять статусную информацию между перезагрузками программы
retain_nonstatus_information 1
# Сохранять нестатусную информацию между перезагрузками программы
register 0
# Указываем, что все вышеописанное - это шаблон. Запрещаем регистрировать
# это описание как хост
}
# Описываем хост по имени mail
define host{
use generic-host
# Ссылка на используемый шаблон
host_name mail
# Имя хоста
alias Mail Server
# Псевдоним хоста
address mail.firma.ru
# Имя хоста в формате fqdn или его адрес
check_command check-host-alive
# Команда проверки хоста выполняется обычно с помощью ping. Подробнее можно
# почитать в файле checkcommands.cfg
max_check_attempts 10
# Количество попыток повторного тестирования после того, как одна из попыток
# возвратила ошибочный статус.
notification_interval 120
# Интервал в минутах, по прошествию которого нужно повторно отсылать
# уведомление, если сервер все еще не работает.
notification_period 24x7
# Период времени, в течение которого серверу разрешено беспокоить администратора
# своими уведомлениями. В данном случае это круглые сутки. Подробнее о периодах
# можно почитать в файле timeperiods.cfg.
notification_options d,u,r
# Список событий, при наступлении которых необходимо отсылать
# уведомления. Соответственно d,u,r (DOWN, UNREACHABLE, RECOVERY)
# означает события "работает", "недоступен", "восстановлен".
}
# Описываем хост по имени proxy
define host{
use generic-host
host_name proxy
# Имя хоста. Также стоит обратить внимание на изменившиеся записи alias и address.
alias Proxy Server
address proxy.firma.ru
check_command check-host-alive
max_check_attempts 10
notification_interval 120
notification_period 24x7
notification_options d,u,r
}
Каждый хост должен состоять хотя бы в одной группе хостов. Опираясь на группы хостов, Nagios сможет определить, какую из групп администраторов нужно оповещать. Данные, полностью описывающие группы хостов, находятся в файле hostgroups.cfg. Формат этого файла настолько прост, что механизм шаблонов применять смысла нет. Посмотрим, чем заполнен этот файл.
Содержимое файла hostgroups.cfg
define hostgroup{
hostgroup_name firma-servers
# Имя группы
alias Firma Servers
# Псевдоним группы
contact_groups firma-admins
# Список групп контактов, которые нужно уведомлять
members mail proxy
# Список серверов, принадлежащих к группе
}
Пришло время вплотную заняться описанием сервисов, за которыми нужно наблюдать. Как и во всех остальных конфигурационных файлах, первым делом необходимо создать шаблон сервиса. Мы разберем его подробно. Затем, второй и третьей записью, будут описаны сервисы HTTP и PING, базирующиеся на хосте proxy.firma.ru. Соответственно, далее мы работаем с mail.firma.ru, на котором у нас базируются SMTP и IMAP.
Содержимое файла services.cfg
# Описываем шаблон сервиса
define service{
name generic-service
# Имя шаблона
passive_checks_enabled 1
# Принимать результаты пассивных проверок
parallelize_check 1
# Активные проверки лучше выполнять паралельно,
# такой подход повышает скорость работы
obsess_over_service 0
# Эту опцию стоит включать только при создании распределенной
# системы мониторинга.
check_freshness 0
# Следить за свежестью результатов проверок. По умолчанию отключено
notifications_enabled 1
# Уведомления включены
event_handler_enabled 1
# Включить обработчики событий
flap_detection_enabled 1
# Использовать обнаружение мерцания
process_perf_data 1
# Собирать данне об эффективности выполнения проверок
retain_status_information 1
# Сохранять информацию о статусе между перезапусками Nagios
retain_nonstatus_information 1
# Сохранять нестатусную информацию между перезапусками Nagios
register 0
# Запрещаем регистрировать это описание как сервис
}
# Описываем сервис HTTP для хоста proxy.firma.ru
define service{
use generic-service
# Имя используемого шаблона
hostname proxy.firma.ru
# Имя хоста
service_description HTTP
# Описание сервиса
is_volatile 0
# Для стандартных сервисов лучше оставить значение 0
# К нестандартным сервисам стоит относить те сервисы, которые
# после каждой проверки автоматически возвращаются в состояние "ОК"
# вне зависимости от режима, в котором они находились до проверки.
check_period 24x7
# Период, в течение которого можно выполнять проверки
max_check_attemps 3
# Максимальное количество повторных проверок
normal_check_interval 5
# Интервал между нормальными проверками
retry_check_interval 1
# Интервал между повторными проверками. Применяется, если
# нормальная проверка завершилась неудачно
contact_groups firma-admins
# Группа контактов, используемая для оповещения
notification_interval 120
# Интервал (в минутах), после которого нужно послать повторное уведомление,
# если сервис так и не восстановился
notification_period 24x7
# Период, в течение которого можно производить отправку уведомлений
notification_options w,u,c,r
# Список событий, при наступлении которых необходимо
# отсылать уведомления.
check_command check_http
# Имя команды, выполняемой для проверки сервиса
}
# Описываем сервис PING для хоста proxy.firma.ru
define service{
use generic-service
# Имя используемого шаблона
hostname proxy.firma.ru
# Имя хоста
service_description PING
# Описание сервиса
is_volatile 0
check_period 24x7
# Период, в течение которого можно выполнять проверки
max_check_attempts 3
# Максимальное количество повторных проверок
normal_check_interval 5
# Интервал между нормальными проверками
retry_check_interval 1
# Интервал между повторными проверками. Применяется, если
# нормальная проверка завершилась неудачно
contact_groups firma-admins
# Группа контактов, используемая для оповещения
notification_interval 120
# Интервал (в минутах), после которого нужно послать повторное уведомление,
# если сервис так и не восстановился
notification_period 24x7
# Период, в течение которого можно производить отправку уведомлений
notification_options w,u,c,r
# Список событий, при наступлении которых необходимо
# отсылать уведомления.
check_command check_ping
# Имя команды, выполняемой для проверки сервиса
}
# Описываем сервис SMTP для хоста mail.firma.ru
define service{
use generic-service
hostname mail.firma.ru
service_description SMTP
# Описание сервиса
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 5
retry_check_interval 1
contact_groups firma-admins
notification_interval 120
notification_period 24x7
notification_options w,u,c,r
check_command check_smtp
# Имя команды, выполняемой для проверки сервиса
}
# Описываем сервис IMAP для хоста mail.firma.ru
define service{
use generic-service
hostname mail.firma.ru
service_description IMAP
# Описание сервиса
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 5
retry_check_interval 1
contact_groups firma-admins
notification_interval 120
notification_period 24x7
notification_options w,u,c,r
check_command check_imap
# Имя команды, выполняемой для проверки сервиса
}
Как Вы, возможно, сумели догадаться, имена команд, вызываемых для выполнения проверки того или иного сервиса, определяются параметром check_command. Сами же команды описываются в файле checkcommands.cfg. По странному стечению обстоятельств команда check_imap в этом файле не описана, несмотря на то, что среди модулей, установленных в директорию /usr/local/nagios/libexec/, файл check_imap присутствует. Видимо, это еще одна ошибка программистов Nagios. Ну и ладно, нам не привыкать делать все собственными руками. Разместим в любом месте файла checkcommands.cfg следующие строки:
Стоит отметить что имена хостов в файлах hosts.cfg и services.cfgдолжны быть идентичны. Мне казалось что это достаточно логично, но некоторые читатели почему то испытывают трудности с осознанием этого файкта. Создав описание сервисов, самое время перейти к определению списка людей, которым система будет отсылать оповещения. В терминологии Nagios каждая запись в файле contacts.cfg описывающая человека - это контакт. Формат записи довольно прост, поэтому и в данном случае шаблоны нам не пригодятся.
Содержимое файла contacts.cfg
define contact{
contact_name tigrisha
# Имя контакта
alias Andrei Beshkov
# Имя человека
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-by-email, notify-by-epager
# Команды рассылки уведомлений о событиях сервиса
host_notification_commands host-notify-by-email, host-notify-by-epager
# Команды рассылки уведомлений о событиях хоста
email
# Почтовый адрес
pager
# Адрес системы пейджинга
}
define contact{
contact_name amon
# Имя контакта
alias Dmitry Larin
# Имя человека
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-by-email, notify-by-epager
# Команды рассылки уведомлений о событиях сервиса
host_notification_commands host-notify-by-email, host-notify-by-epager
# Команды рассылки уведомлений о событиях хоста
email
# Почтовый адрес
pager
# Адрес системы пейджинга
}
Каждый контакт должен принадлежать как минимум одной контактной группе. Давайте создадим такую группу для контактов, описанных выше.
Содержимое файла contactgroups.cfg
define contactgroup{
contactgroup_name firma-admins
# Имя контактной группы
alias firma.ru Admins
# Псевдоним группы
members tigrisha amon
# Список контактов состоящих в группе
}
Файл dependencies.cfg отвечает за зависимости между хостами. Ну а файл escalations.cfg, в свою очередь, описывает эскалацию оповещений. В связи с тем, что рассматриваемый нами пример состоит всего из двух хостов, файлы зависимостей и эскалации нам не пригодятся. Отсюда вытекает приятный факт, говорящий, что необходимости заполнять их у нас нет. Возможно, в следующей статье я подробно опишу работу с файлами зависимостей и эскалации.