Пример мониторинга серверной комнаты на основе Nagios и устройств NetPing

Nagios — одна из систем мониторинга сервисов и сетевых ресурсов, представленных на рынке программного обеспечения. Одним из главных плюсов данной системы является её гибкость. В данной статье будет рассмотрена базовая настройка Nagios для работы с устройствами мониторинга серверных комнат NetPing на примере UniPing server solution v3 и комплекта датчиков.

Для реализации рассмотренного решения нам понадобятся:

Настройка устройства мониторинга UniPing server solution v3 для работы с выбранным комплектом датчиков

Для того, чтобы начать работу с устройством, необходимо выполнить его базовую настройку. Для этого переходим в раздел настроек устройства (1), настраиваем необходимые сетевые параметры (2) и параметры доступа (3). 

Настройка UniPing server solution v3

Чтобы подключить датчик 1-Wire, нам нужно узнать его уникальный номер. Сам процесс подключения хорошо описан в этой статье. За информацией по подключению и настройке датчиков можно обратиться к официальной документации. 

Термодатчики 1-Wire.

Подключение датчика температуры 1-Wire к UniPing server solution v3

Датчики влажности 1-wire.

Подключение датчика влажности 1-Wire к UniPing server solution v3

Датчики наличия 220Впротечкиоткрытия двери и воздушного потока подключаются к IO линиям. Эти датчики являются датчиками типа «сухого контакта». В документации хорошо описана их настройка.

Подключение датчика типа сухого контакта к UniPing server solution v3

Установка Nagios

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

Установка должна проходить с отключенным SELinux либо в разрешающем режиме. По умолчанию он выключен в Ubuntu 18.04, но если вы не уверены — необходимо выполнить команду: 

sudo dpkg -l selinux*

Устанавливаем необходимые пакеты:

sudo apt-get update

sudo apt-get install -y autoconf gcc libc6 make wget unzip apache2 php libapache2-mod-php7.2 libgd-dev

Скачиваем исходные файлы Nagios и распаковываем архив:

cd /tmp
wget -O nagioscore.tar.gz https://github.com/NagiosEnterprises/nagioscore/archive/nagios-4.4.1.tar.gz
tar xzf nagioscore.tar.gz

Компилируем:

cd /tmp/nagioscore-nagios-4.4.1/
sudo ./configure —with-httpd-conf=/etc/apache2/sites-enabled
sudo make all

Создаем пользователя и группу nagios, добавляем пользователя www-data в группу nagios:

sudo make install-groups-users
sudo usermod -a -G nagios www-data

Устанавливаем:

sudo make install

Устанавливаем как службу и добавляем в автозагрузку:

sudo make install-daemoninit

Устанавливаем конфигурацию по умолчанию:

sudo make install-commandmode
sudo make install-config

Устанавливаем файлы конфигурации Apache и настраиваем его:

sudo make install-webconf
sudo a2enmod rewrite
sudo a2enmod cgi

Добавляем разрешения в Firewall:

sudo ufw allow Apache
sudo ufw reload

Создаём учетную запись администратора для входа в Web-интерфейс Nagios:

sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Перезапускаем Apache:

sudo systemctl restart apache2.service

Запускаем Nagios:

sudo systemctl start nagios.service

Система установлена, web-интерфейс доступен по адресу http://192.168.0.150/nagios/, окно ввода логина и пароля — стандартное диалоговое окно браузера:

Nagios форма авторизации

Далее нас приветствует web-интерфейс:

Nagios главная страница

По умолчанию в конфигурацию Nagios входит мониторинг некоторых сервисов локального сервера, мы можем их увидеть в разделе Services:

Nagios список сервисов

Мы видим множество ошибок. Это связано с тем, что по умолчанию при установке Nagios вместе с ним не идут стандартные плагины для мониторинга (например, ping, snmp, http, и т.д; если в вашем случае ошибок нет — значит в используемой вами версии плагины встроены). Установим их:

Необходимые для компиляции и работы стандартных плагинов пакеты:

sudo apt-get install -y autoconf gcc libc6 libmcrypt-dev make libssl-dev wget bc gawk dc build-essential snmp libnet-snmp-perl gettext

Скачиваем исходные файлы и распаковываем архив:

cd /tmp
wget —no-check-certificate -O nagios-plugins.tar.gz https://github.com/nagios-plugins/nagios-plugins/archive/release-2.2.1.tar.gz
tar zxf nagios-plugins.tar.gz

Компилируем и устанавливаем:

cd /tmp/nagios-plugins-release-2.2.1/
sudo ./tools/setup
sudo ./configure
sudo make
sudo make install

Перезапускаем Nagios:

sudo systemctl start nagios.service

В «Services» до сих пор присутствуют ошибки, это связано с периодичностью опроса. Чтобы не ждать, можно вручную запланировать опрос интересующего сервиса, например, на ближайшие пару секунд. Для этого выбираем один из сервисов:

Nagios проблемы с сервисами

Видим подробную информацию о нём и различные команды. Нас интересует «Re-schelude the next check of this service»:

Nagios принудительный опрос сервиса

Далее нажимаем «Commit», оставляя поля без изменений:

Nagios принудительный опрос сервиса

Возвращаемся в Services и по необходимости проделываем то же самое для каждого сервиса (либо просто ждём какое-то время). Когда проверка всех сервисов будет завершена, перед нами появится следующая картина:

Nagios результаты опроса сервисов

В рамках данной статьи мы подготовили для вас плагины для мониторинга показаний датчиков температуры, влажности и IO линий. Вы можете скачать их архивом и распаковать в /usr/local/nagios/libexec. Плагины написаны на bash и используют для работы пакет netsnmp. Такое решение было выбрано как альтернатива родному плагину snmp_check, ввиду неудобства его использования при работе с несколькими OID.

Затем необходимо сконфигурировать команды для этих плагинов. Для этого в файле /usr/local/nagios/nagios.cfg добавляем строку:

cfg_file=/usr/local/nagios/etc/objects/np.cfg

Затем создаем файл /usr/local/nagios/etc/objects/np.cfg со следующим содержимым:

define command {
    command_name np_temp
    command_line $USER1$/np_temp $HOSTADDRESS$ $_HOSTPORT$ $_HOSTCOMMUNITY$ $ARG1$
    # ./get_temp1w ip port community N 
}

define command {
    command_name np_relhum
    command_line $USER1$/np_relhum $HOSTADDRESS$ $_HOSTPORT$ $_HOSTCOMMUNITY$ $ARG1$
    # ./np_relhum ip port community N
}

define command {
    command_name np_io
    command_line $USER1$/np_io $HOSTADDRESS$ $_HOSTPORT$ $_HOSTCOMMUNITY$ $ARG1$ $ARG2$ $ARG3$
    # ./np_io ip port community N normVal alertVal
}

define command {
    command_name np_uptime
    command_line $USER1$/np_uptime $HOSTADDRESS$ $_HOSTPORT$ $_HOSTCOMMUNITY$
    # ./np_uptime ip port community
}

define command {
    command_name np_description
    command_line $USER1$/np_description $HOSTADDRESS$ $_HOSTPORT$ $_HOSTCOMMUNITY$
    # ./np_description ip port community
}

В этом файле описано, какой скрипт и с какими параметрами выполнять при запуске того или иного плагина/команды проверки. В плагин можно передать как локальные переменные хоста или сервиса ($HOSTADDRESS$, $_HOSTPORT$, $_HOSTCOMMUNITY$), так и задать их вручную при вызове плагина ($ARG1$, $ARG2$, $ARG3$). Также вы можете подобрать для себя необходимые плагины на официальном ресурсе Nagios либо изучить документацию по их самостоятельному написанию.

На этом основная настройка Nagios завершена, она минимально достаточна для мониторинга. Для большей полноты системы не хватает графиков и карты с расположением хостов. «Из коробки» Nagios этого не умеет, но существует множество плагинов, которые наращивают функционал системы. Для построения графиков воспользуемся PNP4Nagios, для карты — NagMap (Reborn).

Установка и настройка плагина PNP4Nagios

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

Устанавливаем пакет для работы с RRD базами данных:

sudo apt-get install rrdtool

Скачиваем и распаковываем архив:

wget http://docs.pnp4nagios.org/_media/dwnld/pnp4nagios-head.tar.gz
tar -xvzf pnp4nagios-HEAD.tar.gz
cd pnp4nagios

В случае установки PNP4Nagios для Nagios (данный плагин также может работать с системой мониторинга Icinga) нет необходимости в его специфической настройке, поэтому:

./configure

После мы увидим на экране результаты теста системы на наличие некоторых компонентов, необходимых для работы PNP4Nagios и пути к файлам плагина:

PNP4Nagios проверка наличия необходимых компонентов

Если напротив какой-либо опции стоит ошибка либо «Not Found», необходимо отвлечься от установки плагина и заняться устранением ошибок. В основном они могут быть связаны с отсутствием того или иного пакета. Если всё хорошо, то продолжаем:

make all
make install
make fullinstall

На этом установка PNP4Nagios завершена. Теперь необходимо настроить его для корректной работы с нашей инсталляцией Nagios. Настройка и варианты работы описаны в официальной документации. Рассмотрим основные моменты:

В данной статье мы выбираем режим «Bulk Mode», он показал себя как наиболее стабильный в работе. Для того, чтобы настроить PNP4Nagios в данном режиме, необходимо в /usr/local/nagios/etc/nagios.cfg привести строку в соответствующий вид:

process_performance_data=1

И в соответствующие секции добавить строки:

#
# service performance data
#
service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata

service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC:

:$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE:

:$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$

service_perfdata_file_mode=a

service_perfdata_file_processing_interval=15

service_perfdata_file_processing_command=process-service-perfdata-file

#
# host performance data starting with Nagios 3.0
#
host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata

host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA:

:$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$

host_perfdata_file_mode=ahost_perfdata_file_processing_interval=15

host_perfdata_file_processing_command=process-host-perfdata-fil

Затем в конец файла /usr/local/nagios/etc/objects/commands.cfg добавляем:

define command{
command_name process-service-perfdata-file
command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl —bulk=/usr/local/pnp4nagios/var/service-perfdata
}

define command{
command_name process-host-perfdata-file
command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl —bulk=/usr/local/pnp4nagios/var/host-perfdata
}

Перезапускаем Nagios:

sudo systemctl start nagios.service

Проверяем наличие и правильность установки всех необходимых пакетов, а также правильность путей до конфигурационнфых файлов. Для этого переходим на http://192.168.0.150/pnp4nagios/ и видим:

PNP4Nagios тест наличия необходимых пакетов

Если напротив какого-либо параметра стоит красная строчка, необходимо разбираться по факту проблем с пакетом (чаще всего это старая версия пакета, либо он отсутствует). Если же у вас всё, как на скриншоте выше, то переходим к завершающей части конфигурации PNP4Nagios. Как предложено на скриншоте, удаляем файл /usr/local/pnp4nagios/share/install.php:

rm /usr/local/pnp4nagios/share/install.php

Далее необходимо добавить шаблоны хоста и сервиса для сбора данных в RRD базу и построения графиков. Для этого в конец файла /usr/local/nagios/etc/objects/templates.cfg добавляем:

define host {
    name host-pnp
    action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_
    register 0
}

define service {
    name srv-pnp
    action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
    register 0
}

Эти шаблоны могут быть включены для хостов и сервисов командами use srv-pnp или use host-pnp соответственно. Добавим их для нашего localhost для самого хоста и сервиса PING. Для этого в файле /usr/local/nagios/etc/objects/localhost.cfg приводим блоки к виду:

define host{
    use linux-server,host-pnp ; Name of host templates to use
                                             ; This host definition will inherit all variables that are defined
                                             ; in (or inherited by) the linux-server host template definition.
    host_name localhost
    alias localhost
    address 127.0.0.1
}

define service{
    use local-service,srv-pnp ; Name of service template to use
    host_name localhost
    service_description PING
    check_command check_ping!100.0,20%!500.0,60%
}

Перезапускаем Nagios:

sudo systemctl start nagios.service

Переходим в web-интерфейс Nagios к списку сервисов и видим следующее:

PNP4Nagios графики в интерфейсе Nagios

Напротив хоста и сервиса PING появились значки с символическим изображением графика. Кликнем по значку напротив PING:

PNP4Nagios график Ping

И видим графики времени отклика для localhost вплоть до одного года (если графиков нет, а вместо них ошибки — решение можно найти в документации). PNP4Nagios берёт данные для построения графиков из вывода Perfomance Data плагина мониторинга сервиса:

Nagios информация о состоянии сервиса

В случае написания своих плагинов, нужно позаботиться о том, чтобы плагин возвращал после своего выполнения строку в формате — ‘label’=value[UOM];[warn];[crit];[min];[max], где:

  • label — имя источника данных, переменной (например, в ping_check rta — время отклика);
  • value — значение;
  • UOM — единицы измерения;
  • warn — значение, при котором сервис перейдёт в состояние тревоги (по умолчанию — жёлтый цвет в web-интерфейсе);
  • crit — значение, при котором сервис перейдёт в критическое состояние (по умолчанию — красный цвет в web-интерфейсе);
  • min, max — минимальные и максимальные значения (нижняя и верхняя безопасные границы значений);

Подробней можно прочесть в официальной документации Nagios и PNP4Nagios. PNP4Nagios из коробки содержит шаблоны для построения графиков стандартных плагинов Nagios, они располагаются в /usr/local/pnp4nagios/share/templates.dist. Синтаксис шаблонов стандартный для утилит построения графиков из RRD баз. Плагины, для которых нет шаблона (имя шаблона должно совпадать с именем плагина), используют шаблон по умолчанию default.php — он без разбора берёт все данные из RRD базы и выводит их на график без пояснений, например:

PNP4Nagios шаблон графиков по умолчанию

Для удобства, в контексте данной статьи мы подготовили шаблоны для графиков показаний датчиков температуры и влажности. Вы можете скачать их архивом и поместить содержимое в /usr/local/pnp4nagios/share/templates.dist/. На этом настройка PNP4Nagios закончена.

Установка плагина NagMap

Для отображения наших хостов на карте, воспользуемся плагином NagMap Reborn. Он прост в установке и настройке и в полной мере обладает базовыми функционалом. Требует для работы Google Maps API Key.

Первым делом скачиваем файлы карты:

mkdir /var/www/nagmap
wget wget https://github.com/jocafamaka/nagmapReborn/archive/master.zip
unzip master.zip
cd nagmapReborn-master
cp * /var/www/nagmap

Далее копируем конфигурационный файл из шаблона:

cd /var/www/nagmap
cp config.php.exapmle config.php

И указываем в нём полученный ранее Google Maps API Key:

$nagMapR_key = ‘[Google Maps API Key]’;

Настраиваем Apache: для этого создаем конфигурационный файл /etc/apache2/sites-enabled/nagmap.conf cо следующим содержимым:

<VirtualHost *:80>
    Alias /nagios/map «/var/www/nagmap»
    DocumentRoot /var/www/nagmap
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

И перезапускаем Nagios:

sudo systemctl restart nagios.service

Для того, чтобы разместить хост на карте, необходимо в его конфигурации указать широту и долготу. Об этом подробно будет рассказано далее. Карта доступна по адресу http://192.168.0.150/nagios/map, выглядит следующим образом:

NagMap Reborn

Надпись «For development purposes only» обусловлена использованием бесплатного API ключа. В нижней части карты отмечаются изменения состояния хостов.

Настройка Nagios для работы с устройством мониторинга серверных комнат UniPing server solution v3

В Nagios есть множество предустановленных плагинов для мониторинга стандартных системных сервисов — это нам не подходит. Для того, чтобы снять показания одного датчика температуры, подключённого к устройству мониторинга серверных комнат UniPing server solution v3, необходимо будет получить по SNMP значения пяти OID — текущего состояния датчика, текущей температуры датчика, нижней и верхней границы безопасной температуры и памятки датчика. Поэтому для удобства мы подготовили комплект скриптов-плагинов для Nagios, которые ориентированы на работу с нашими устройствами мониторинга и в частности с UniPing server solution v3, они были скачаны и добавлены в систему ранее.

Для того, чтобы добавить в Nagios устройство мониторинга серверных комнат UniPing server solution v3, необходимо создать конфигурационный файл, где будет описан сам хост и его сервисы (в нашем случае это подключённые датчики). Для этого в основной конфигурационный файл Nagios /usr/local/nagios/nagios.cfg добавим строку:

cfg_dir=/usr/local/nagios/etc/netping

Далее создадим директорию /usr/local/nagios/etc/netping и поместим в неё файл c понятным человеку именем, например UniPing_server_solution_v3.cfg следующего содержания:

define host {
    host_name msk_UniPing_server_solution_v3
    max_check_attempts 10
    alias UniPing server solution v3
    address 192.168.0.100
    _community ping
    _port 161
    use generic-host,host-pnp
    check_command check-host-alive
    notes latlng: 55.754404,37.618481 # координаты, необходимы для отображения на устройства на карте.
}

########## Check ping ########## Ping проверка хоста

define service {
    use local-service,srv-pnp
    host_name msk_UniPing_server_solution_v3
    service_description PING
    check_command check_ping!100.0,20%!500.0,60%
}

########## Get uptime ########## Получение uptime хоста
define service {
    use generic-service
    host_name msk_UniPing_server_solution_v3
    service_description Uptime
    check_command np_uptime
}

########## Get device info ########## Получение модели устройства и версии установленного ПО
define service {
    use generic-service
    host_name msk_UniPing_server_solution_v3
    service_description Version
    check_command np_description
}

########## Get temp ########## Получение показаний датчика температуры №1, вместе с показаниями данный плагин отобразит в интерфейсе верхнюю и нижнюю границу безопасного предела и памятку датчика. Также установит сервис в состояние тревоги в случае выхода за пределы.
define service {
    use generic-service,srv-pnp
    host_name msk_UniPing_server_solution_v3
    service_description Temp 1
    check_command np_temp!1
}

########## Get hum ########## Получение показаний датчика влажности (и температуры) №1, вместе с показаниями данный плагин отобразит в интерфейсе верхнюю и нижнюю границу безопасных пределов и памятку датчика. Также установит сервис в состояние тревоги при выходе показаий за пределы.
define service {
    use generic-service,srv-pnp
    host_name msk_UniPing_server_solution_v3
    service_description Humidity 1
    check_command np_relhum!1
}

########## Get IO lines status ########## Получение состояния датчиков «сухого контакта». Первый аргумент в плагине — номер IO линии, второй — нормальное значение, третье — тревожное значение. Дополнительно в интерфейсе будет выведена памятка линии.
    define service {
    use generic-service,srv-pnp
    host_name msk_UniPing_server_solution_v3
    service_description IO 1
    check_command np_io!1!1!0
}

########## Get IO lines status ##########
    define service {
    use generic-service,srv-pnp
    host_name msk_UniPing_server_solution_v3
    service_description IO 1
    check_command np_io!2!1!0
}

########## Get IO lines status ##########
    define service {
    use generic-service,srv-pnp
    host_name msk_UniPing_server_solution_v3
    service_description IO 1
    check_command np_io!3!1!0
}

########## Get IO lines status ##########
    define service {
    use generic-service,srv-pnp
    host_name msk_UniPing_server_solution_v3
    service_description IO 1
    check_command np_io!4!1!0
}

Перезапускаем Nagios:

systemctl restart nagios.service

В web-интерфейсе в Services видим, что все сервисы успешно добавлены, мониторинг осуществляется, и идет сбор данных.

Nagios UniPing server solution v3 мониторинг

Как видим, дела в нашей серверной обстоят не лучшим образом — на датчике температуры превышение, а датчик протечки находится в воде. Кроме того, наблюдаются некоторое проблемы в сети — время отклика в 335мс выше нормы. Дополнительно, благодаря плагину PNP4Nagios мы можем посмотреть графики изменения показаний датчиков, их мы можем увидеть, кликнув по иконкам графиков напротив имён сервисов:

Ping до хоста, на графике показаны также значения значения тревоги и критическое (предустановленный шаблон графика):

Nagios график Ping UniPing server solution v3

Уровень IO линии (шаблон графика по умолчанию, значение «1» соответствует логическому уровню «1» на IO линии в режиме «вход», значение «0» — логическому уровню «0»):

Nagios график IO линии AirFlow UniPing server solution v3

Температура с первого датчика (пользовательский, самописный шаблон):

Nagios график датчика температуры UniPing server solution v3

Показания датчика влажности со встроенным датчиком температуры (пользовательский, самописный шаблон):

Nagios график датчика влажности UniPing server solution v3

Вывод

Система мониторинга Nagios с учётом плагинов является полноценной системой мониторинга. Она достаточно гибка, чтобы удовлетворить потребности в мониторинге даже самых необычных сервисов. Система проста в установке и настройке, базовую конфигурацию возможно развернуть буквально за полчаса. Минус системы в том, что из-за необходимости её настройки исключительно правкой конфигурационных файлов, она может оттолкнуть неподготовленных к этому администраторов. В целом, могу смело рекомендовать Nagios к использованию в продакшене.

?
×

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

    Наши операторы свяжутся с вами при первой возможности

    ×

      Обращение в техническую поддержку

      Сформулируйте, пожалуйста, тему и текст вашего обращения. Вам ответят в течении рабочего дня.

      ×
      Ваша заявка отправлена. Мы свяжемся с вами при первой возможности.