Nagios 3 – установка, настройка и эксплуатация

Nagios3Nаgios – одна из самых популярных и гибких систем мониторинга, надежная помощь для администраторов средних и больших предприятий. Программа имеет огромное число плагинов для мониторинга практически всех сервисов и процессов, которые работают на любых ОС или сетевых устройствах, имеет гибкую систему оповещений по почте, на пейджер или смс. На официальном сайте Nagios можно всегда найти дополнительные web темы интерфейса и вспомогательные программы для этой системы.
Основными сервисами для мониторинга, которые не требуют каких-либо специальных настроек на удаленных машинах или сетевых устройствах являются PING, HTTP, FTP, SSH, проверка доступности определенных портов на удаленных машинах, ну и системные локальные проверки самой Unix машины, где установлен Nagios. Вот о настройке основ мониторинга Nagios и настройке стандартных сервисов и будет эта статья.
Про мониторинг процессов памяти, дискового пространства, мониторинг windows сервисов и процессов, мониторинг сетевых устройств и др. буду стараться писать в отдельных статьях, т.к. в одной статье систему Nagios просто не охватить.

1.Установка Nagios3
2.Настройка Nagios3
3.Добавление хостов и сервисов в Nagios3
4.Web интерфейс Nagios3

Установка Nagios3


Для работы Nagios должны быть уже настроены:

  • http сервер с поддержкой выполнения cgi скриптов (я использую сервер apache)
  • настроенная почтовая служба, для отправки оповещений по электропочте (я использовал sendmail)

Установка Nagios требует следующие основные зависимости:

  • perl язык
  • библиотеки GD, jpeg

Возможно потребуется установить и другие зависимости, например пакет snmp, но это все зависит от того, какие плагины и методы проверок хостов и сервисов вы будете использовать в Nagios.
Я опишу общий способ установки Nagios3 из исходников, которые скачиваем с официального сайта. Для установки Nagios3 требуется скачать Nagios3 Core и плагины к нему (последние версии на момент написания этой статьи Nagios Core 3.2.3 и Nagios-plugins 1.4.15).
Для запуска системы мониторинга будем использовать пользователя nagios и группу nagios. Создаем пользователя и группу командой adduser, addgroup или useradd, groupadd в зависимости от вашей ОС.
Конфигурируем Nagios3 Core с параметрами (пути до расположений файлов Nagios, файла httpd и до библиотек подставляем свои)


./configure --prefix=/usr/local/nagios3 \
            --with-httpd-conf=/usr/local/apache/conf \
            --with-cgiurl=/nagios3/cgi-bin \
            --with-htmlurl=/nagios3 \
            --with-nagios-user=nagios \
            --with-nagios-group=nagios \
            --with-gd-lib=/usr/local/lib \
            --with-gd-inc=/usr/local/include

После конфигурирования должны увидеть примерно следующее показать


Выполняем


#make all

После выполнения команды обратите внимание, что для инсталляции отдельных компонентов Nagios3 Core требуется запускать перечисленные в подсказке команды


make install
     - This installs the main program, CGIs, and HTML files
make install-init
     - This installs the init script in /usr/local/etc/rc.d
make install-commandmode
     - This installs and configures permissions on the
       directory for holding the external command file
make install-config
     - This installs *SAMPLE* config files in /usr/local/nagios3/etc
       You'll have to modify these sample files before you can
       use Nagios.  Read the HTML documentation for more info
       on doing this.  Pay particular attention to the docs on
       object configuration files, as they determine what/how
       things get monitored!
make install-webconf
     - This installs the Apache config file for the Nagios
       web interface

От root или sudo выполняем их все


#make install
#make install-init
#make install-commandmode
#make install-config
#make install-webconf

Напоследок убедимся, что все компаненты Nagios Core инсталлировались в нужные места (/usr/local/nagios3 и стартовый скрипт nagios появился в системе) , а в конфиге apache http.conf есть строки показать


Приступаем к установка плагинов. Конфигурируем с параметрами нашей папки /usr/local/nagios3


./configure --prefix=/usr/local/nagios3 \
            --with-ipv6=no \
            --with-nagios-user=nagios \
            --with-nagios-group=nagios \
            --with-cgiurl=/nagios3/cgi-bin

затем от root или sudo


#make && make install

Установка на этом завершена, приступаем к настройке

Настройка Nagios3


По умолчанию конфиги nagios лежат в папке /usr/local/nagios3/etc, а конфиги хостов и сервисов и вспомогательных конфигов в /usr/local/nagios3/etc/objects.
Начинаем править основной конфиг – nagios.cfg.
Дописываем или убираем названия файлов конфигов, которые будут лежать в папке objects. Логика тут простая – можно все сгруппировать в один конфиг, но потом будет сложно ориентироваться в этом конфиге при редактировании информации, а можно каждую группу хостов, сервисов, команд и пр. выделить в отдельный конфиг, а потом этот конфиг подключить в nagios.cfg файле.
У меня после настройки образовались такие файлы конфигурации. Некоторые файлы уже были включены в шаблон nagios.cfg, некторые файлы я создал и подключил сам.


#описания команд nagios и команд плагинов nagios
cfg_file=/usr/local/nagios3/etc/objects/commands.cfg
#описания контактов админов и пользователей nagios
cfg_file=/usr/local/nagios3/etc/objects/contacts.cfg
#описания временных интервалов оповещений
cfg_file=/usr/local/nagios3/etc/objects/timeperiods.cfg
#шаблоны хостов и сервисов для различных устройств или ОС
cfg_file=/usr/local/nagios3/etc/objects/templates.cfg
#описание проверок хоста, где стоит сам Nagios
cfg_file=/usr/local/nagios3/etc/objects/localhost.cfg

#описание хостов и проверок windows машин
cfg_file=/usr/local/nagios3/etc/objects/windows.cfg
#описание хостов и проверок сетевых устройств
cfg_file=/usr/local/nagios3/etc/objects/switch.cfg
#описание хостов и проверок unix машин
cfg_file=/usr/local/nagios3/etc/objects/unix.cfg
#файл сервисных групп
cfg_file=/usr/local/nagios3/etc/objects/servicegroup.cfg
#файл описания logo картинок хостов
cfg_file=/usr/local/nagios3/etc/objects/hostextinfo.cfg
#файл для проверки принтеров (я не использовал его в данной статье)
#cfg_file=/usr/local/nagios3/etc/objects/printer.cfg

Далее правим файл cgi.cfg. Напротив нижеследующих переменных убираем пользователя nagiosadmin и прописываем логины своих админов. Если админов несколько, то пишем через запятую. Я вписал только пользователя mik


authorized_for_system_information=mik
authorized_for_configuration_information=mik
authorized_for_system_commands=mik
authorized_for_all_services=mik
authorized_for_all_hosts=mik
authorized_for_all_service_commands=mik
authorized_for_all_host_commands=mik

Если надо дать пользователю только доступ для чтения, то заносим логин этого пользователя в одну переменную

authorized_for_read_only=userlogin

Остальные переменные я оставил по умолчанию, но на всякий случай обращаю ваше внимание на эту переменную


refresh_rate=90

Это частота обновления web страницы в секундах. Не путайте с частотой проверки хостов и сервисов, до этих проверок мы еще дойдем 🙂
Для авторизации пользователей создаем файл соответствий логинов-паролей htpasswd.users, который можно расположить рядом с основными конфигами. Как создавать файл паролей для apache сервера написано в разделе Basic аутентификация статьи Доступ к http серверу по паролю.
После создания файла htpasswd.users создаем в папке /usr/local/nagios3/sbin файл .htaccess такого содержания


AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios3/etc/htpasswd.users
require valid-user

Теперь когда кто-то попытается открыть страничку Nagios надо будет пройти авторизацию..

Добавление хостов и сервисов в Nagios3


Переходим в директорию /usr/local/nagios3/etc/objects, где хранятся конфиги отвечающие за мониторинг хостов.

Файл templates.cfg

В файле описаны шаблоны хостов и сервисов для различных типов машин или устройств. На эти шаблоны ссылаются при создании соответствующих новых хостов и сервисов. Файл достаточно подробно прокомментирован, я остановлюсь только на некоторых переменных


name          generic-host  ;можно задавать произвольное имя для своего шаблона
notification_period    24x7 ;период можно назвать произвольно, лишь бы имя этого периода
                            ;было описано в файле timeperiods.cfg
contact_groups     admins   ;имя группы должно соответствовать названию группы, описанной
                            ;в файле contacts.cfg
notification_options      d,u,r ;соответсвует хост down, unknown, recovery
use              name_templates ;внутри одного шаблона, можно ссылаться на предыдущий

Переменные отвечающие за частоту опроса хоста (сервиса)


max_check_attempts            4   ;cколько раз перепроверяем когда хост(сервис)
                                  ;стал недоступным
normal_check_interval         5   ;делаем проверку хоста (сервиса) каждые 5 минут
retry_check_interval          1   ;сколько пройдет минут между повторами, когда
                                  ;хост(сервис) не доступен

Рассмотрим самый пессимистичный сценарий исходя из вышеприведенных значений.
Предположим наш хост упал сразу после его успешной проверки раз в 5 минут, значит до следующей проверки должно пройти почти 5 минут в течении которых система не знает и не проверяет доступность этого хоста. На ~5 минуте после недоступности хоста Nagios делает очередную проверку и определяет что хост down, но оповещение сразу не шлет, а в дело вступает переменная retry_check_interval, которая перепроверяет теперь хост каждую 1 минуту. Таких перепроверок будет всего 4 по количеству max_check_attempts. Теперь прикинем максимальное время с момента падения ~5+4=~9мин, а минимальное время реагирования Nagios будет чуть больше 4мин.

Файл contacts.cfg

В самом простом случае он будет выглядеть примерно так


define contact{
        contact_name                    mik
        alias                           Mikhail
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r
        host_notification_options       d,u,r
       service_notification_commands   notify-service-by-email
       host_notification_commands      notify-host-by-email
        email                           mik@localhost
         }
define contactgroup{
        contactgroup_name               admins
        alias                           all admins
        members                         mik,user2,user3..
        }

Если устройств в сети много и у каждого типа устройств свои админы, то создавайте отдельные группы для каждого типа админов, а в шаблонах или в самом описании проверок устройств ссылайтесь на эти группы.

Файл timeperiods.cfg

В этом файле я ничего не менял, т.к. везде использовал временной интервал 24×7, а можно достаточно гибко настроить свое время работы для каждого типа оповещений. Даже числа праздников учесть 🙂

Файл commands.cfg

Файл описаний команд хостов и сервисов. Сюда следует заносить свои команды для плагинов, рассылки почтовых оповещений, команды отсылки смс и т.д.
Приведу пример проверки работы squid сервера на порту 3128.


# 'check_squid' command definition
define command{
        command_name    check_squid
        command_line    $USER1$/check_tcp -H $HOSTADDRESS$ -p 3128 -w 100 -c 300
        }

Таким образом мы создали новую команду check_squid с предустановленными значениями порта и задержками ответа порта сервера.
Бинарный файл check_tcp является плагином для Nagios и находится в папке /usr/local/nagios3/libexec/.
Подбор переменных для плагина выполняем, запуская бинарные файлы плагинов, и только протестировав их заносим команды в файл commands.cfg.

Файл servicegroup.cfg

Я создал этот файл для разбиения сервисов по группам, чтобы потом в web интерфейсе была подробная информация по группам сервисов. Группы сервисов являются не обязательными для занесения в конфиги Nagios.
Пример файла на 4 группы сервисов показать

Файл localhost.cfg

Вот и дошли до описаний хостов и их сервисов 🙂 Структура этих файлов – сначала описываем группу этого типа хостов, затем сами хосты, а потом сервисы этих хостов.
Файл localhost.cfg предназначен для проверки работы самого хоста, где стоит Nagios3. У меня хост называется M2. Вот его конфиг показать


Обратите внимание на переменные servicegroups – они должны быть определены в файле servicegroup.cfg или отсутствовать совсем.
 

Файлы switch.cfg, unix.cfg, windows.cfg

Это файлы для различных типов устройств и сервисов. Примеры этих файлов, кроме unix.cfg, ставятся вместе с Nagios3 Core. Что-то дополнять тут особого смыла нет, замечание только одно, в примерах windows.cfg есть сервисы проверки места дисков, памяти, доступность сервисов – это работать не будет без установки специального сервиса на windows машинах. Аналогично с конфигом switch.cfg – snmp статусы, графики mrtg – это надо дополнительно настраивать. Как только дойдут руки обязательно напишу про это.
Мои файлы switch.cfg, unix.cfg, windows.cfg
Обратите внимание на переменную parents в описании хостов. Она служит для того, чтобы описать какой хост от кого зависит. Если этой переменной не задавать, то на карте хостов мы увидим, что будто все хосты отходят от нашего сервера c Nagios. А через parents мы будем задавать имя хоста от которого зависит опрашиваемый хост.
Это нам даст следующее:

  • Корректную структуру нашей сети
  • Поможет в определении корректных статусов устройств

Поясню. Если станет недоступен один из узловых коммутаторов сети, то статус DOWN получит только этот коммутатор, все остальные устройства зависящие от этого коммутатора будут иметь статус UNREACHABLE (недоступен). Таким образом Nagios не будет делать бесполезную проверку на доступность таких хостов, пока не станет доступен основной коммутатор.

Файл hostextinfo.cfg

В этом файле я ссылаюсь на логотипы ОС хостов и коммутаторов. Просто для красоты восприятия 🙂 Logo картинок лежат в папке /usr/local/nagios3/share/images/logos/. Как пример задаем logo коммутатору m76


define hostextinfo{
    host_name           m76
    icon_image          3ComSS3s3300p.png
    icon_image_alt      3Com Switch
    vrml_image          3ComSS2h500.png
    statusmap_image     3ComSS3s3300p.png
    }

Я уже не помню где я брал эти логотипы, так что выложу их у себя. Для системы FreeBSD в портах я нашел отдельный порт для Nagios логотипов


Port:   nagios-base-logos-1.0
Path:   /usr/ports/misc/nagios-base-logos
Info:   A collection of basic OS and device logos for Nagios

Думаю, что в некоторых linux дистрибутивах тоже есть отдельные пакеты с logo картинками для Nagios.

Web интерфейс Nagios3


Только после внимательного редактирования всех конфигов можно с первого раза запустить Nagios 🙂 Стартуем сервис для Linux /etc/init.d/nagios start, для FreeBSD /usr/local/etc/rc.d/nagios start.
Обязательно смотрим логи в файле /usr/local/nagios3/var/nagios.log, но обычно если в конфигах есть ошибка, то строка с именем файла вываливается на консоль. Если log файл не создался, проверяем права на запись в папку /usr/local/nagios3/var/ для пользователя Nagios.
После успешного запуска набираем в браузере http://имя_сервера_Nagios/nagios3/.
Для управления командами через web интерфейс (например отключить оповещение для хоста или сервиса) требуется чтобы на файл /usr/local/nagios3/var/nagios.cmd были права на запись пользователю от которого работает http сервер.
Напоследок мои скриншоты

PS: Есть вопросы, замечания? или вы заметили какие-то неточности в статье – прошу в камменты.

Материалы к прочтению:

  • Отправка уведомлений через sms в Nagios 3
  • Мониторинг Windows серверов с помощью Nagios
  • Мониторинг в Nagios с помощью SNMP
  • Доступ к http серверу по паролю
  • Настройка связки apache+php+mysql
  •  

    Запись опубликована в рубрике Monitoring, Nagios, Программы, Сервера с метками , . Добавьте в закладки постоянную ссылку.

    13 комментариев Nagios 3 – установка, настройка и эксплуатация

    1. Макс Прохоркин говорит:

      Приветствую!
      Все замечательно, годная статья!:)
      Вам известно как можно массово коментарии к сервисам из старой версии нагиоса на третью запилить?

    2. Алексей говорит:

      Спасибо , Отличная статья!

    3. Юрий говорит:

      спасибо огромное, статья очень помогла, тут нет выпедрежа, как у тру админов при этом по ней легко все настраивается, наворачивается и понимается..

    4. Павел говорит:

      Добрый день!

      Достался сервер администрирования Nagios в наследство. Он настроен и вроде всё ок, но вот пароль от веб-морды я не знаю, да и спросить не у кого. Подскажите пожалуйста, как можно его сменить или узнать?

      Пробовал просто менять пароль для пользователя nagios в системе, но на веб-интерфейс меня всё равно не пускает.

      • mik говорит:

        Тут пароль не от самого nagios, а от httpd сервера. У меня стоит apache. В каталоге sbin для nagios прописан файл доступа .htaccess. Вот в нем можно посмотреть в какой файлик он лазиет для файла паролей. Потом найти этот файл паролей и сгенерить новый пароль уже для своего пользователя или старого.
        Если сгенерите для нового то не забудьте еще поправить файл cgi.cfg для выдачи прав админа.

        • Павел говорит:

          Вчера уже выполнил это. Но всё равно большое вам спасибо за ответ!

    5. Anton говорит:

      Приветствую. Вопрос следующий: нормально будет работать проверка если один пользователь внесен в несколько групп?

    6. Максим говорит:

      А есть варианты скрипта для автоматического добавления новых хостов, появившихся в сети? Не хотелось бы мигрировать на забикс, или самому такого монстра придумывать.
      Допустим у нас имеется 3и вида свичей в неком диапазоне. необходимо чтобы скрипт шерстил этот диапазон по пингу, сравнивал со списком существующих свичей, новые, допустим, проверял на эхо и добавлял свич в список с определённой группой.
      Или-же как-то проще можно придумать?

      • mik говорит:

        Хороший вопрос 🙂 Но я не знаю как сделать это в автоматическом режиме средствами Nagios.
        Но в принципе все решаемо, если написать скрипт который будет опрашивать диапазон некой сети и добавлять новые хосты в конфиги нагиоса и передергивать службу при добавлении. А может такой скрипт уже и есть..

    7. slava говорит:

      подскажите пожалуйста как включить оповещение при пропадание пингов? зарание спасибо.

      • mik говорит:

        само собой контакт надо прописать в файл contacts.cfg, а пинги надо мониторить с помощью команды check_ping. В файле switch.cfg показан пример устройтсв на которых мониторятся только пинги.
        Сначала описываем все хосты, а во второй половине файла описаны применения команды check_ping.

    8. Bubblegum говорит:

      Отличная статья! Большое спасибо!

    Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *