Nagios — одна из систем мониторинга сервисов и сетевых ресурсов, представленных на рынке программного обеспечения. Одним из главных плюсов данной системы является её гибкость. В данной статье будет рассмотрена базовая настройка Nagios для работы с устройствами мониторинга серверных комнат NetPing на примере UniPing server solution v3 и комплекта датчиков.
Для реализации рассмотренного решения нам понадобятся:
- Сервер с ОС Ubuntu 18.04, либо схожей (IP-адрес — 192.168.0.150);
- Рабочая инсталляция Nagios Core 4.4.1 (далее просто Nagios) на сервере (установка и настройка будут описаны в статье);
- UniPing server solution v3 — 1 шт. (IP-адрес — 192.168.0.100);
- датчик температуры 1-wire — 1 шт.;
- датчик влажности 1-wire — 1 шт.;
- датчик открытия двери — 1 шт.;
- датчик наличия 220В — 1 шт.;
- датчик протечки — 1 шт.;
- датчик воздушного потока — 1 шт.
Настройка устройства мониторинга UniPing server solution v3 для работы с выбранным комплектом датчиков
Для того, чтобы начать работу с устройством, необходимо выполнить его базовую настройку. Для этого переходим в раздел настроек устройства (1), настраиваем необходимые сетевые параметры (2) и параметры доступа (3).
Чтобы подключить датчик 1-Wire, нам нужно узнать его уникальный номер. Сам процесс подключения хорошо описан в этой статье. За информацией по подключению и настройке датчиков можно обратиться к официальной документации.
- Термодатчики 1-Wire.
- Датчики влажности 1-wire.
- Датчики наличия 220В, протечки, открытия двери и воздушного потока подключаются к IO линиям. Эти датчики являются датчиками типа «сухого контакта». В документации хорошо описана их настройка.
Установка 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/, окно ввода логина и пароля — стандартное диалоговое окно браузера:
Далее нас приветствует web-интерфейс:
По умолчанию в конфигурацию Nagios входит мониторинг некоторых сервисов локального сервера, мы можем их увидеть в разделе Services:
Мы видим множество ошибок. Это связано с тем, что по умолчанию при установке 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» до сих пор присутствуют ошибки, это связано с периодичностью опроса. Чтобы не ждать, можно вручную запланировать опрос интересующего сервиса, например, на ближайшие пару секунд. Для этого выбираем один из сервисов:
Видим подробную информацию о нём и различные команды. Нас интересует «Re-schelude the next check of this service»:
Далее нажимаем «Commit», оставляя поля без изменений:
Возвращаемся в Services и по необходимости проделываем то же самое для каждого сервиса (либо просто ждём какое-то время). Когда проверка всех сервисов будет завершена, перед нами появится следующая картина:
В рамках данной статьи мы подготовили для вас плагины для мониторинга показаний датчиков температуры, влажности и 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 и пути к файлам плагина:
Если напротив какой-либо опции стоит ошибка либо «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-perfdataservice_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-perfdatahost_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. Как предложено на скриншоте, удаляем файл /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 к списку сервисов и видим следующее:
Напротив хоста и сервиса PING появились значки с символическим изображением графика. Кликнем по значку напротив PING:
И видим графики времени отклика для localhost вплоть до одного года (если графиков нет, а вместо них ошибки — решение можно найти в документации). PNP4Nagios берёт данные для построения графиков из вывода Perfomance Data плагина мониторинга сервиса:
В случае написания своих плагинов, нужно позаботиться о том, чтобы плагин возвращал после своего выполнения строку в формате — ‘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 базы и выводит их на график без пояснений, например:
Для удобства, в контексте данной статьи мы подготовили шаблоны для графиков показаний датчиков температуры и влажности. Вы можете скачать их архивом и поместить содержимое в /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, выглядит следующим образом:
Надпись «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 видим, что все сервисы успешно добавлены, мониторинг осуществляется, и идет сбор данных.
Как видим, дела в нашей серверной обстоят не лучшим образом — на датчике температуры превышение, а датчик протечки находится в воде. Кроме того, наблюдаются некоторое проблемы в сети — время отклика в 335мс выше нормы. Дополнительно, благодаря плагину PNP4Nagios мы можем посмотреть графики изменения показаний датчиков, их мы можем увидеть, кликнув по иконкам графиков напротив имён сервисов:
Ping до хоста, на графике показаны также значения значения тревоги и критическое (предустановленный шаблон графика):
Уровень IO линии (шаблон графика по умолчанию, значение «1» соответствует логическому уровню «1» на IO линии в режиме «вход», значение «0» — логическому уровню «0»):
Температура с первого датчика (пользовательский, самописный шаблон):
Показания датчика влажности со встроенным датчиком температуры (пользовательский, самописный шаблон):
Вывод
Система мониторинга Nagios с учётом плагинов является полноценной системой мониторинга. Она достаточно гибка, чтобы удовлетворить потребности в мониторинге даже самых необычных сервисов. Система проста в установке и настройке, базовую конфигурацию возможно развернуть буквально за полчаса. Минус системы в том, что из-за необходимости её настройки исключительно правкой конфигурационных файлов, она может оттолкнуть неподготовленных к этому администраторов. В целом, могу смело рекомендовать Nagios к использованию в продакшене.