четверг, 2 июля 2015 г.

Настройка Nagios 3


Сегодня добавим хост на мониторинг в 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 хоста в мониторинге, объединенные в одну группы.
При этом у принтера будет проверка состояния картриджей, и оба будут пинговаться.

Комментариев нет:

Отправить комментарий