Возможности 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
Службы
Службы определяются с помощью директивы 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.
- Nagios - официальный сайт
- Nagios documentation - официальная документация