Додаткові налаштування Nagios

У першій і другій статтях було розглянуто конфігурування Nagios для перевірки стану мережевих сервісів і самих серверів. Однак для повноцінного використання в корпоративному сегменті цього недостатньо.

У цій, третій статті циклу, розглядаються питання додаткового функціоналу системи моніторингу - настройка повідомлень, внутрішніх команд, а так само налаштування автоматичної системи реагування на проблеми.

Налаштування виконання внутрішніх команд

  

У конфігурації за замовчуванням відсутня можливість виконання внутрішніх команд, наприклад перепланування часу чергової перевірки сервісу або хоста. Це пов'язано не тільки з параметрами за замовчуванням в файлі конфігурації, але і з помилкою збірки пакета.

Для того, що б увімкнути дану можливість, виконаємо наступні дії.

У файлі /etc/nagios3/nagios.cfg встановимо значення параметра check_external_commands у 1. Цим ми дозволимо виконання внутрішніх команд.

check_external_commands=1

 

Далі створимо файл:

# touch /var/lib/nagios3/rw/nagios.cmd

  

І далі по черзі вводимо команди:

dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw

dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3

chown nagios:www-data /var/lib/nagios3/rw/nagios.cmd

  

За допомогою вищенаведених команд ми встановлюємо необхідні права доступу до файлів та тек, які необхідні для виконання внутрішніх команд.

Тепер перезапускаємо сервіс Nagios

# service nagios3 restart

 

З цього часу ми можемо без проблем перепланувати час найближчої перевірки сервісу.

  

Налаштування поштових повідомлень

  

У файлах конфігурації Nagios є налаштування відсилання повідомлень у випадку проблем з хостами або сервісами.

Для того, що б це коректно налаштувати проведемо наступні дії.

У файлі /etc/nagios3/conf.d/contacts_nagios2.cfg визначимо контакт (за замовчуванням root) та в полі email пропишемо адресу одержувача, наприклад, Ця електронна адреса захищена від спам-ботів. Вам потрібно увімкнути JavaScript, щоб побачити її.

 

В описі контакту є поля, в яких описано, коли посилати повідомлення про стан хоста і сервісу.

host_notification_options — значення за замовчуванням «d, r»

Можливі варіанти значень:

  • d — повідомляти про статус DOWN

  • u — повідомляти про статус UNREACHABLE

  • r — повідомляти про підняття хоста (перша поява статусу UP)

  • f — повідомляти про початок і закінчення «блимаючого» стану

  • s — повідомляти про початок і закінчення запланованого вимкнення

  • n — не відсилати жодних повідомлень

 

service_notification_options — значення за замовчуванням «w,u,c,r»

Можливі варіанти значень:

  • w — повідомляти про статус WARNING service states,

  • u — повідомляти про статус UNKNOWN service states,

  • c — повідомляти про статус CRITICAL service states,

  • r — повідомляти про підняття сервісу (перша поява статусу OK)

  • f — повідомляти про початок і закінчення «блимаючого» стану

  • n — не відсилати жодних повідомлень

 

На жаль, утиліта sendmail, яка використовується для відсилання повідомлень у налаштуваннях за замовчуванням, дозволяє використання тільки того поштового сервера, який встановлений на тій же машині, що і сам Nagios. Це не завжди зручно. З цього змінимо конфігурацію і скористаємося зовнішнім сервером.

 

Для цього встановимо додаткову утиліту sendemail.

# apt-get install sendemail

  

Так само будуть необхідні додаткові бібліотеки для роботи по шифрованим протоколам. Встановимо і їх

# apt-get install libio-socket-ssl-perl libnet-ssleay-perl

  

Далі змінимо самі команди відсилання повідомлень. Для цього в файлі /etc/nagios3/commands.cfg знайдемо опис команд і змінимо їх

Для notify-host-by-email пропишемо:

command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/sendemail -f Ця електронна адреса захищена від спам-ботів. Вам потрібно увімкнути JavaScript, щоб побачити її. -t $CONTACTEMAIL$ -u "NAGIOS WARNING" -s mail.study.local:587 -o tls=yes -xu Ця електронна адреса захищена від спам-ботів. Вам потрібно увімкнути JavaScript, щоб побачити її. -xp user1 -m

  

Для notify-service-by-email пропишемо:

command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/sendemail -f Ця електронна адреса захищена від спам-ботів. Вам потрібно увімкнути JavaScript, щоб побачити її. -t $CONTACTEMAIL$ -u "NAGIOS WARNING" -s mail.study.local:587 -o tls=yes -xu Ця електронна адреса захищена від спам-ботів. Вам потрібно увімкнути JavaScript, щоб побачити її. -xp user1 -m

  

 

Тепер докладніше про параметри командного рядка утиліти sendemail:

  • -f — адреса відправника

  • -t — адреса одержувача

  • -u — тема листа

  • -s — адреса поштового сервера і його SMTP-порт (якщо порт не вказати явно, то буде використовуватися 25)

  • -xu — логін на поштовий сервер

  • -xp — пароль на поштовий сервер

 

Тепер після перезапуску Nagios ми зможемо отримувати повідомлення на вказану поштову скриньку.

  

 

Налаштування додаткових дій при перевірках

   Крім безпосередньо самих перевірок, Nagios може в автоматичному режимі виконувати будь-які дії. Наприклад перезапустити певний сервіс в разі його недоступності.

Для цього служить такий об'єкт Nagios, як handler. Він може прив'язуватися або до хосту, або до сервісу.

В теці /etc/nagios3/conf.d створимо файл event-handlers.cfg і пропишемо в нього:

  

define command {

command_name restart-http

command_line /usr/share/nagios3/plugins/eventhandlers/repair_http.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$

}

 

Далі створимо скрипт /usr/share/nagios3/plugins/eventhandlers/repair_http.sh і запишемо в нього:

 

#!/bin/sh

# What state is the HTTP service in?

case "$1" in

OK)

;;

 

WARNING)

;;

 

UNKNOWN)

;;

 

CRITICAL)

case "$2" in

SOFT)

case "$3" in

 

3)

/etc/init.d/apache2 restart

;;

esac

;;

HARD)

# echo -n "Restarting HTTP service..."

/etc/init.d/apache2 restart

;;

esac

;;

esac

exit 0

 

І робимо цей скрипт виконуваним:

# chmod +x /usr/share/nagios3/plugins/eventhandlers/repair_http.sh

 

Тепер потрібно підключити даний хендлер до моніторингу потрібного сервісу.

Для цього в файлі опису сервісів services_nagios2.cfg в опис перевірки HTTP додаємо рядок

 

event_handler restart-http

  

Тобто отримуємо наступний запис

 

# check that web services are running

define service {

hostgroup_name http-servers

service_description HTTP

check_command check_http

use generic-service

notification_interval 0 ; set > 0 if you want to be renotified

event_handler restart-http

}

 

Тепер при падінні веб-сервера він перезавантажиться автоматично.