Nagios - мониторинг сети

25.01.2013
Nagios — это приложение, предназначенное для выполнения мониторинга систем и сетей. Оно следит за приложениями и службами и генерирует оповещения в зависимости от поведения наблюдаемых служб. Nagios это рекурсивный акроним, расшифровывающийся как Nagios Ain't Gonna Insist On Sainthood (Nagios не собирается настаивать на святости — намек на прежнее название проекта, NetSaint — сетевой святой). Nagios чрезвычайно мощный и гибкий инструмент, позволяющий настроить мониториг для окружения любого уровня сложности и масштаба.

Возможности Nagios

  • Мониторинг сетевых служб (SMTP, POP3, HTTP, NNTP, ICMP, SNMP)
  • Мониторинг состояния хостов (загрузка процессора, использование диска, системные логи) в большинстве сетевых операционных систем
  • Поддержка удаленного мониторинга через шифрованные туннели SSH или SSL
  • Простая архитектура модулей расширений (плагинов) позволяет, используя любой язык программирования по выбору (Shell, C++, Perl, Python, PHP, C# и другие), легко разрабатывать свои собственные способы проверки служб
  • Параллельная проверка служб
  • Возможность определять иерархии хостов сети с помощью «родительских» хостов, позволяет обнаруживать и различать хосты, которые вышли из строя, и те, которые недоступны
  • Отправка оповещений в случае возникновения проблем со службой или хостом (с помощью почты, пейджера, смс, или любым другим способом, определенным пользователем через модуль системы)
  • Возможность определять обработчики событий произошедших со службами или хостами для проактивного разрешения проблем
  • Автоматическая ротация лог-файлов
  • Возможность организации совместной работы нескольких систем мониторинга с целью повышения надёжности и создания распределенной системы мониторинга

Основные понятия

Хост

Хосты – объекты, описывающие физические или виртуальные устройства в сети, за которыми необходимо вести наблюдение.

Служба

Службы – отдельная функциональность, ассоциированная с хостом и выполняющаяся на нем (например веб-сервер или сервер приложений) либо одна из его характеристик (загрузка процессора, использование диска или памяти, время отклика).

Команда

Команды определяют каким именно образом будет осуществляться проверка того или иного сервиса. Это своего рода абстракция над плагинами, которые в свою очередь реализуют проверку и возвращают результат в заданном формате.

Период

С помощью периодов времени определяются интервалы, в рамках которых должны выполняться или не выполняться операции такие как оповещения или реакции на изменения статуса служб.

Контакт и группа контактов

Контакты - это персоны, получающие извещение, когда система или служба отключается. По умолчанию Nagios предлагает оповещение по электронной почте и пейджерам, но расширения позволяют отправлять извещения по протоколу Jabber и многими другими способами, которые могут быть удобны в различных обстоятельствах. Контакты можно группировать, и вместо отдельных людей, которые должны быть извещены в случае изменения статуса системы или службы, Nagios будет оповещать соответствующую группу. Иногда имеет смысл задать пользователя несколько раз, чтобы определить различные адреса или команды для отправки извещений и затем добавить все способы связаться с пользователем к группе контактов, к которой он принадлежит.

Установка

Большинство дистрибутивов Linux поставляются с встроенной версией Nagios. В этом случае продукт легко интегрируется с Web-сервером Apache. Для активизации или обновления такой конфигурации необходимо выполнить команду менеджера пакетов.

Пример для Debian:

apt-get install nagios3

Для других платформ исходный код Nagios можно загрузить с Web-сайта Nagios.org (см. раздел Ресурсы). Для создания Nagios "с чистого листа" необходимы следующие инструменты разработчика.

Инструменты:

  • gcc
  • make
  • autoconf
  • automake
Исполняемые файлы:
  • libgd
  • openssl

Многие плагины, связанные с SNMP (Simple Network Management Protocol - простой протокол сетевого управления) также потребуют наличия Perl и пакета Net::SNMP.

После установки и настройки Nagios можно получить к нему доступ через стандартный URL http://hostname/nagios

Конфигурация

Главный конфигурационный файл Nagios называется nagios.cfg и как правило находится по адресу /etc/nagios/nagios.cfg. Данный файл позволяет задать множество различных параметров, в том числе параметр cfg_dir позволяет задать пути к директориям с настройками мониторинга. Это очень удобно, потому что с его помощью можно сгруппировать файлы конфигурации на уровне файловой системы. Полное описание параметров конфигурации содержится по адресу http://nagios.sourceforge.net/docs/3_0/configmain.html

Хосты

Хосты определяются с помощью директивы host. Пример определения хоста представлен ниже:
define host
{
host_name                       linuxbox01
hostgroups                      linuxservers
alias                           Linux Server 01
address                         10.0.2.1
check_command                   check-host-alive
check_interval                  5
retry_interval                  1
max_check_attempts              5
check_period                    24x7
contact_groups                  linux-admins
notification_interval           30
notification_period             24x7
notification_options            d,u,r
}
Параметры определения хоста:
  • host_name – короткое уникальное имя хоста
  • alias – описательное имя
  • address – IP адрес или полное доменное имя
  • check_interval - период осуществления проверок в минутах
  • retry_interval – определяет время ожидания перед повторной проверкой в минутах
  • max_check_attempts – максимальное кол-во попыток, после которого хост считается неработоспособным
  • check_period – название интервала, в границах которого будет осуществляться мониторинг
  • contacts, contact_groups – определяют список для оповещения об изменениях
  • notification_options – опции оповещения
    • d—DOWN state
    • u—UNREACHABLE state
    • r—host recovery (UP state)
    • f—host starts and stops flapping
    • s—notify when scheduled downtime starts or ends
Хосты могут быть объединены в группы при помощи директивы hostgroup. Группы хостов позволяют упросить конфигурирование и мониторинг устройств.

Службы

Службы определяются с помощью директивы service. Пример определения службы:
define service
{
host_name                      linuxbox01
service_description            WWW
check_command                  check_http
check_interval                 10
check_period                   24x7
retry_interval                 3
max_check_attempts             3
notification_interval          30
notification_period            24x7
notification_options           w,c,u,r
contact_groups                 linux-admins
}
Параметры определения службы:
  • host_name – хост или список хостов, на котором(ых) работает служба
  • hostgroup_name – группа или список групп хостов
  • service_description – уникальное описание службы
  • servicegroups – список групп, к которым принадлежит служба
  • check_command – команда для непосредственной проверки работоспособности службы
  • contacts,contact_groups – список для оповещения
  • notification_options – опции оповещения
    • w—WARNING
    • u—UNKNOWN
    • c—CRITICAL
    • r—service recovery (back t
    • OK)
    • f—host starts and stops flapping
    • s—notify when scheduled downtime starts or ends

Команды

Команды определяют каким именно образом будет проверяться та или иная служба. Пример определения команды:
define command
{
command_name  check-host-alive
command_line  $USER1$/check_ping -H $HOSTADDRESS$ 
-w 3000.0,80% -c 5000.0,100% -p 5
}
Определение команды состоит из имени команды, часто совпадающим с названием плагина, выполняющего проверку, и аргументов командной строки. Вызов команд с параметрами имеет синтаксис:
command_name[!arg1][!arg2][!arg3][...]
Аргументы командной строки доступны через макроподстановки $ARG1$,$ARG2$...$ARGN$

Контакты

Контакты определяют людей, задействованных в процессе мониторинга, которым в случае проблем будут рассылаться оповещения. Пример объявления контакта:
define contact
{
contact_name                   jdoe
alias                          John Doe
email                          john.doe@yourcompany.com
host_notification_period       workinghours
service_notification_period    workinghours
host_notification_options      d,u,r
service_notification_options   w,u,c,r
host_notification_commands     host-notify-by-email
service_notification_commands  notify-by-email
}
Параметры:
  • contact_name – короткое уникальное имя контакта
  • alias – описание, как правило полное имя сотрудника
  • contactgroups – список всех групп, к которым принадлежит сотрудник
  • host_notifications_enabled/service_notifications_enabled – определяет должен ли сотрудник получать уведомления при изменении состояния хостов/служб
  • host_notification_period/service_notification_period – определяют временные границы, в рамках которых будет происходить оповещение
  • host_notification_commands/service_notification_commands – команда, используемая для оповещения
  • host_notification_options/service_notification_options – опции оповещения
  • email – адрес электронной почты
  • pager – номер телефона или шлюз для отправки текстовых сообщений на телефон
  • address1 … address6 – дополнительные адреса для оповещения

Периоды времени

Пример определения периода времени:
define timeperiod
{
timeperiod_name  workinghours
alias            Working Hours, from Monday to Friday
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
}
Период времени может быть задан в различных форматах, в том числе в формате даты, дня, повторяющегося в рамках года, определенный день недели или число месяца и т.д.

Шаблоны

Любое из описанных выше определений может быть задано в виде шаблона с набором значений по умолчанию для общих параметров. Если говорить на языке ООП, то шаблон Nagios – это абстрактный базовый класс. Указать что определение является шаблоном, а не реальным объектом, можно с помощью параметра:
register 0

Плагины Nagios

Nagios выполняет проверку с помощью запуска внешних команд и анализа результата их выполнения для определения работоспособности хоста или сервиса. Такие внешние команды называются плагины. Nagios поставляется с большим количеством плагинов для проверки сетевых ресурсов, веб сайтов, почтовых серверов и серверов БД, для проверки нагрузки, мониторинга процессов и доступного дискового пространства. Для большей части задач мониторинга хватает стандартной поставки Nagios. Для вещей, которые не покрывает стандартная поставка, можно найти сторонний плагин или написать его самостоятельно. Плагин для Nagios может быть написан на любом языке. Единственное требование – он должен возвращать определенный набор кодов возврата.
  • 0-OK Работает
  • 1-WARNING Требуется внимание
  • 2-CRITICAL Не работает
  • 3-UNKNOWN Невозможно определить статус

Стандартные плагины

Сетевые плагины

  • check_ping – проверка доступности устройства
  • check_tcp, check_udp – проверка соединения по соотв. Протоколу
  • check_http – проверка доступности web-ресурсов

Мониторинг БД

  • check_oracle
  • check_mysql
  • check_pgsql

Мониторинг ресурсов

  • check_swap
  • check_disk – проверка пространсва диска
  • check_disk_smb – позволяет мониторить пространство на удаленных общих ресурсах
  • check_procs – позволяет мониторить количество процессов, использование памяти и процессора и их комбинацию

Видеоматериал

Небольшой видеообзор системы мониторинга Nagios:

Nagios from Amigos Team on Vimeo.

Источники