Сегодня добавим хост на мониторинг в Nagios3 (сервер Debian 8).
Итак, для начала немного теории.
1) Все настройки мониторинга хранятся в папке /etc/nagios3/conf.d
2) Nagios "воспринимает" только файлы с расширением .cfg
3) Все хосты можно разбить по разным файлам, а можно объеденить хосты и сервисы (методы проверки) в разные файлы
Начнем с самого начала.
Установим Nagios:
apt-get install nagios3
Cделаем backup существующих настроек:
mv /etc/nagios3/conf.d /etc/nagios3/conf.d.BACK
mkdir /etc/nagios3/conf.d
1) Первое, что нам нужно - это определить временные интервалы.
Создадим файл настроек временных интервалов /etc/nagios3/conf.d/01-timeperiods.cfg:
echo "
# Период 24х7 (Круглосуточная проверка) - которым в основном и будем пользоваться
define timeperiod{
timeperiod_name 24x7 ; Имя временного периода (24x7)
alias 24x7 ; Описание периода
monday 00:00-24:00 ; Временной интервал в понедельник
tuesday 00:00-24:00 ; Временной интервал во вторник
wednesday 00:00-24:00 ; Временной интервал в среду
thursday 00:00-24:00 ; Временной интервал в четверг
friday 00:00-24:00 ; Временной интервал в пятницу
saturday 00:00-24:00 ; Временной интервал в субботу
sunday 00:00-24:00 ; Временной интервал в воскресение
}
# Рабочие часы
define timeperiod{
timeperiod_name workhours
alias workhours
monday 09:00-17:00
tuesday 09:00-17:00
wednesday 09:00-17:00
thursday 09:00-17:00
friday 09:00-17:00
}
# Не рабочие часы
define timeperiod{
timeperiod_name nonworkhours
alias nonworkhours
monday 00:00-09:00,17:00-24:00
tuesday 00:00-09:00,17:00-24:00
wednesday 00:00-09:00,17:00-24:00
thursday 00:00-09:00,17:00-24:00
friday 00:00-09:00,17:00-24:00
saturday 00:00-24:00
sunday 00:00-24:00
}
# Для того "чтобы было" период "никогда"
# Здесь не заданны временные интервалы, это значит, что проверки не будет
define timeperiod{
timeperiod_name never
alias Never
}
" >> /etc/nagios3/conf.d/01-timeperiods.cfg
2) Нужно задать команду оповещения по почте, и настроить эту самую почту.
Установим sendemail, с помощью которого будем производить почтовую рассылку:
apt-get install sendemail
Добавим следующий код в файл /etc/nagios3/commands.cfg:
#Оповещение по email о состоянии хоста
define command{
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "*****MONITORING SYSTEM*****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/sendemail -s youre.mail.server -xu monitoring_username -xp monitoring_password -t $CONTACTEMAIL$ -f frommail@mail.server -o tls=no -l /var/log/sendemail.log -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" -m "*****MONITORING SYSTEM*****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n"
}
#Оповещение по email о состоянии сервиса
define command{
command_name notify-service-by-email
command_line /usr/bin/printf "%b" "*****MONITORING SYSTEM*****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/sendemail -s youre.mail.server -xu monitoring_username -xp monitoring_password -t $CONTACTEMAIL$ -f frommail@mail.server -o tls=no -l /var/log/sendemail.log -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -m "*****MONITORING SYSTEM*****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$"
}
#Команда проверки по SNMP
define command{
command_name check_snmp01
command_line /usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ $ARG1$
}
Итак, если не вдаваться в подробности, видно, что мы только что добавили 3 команды:
notify-host-by-email - оповещение по почте о состоянии хоста
notify-service-by-email - оповещение по почте о состоянии сервиса
Ключевые моменты данных команд, которые нужно настроить исходя из сервера, через который будет происходить рассылка:
-s youre.mail.server - ip или DNS имя почтового сервера
-xu monitoring_username - имя пользователя
-xp monitoring_password - пароль
-f frommail@mail.server - почтовый ящик мониторинга
-o tls=no - используется или нет tls
И check_snmp01, с помощью которой будем проверять состояние хостов по SNMP
3) Задаем контактные лица, которым будут отправляться оповещения о пропадании сервисов /etc/nagios3/conf.d/02-contacts.cfg:
echo "
#service_notification_options :
#w - оповещать, если состояние сервиса WARNING
#u - оповещать, если состояние сервиса UNKNOWN
#c - оповещать, если состояние сервиса CRITICAL
#r - оповещать, если состояние сервиса RECOVERY (сервис восстановился после сбоя)
#f - оповещать, если состояние сервиса FLAPPING - происходят кратковременные сбои (вкл/выкл) сервиса
#n - не оповещать (контакт не получит оповещений о состоянии сервиса)
#host_notification_options :
#d - оповещать, если состояние хоста DOWN
#u - оповещать, если состояние хоста UNREACHABLE
#r - оповещать, если состояние хоста RECOVERY (хост восстановился после сбоя)
#f - оповещать, если состояние хоста FLAPPING - происходят кратковременные сбои (вкл/выкл)
#s - оповещать, если хост выключился(включился) по расписанию
#n - не оповещать (контакт не получит оповещений о состоянии хоста)
#Контакт №1
define contact{
contact_name main_admin ; Имя контакта
alias Glavnii admin ; Описание контакта
service_notification_period 24x7 ; Оповещать о состоянии сервиса во временной интервал
host_notification_period 24x7 ; Оповещать о состоянии хоста во временной интервал
service_notification_options w,u,c,r ; WARNING,UNKNOWN,CRITICAL,RECOVERY
host_notification_options d,r ; DOWN,RECOVERY
service_notifications_enabled 1 ; Оповещать о изменениях сервисов
host_notifications_enabled 1 ; Оповещать о изменениях хоста
service_notification_commands notify-service-by-email ; Способ оповещения о состоянии сервиса(задан в commands.cfg)
host_notification_commands notify-host-by-email ; Способ оповещения о состоянии хоста(задан в commands.cfg)
email main_admin@yordomain.com; Почтовый ящик контактного лица
}
#Контакт №2
define contact{
define contact{
contact_name second_admin ; Имя контакта
alias Ne Glavnii admin ; Описание контакта
service_notification_period 24x7 ; Оповещать о состоянии сервиса во временной интервал
host_notification_period 24x7 ; Оповещать о состоянии хоста во временной интервал
service_notification_options w,u,c,r ; WARNING,UNKNOWN,CRITICAL,RECOVERY
host_notification_options d,r ; DOWN,RECOVERY
service_notifications_enabled 1 ; Оповещать о изменениях сервисов
host_notifications_enabled 1 ; Оповещать о изменениях хоста
service_notification_commands notify-service-by-email ; Способ оповещения о состоянии сервиса(задан в commands.cfg)
host_notification_commands notify-host-by-email ; Способ оповещения о состоянии хоста(задан в commands.cfg)
email second_admin@yordomain.com; Почтовый ящик контактного лица
}
#Группа контактов
define contactgroup{
contactgroup_name admins ; Имя группы
alias Nagios Administrators ; Описание
members main_admin,second_admin ; Состав группы
}
" >> /etc/nagios3/conf.d/02-contacts.cfg
4) Зададим шаблон для хостов. Это необязательно, но в дальнейшем значительно упростит конфигурацию Nagios-а
echo "
#notification_options :
#d - оповещать, если состояние хоста DOWN
#u - оповещать, если состояние хоста UNREACHABLE
#r - оповещать, если состояние хоста RECOVERY (хост восстановился после сбоя)
#f - оповещать, если состояние хоста FLAPPING - происходят кратковременные сбои (вкл/выкл)
#s - оповещать, если хост выключился(включился) по расписанию
#n - не оповещать (контакт не получит оповещений о состоянии хоста)
define host{
name host-shablon ; Имя шаблона
notifications_enabled 1 ; Включить оповещения
event_handler_enabled 1 ; Включить обработчик событий (контролировать состояние хоста)
flap_detection_enabled 1 ; Реагировать на ФЛАППИНГ или нет (кратковременный вкл/выкл хоста)
failure_prediction_enabled 1 ; Прогнозирование сбоев. В дальнейшем Nagios от этого
; параметра отказался совсем, т.к. он часто сбоит
process_perf_data 1 ; Обработка данных о производительности
retain_status_information 1 ; Обработка состояния хоста(включен, выключен, перезагружен)
; Если включен retain_nonstatus_information - запоминает состояние
; хоста и восстанавливает значение в случае перезагрузки нагиоса
retain_nonstatus_information 1 ; Запоминать состояние хоста в случае перезагрузки нагиоса
check_command check-host-alive ; Команда проверки. check-host-alive - проверка хоста на доступность
max_check_attempts 3 ; Количество проверок статуса отличного от ОК,
; перед тем как будет создано оповещение
notification_interval 60 ; Если статус отличен от ОК, выдавать оповещения каждый час
; (0-чтобы оповещать только в случае восстановления)
notification_period 24x7 ; Период оповещения 24х7
notification_options d,u,r ; DOWN, UNREACHABLE, RECOVERY
contact_groups admins ; Кому рассылать оповещения
register 0 ; Не регистрировать в Нагиосе, т.к. это только шаблон
}
" >> /etc/nagios3/conf.d/03-host_template.cfg
5) Зададим шаблон для сервисов:
echo "
#notification_options :
#w - оповещать, если состояние сервиса WARNING
#u - оповещать, если состояние сервиса UNKNOWN
#c - оповещать, если состояние сервиса CRITICAL
#r - оповещать, если состояние сервиса RECOVERY (сервис восстановился после сбоя)
#f - оповещать, если состояние сервиса FLAPPING - происходят кратковременные сбои (вкл/выкл) сервиса
#n - не оповещать (контакт не получит оповещений о состоянии сервиса)
define service{
name service_shablon ; Имя шаблона
; Есть 2 типа проверок состояния сервиса регулярно и по расписанию
active_checks_enabled 1 ; Включить акивные (регулярные) проверки
passive_checks_enabled 1 ; Включить пассивные (по расписанию) проверки
parallelize_check 1 ; Активные проверки должны быть параллельными
obsess_over_service 1 ; Предпочитать эту проверку а не через ocsp_command
check_freshness 0 ; Проверка на "свежесть" пассивных проверок
notifications_enabled 1 ; Включить оповещения
event_handler_enabled 1 ; Включить обработчик событий
flap_detection_enabled 1 ; Реагировать на ФЛАППИНГ или нет (кратковременный вкл/выкл сервиса)
failure_prediction_enabled 1 ; Прогнозирование сбоев. В дальнейшем Nagios от этого
; параметра отказался совсем, т.к. он часто сбоит
process_perf_data 1 ; Обработка данных о производительности
retain_status_information 1 ; Обработка состояния сервиса(включен, выключен, перезагружен)
; Если включен retain_nonstatus_information - запоминает состояние
; сервиса и восстанавливает значение в случае перезагрузки нагиоса
retain_nonstatus_information 1 ; Запоминать состояние сервиса в случае перезагрузки нагиоса
notification_interval 60 ; Если статус отличен от ОК, выдавать оповещения каждый час
; (0-чтобы оповещать только в случае восстановления)
is_volatile 0 ; Постоянный(0) или непостоянный(1) сервис
check_period 24x7 ; Период проверки 24х7
normal_check_interval 1 ; Интервал нормальной проверки
retry_check_interval 1 ; Интервал повторной проверки
max_check_attempts 1 ; Количество проверок статуса отличного от ОК,
; перед тем как будет создано оповещение
notification_period 24x7 ; Период оповещения 24х7
notification_options w,u,c,r ; WARNING UNKNOWN CRITICAL RECOVERY
contact_groups admins ; Кому рассылать оповещения
register 0 ; Не регистрировать в Нагиосе, т.к. это только шаблон
}
" >> /etc/nagios3/conf.d/03-service_template.cfg
6) Создаем сервис PING, в который будут включены все хосты, и будут они просто пинговаться:
echo "
#Данный сервис пингует все хосты, которые включены в мониторинг
#Сначала сам сервис:
define service {
hostgroup_name PING-CHECK ; Название сервиса
service_description PING ; Описание сервиса
check_command check_ping!200.0,40%!400.0,80% ; Команда проверки
use service_shablon ; Использовать шаблон service_shablon
}
#А теперь группа хостов, которая будет пинговаться:
#Здесь есть 1 момент, когда hostgroup_name сервиса и группы хостов совпадает
#Таким образов в данной группе хосты будут мониторится по описанному выше сервису
define hostgroup {
hostgroup_name PING-CHECK ; Название группы
alias ping all ; Описание группы
members * ; Состав группы * - значит все хосты
}
" >> /etc/nagios3/conf.d/04-ping_all_hosts.cfg
7) Ну а теперь зададим наш хост:
echo "
#Здесь задается хост
define host{
host_name my_host1 ; Имя хоста. Лучше без пробелов и по английски
alias my host number 1 ; Описание хоста
use host-shablon ; Использовать шаблон
address 212.193.163.6 ; IP Адрес хоста (который автоматически будет добавлен в сервис пинг)
}
#Определим группу хостов. В дальнейшем, когда в мониторинге будет много хостов - это будет помогать
define hostgroup {
hostgroup_name my_hosts_group_1 ; Имя группы
alias Group of hosts 1 ; Описание
members my_host1 ; Члены группы (по полю host_name).
; Если членов несколько, то через запятую my_host1,my_host2 и т.д.
}
" >> /etc/nagios3/conf.d/20-my_host_01.cfg
8) Хост у нас уже есть, а теперь запишем принтер.
Будем мониторить состояние картриджей в принтере Kyocera 6026 (Kyocera 6126,2035,2135).
Мониторинг будет осуществляться по SNMP:
echo "
#Сетевой принтер определяется для нагиоса как обычный хост
define host {
host_name Printer 6026 Ur Otdel
alias Printer in Ur office
address 10.77.0.11
use host-shablon
}
#Можно включить его в группу с предыдущим хостом
define hostgroup {
hostgroup_name my_hosts_group_1 ; Имя группы
alias Group of hosts 1 ; Описание
members Printer 6026 Ur Otdel ; Члены группы (по полю host_name).
}
#Проверка черного картриджа
#WARNING 443 страницы
#CRITICAL 100 страниц
define service{
use service_shablon ; Шаблон сервиса
host_name Printer 6026 Ur Otdel ; Имя хоста (по полю host_name).
service_description Black Cartridge ; Описание сервиса
check_command check_snmp01!-C public -o .1.3.6.1.2.1.43.11.1.1.9.1.4 -w 433: -c 100: ; SNMP запрос
}
#Проверка синего картриджа
#WARNING 443 страницы
#CRITICAL 100 страниц
define service{
use service_shablon
host_name Printer 6026 Ur Otdel
service_description Blue Cartridge
check_command check_snmp01!-C public -o .1.3.6.1.2.1.43.11.1.1.9.1.1 -w 433: -c 100:
}
#Проверка красного картриджа
#WARNING 443 страницы
#CRITICAL 100 страниц
define service{
use service_shablon
host_name Printer 6026 Ur Otdel
service_description Red Cartridge
check_command check_snmp01!-C public -o .1.3.6.1.2.1.43.11.1.1.9.1.2 -w 433: -c 100:
}
#Проверка желтого картриджа
#WARNING 443 страницы
#CRITICAL 100 страниц
define service{
use service_shablon
host_name Printer 6026 Ur Otdel
service_description Yellow Cartridge
check_command check_snmp01!-C public -o .1.3.6.1.2.1.43.11.1.1.9.1.3 -w 433: -c 100:
}
" >> /etc/nagios3/conf.d/30-my_printer_01.cfg
Вот собственно и все.
Осталось перезагрузить Нагиос:
/etc/init.d/nagios3 restart
Теперь у нас должны появится 2 хоста в мониторинге, объединенные в одну группы.
При этом у принтера будет проверка состояния картриджей, и оба будут пинговаться.