Рассмотри установку и настройку, текущей на момент написания статьи, версии Nagios Core 4.2.3. В качестве платформы будет использоваться Ubuntu Server 16.04.01.
Установка nagios и плагинов
Немного о плагинах
Немного о NRPE
Установка NRPE плагина
Установка NRPE сервера
Добавление linux хоста в систему мониторинга
Мониторинг Windows хостов
Установка NSClient++
Добавление windows хоста в систему мониторинга
Определение сервисной группы
Расположение связей хостов на карте
Включение иконок
Nagios core является бесплатной системой, осуществляющей мониторинг узлов сети, сервисов, отправку оповещений по электронной почте, и многое другое. Всю необходимую информацию nagios получает через плагины.
В репозитории Ubuntu отсутствуют установочные пакеты для четвертой версии, поэтому установка производится из исходных кодов. Последнюю версию nagios можно найти на sourceforge.net. Плагины можно скачать на сайте nagios-plugins.org.
Перед конфигурированием nagios нужно установить необходимые зависимости
# apt install build-essential apache2 php libapache2-mod-php7.0 php-gd libgd-dev mailutils
И добавить пользователя и группу, от имени которых будет работать nagios
# useradd nagios # groupadd nagcmd # usermod -a -G nagcmd nagios # usermod -a -G nagcmd www-data
Перейдем в каталог для сборки и скачаем исходный код nagios и плагинов
# cd /usr/src/ # wget https://sourceforge.net/projects/nagios/files/nagios-4.x/nagios-4.2.3/nagios-4.2.3.tar.gz # wget https://nagios-plugins.org/download/nagios-plugins-2.1.4.tar.gz
Разархивируем скаченные архивы
# tar xzvf nagios-4.2.3.tar.gz # tar xzvf nagios-plugins-2.1.4.tar.gz
Перейдем в директорию с исходным кодом nagios и выполним конфигурирование
# cd nagios-4.2.3 # ./configure --prefix=/etc/nagios --with-command-group=nagcmd --with-httpd-conf=/etc/apache2/sites-available --with-mail=/usr/bin/mail
Выполним сборку
# make all
Установим nagios
# make install
Установим init скрипт в /etc/init.d и активируем авто запуск
# make install-init # update-rc.d nagios defaults
Установим права на директорию для хранения внешних командных файлов
# make install-commandmode
Установим конфигурационные файлы nagios
# make install-config
Установим конфигурацию nagios для apache
# make install-webconf
Скопируем в каталок с nagios скрипты обработки событий внешних командных файлов и выставим владельца на папку
# cp -R contrib/eventhandlers/ /etc/nagios/libexec/ # chown -R nagios:nagios /etc/nagios/libexec/eventhandlers
Выполним проверку установленной конфигурации
# /etc/nagios/bin/nagios -v /etc/nagios/etc/nagios.cfg
Перейдем в директорию с исходным кодом плагинов и выполним конфигурирование
# cd /usr/src/nagios-plugins-2.1.4/ # ./configure --prefix=/etc/nagios --with-nagios-user=nagios --with-nagios-group=nagios
Выполним сборку и установку плагинов
# make # make install
Включим конфигурацию nagios в apache и активируем необходимые дополнения
# a2ensite nagios # a2enmod rewrite cgi
Перезапустим службу apache
# service apache2 restart
Запустим nagios и проверим статус
# service nagios start # service nagios status ● nagios.service - Nagios Loaded: loaded (/etc/systemd/system/nagios.service; enabled; vendor preset: enabled) Active: active (running)
Добавим администратора nagios
# htpasswd -c /etc/nagios/etc/htpasswd.users nagiosadmin
В браузере заходим по ссылке http://your_ip_or_domain_name/nagios и вводим данные администратора nagios. Должна открыться консоль управления nagios. По умолчанию в ней будет добавлен localhost.
Теперь разберемся с конфигурационными файлами nagios.
/etc/nagios/etc/cgi.cfg — определяет настройки веб интерфейса, а так же права доступа к web консоли nagios.
/etc/nagios/etc/htpasswd.users — база пользователей и их паролей для доступа к web интерфейсу nagios.
/etc/nagios/etc/nagios.cfg — содержит в себе основные настройки и пути к *.cfg файлам.
/etc/nagios/etc/resource.cfg — здесь определена переменная, до каталога с плагинами.
/etc/nagios/etc/objects/commands.cfg — содержит определения команд.
/etc/nagios/etc/objects/contacts.cfg — определяет почтовые контакты, на которые будет происходит отправка оповещений nagios.
/etc/nagios/etc/objects/templates.cfg — содержит шаблоны контактов, хостов и сервисов.
/etc/nagios/etc/objects/timeperiods.cfg — содержит определения временных периодов.
/etc/nagios/etc/objects/localhost.cfg — конфигурация для мониторинга самого сервера nagios. В ней определен сам хост, хостовая группа для linux серверов и сервисы мониторинга.
/etc/nagios/etc/objects/printer.cfg — конфигурация для мониторинга принтера. В ней определен произвольный принтер, хостовая группа для принтеров и сервисы мониторинга.
/etc/nagios/etc/objects/switch.cfg — конфигурация для мониторинга свитча. В ней определен произвольный свитч, хостовая группа для свитчей и сервисы мониторинга.
/etc/nagios/etc/objects/windows.cfg — конфигурация для мониторинга произвольного windows хоста. В ней определен произвольный windows хост, хостовая группа для windows серверов и сервисы мониторинга.
Из описания видно, что localhost.cfg, printer.cfg, switch.cfg и windows.cfg содержат в себе определения хост групп. Для удобства имеет смысл выделить их в отдельный файл /etc/nagios/etc/objects/hostgroups.cfg. Соответственно в изначальном файле их нужно закоментировать. Описание одного и того же объекта не должно повторятся в разных конфигурационных файлах. Так же мы добавим файл /etc/nagios/etc/objects/servicegroups.cfg, в котором будут определены сервисные группы. Так как в данной публикации производится настройка мониторинга для linux и windows хостов, мы определим группы для них. Для принтеров и свитчей группы определяются по аналогии. Так же мы создадим папку /etc/nagios/etc/servers/, в которой будут храниться файлы, определяющие хосты для мониторинга. Внесем соответствующие изменения в файл nagios.cfg
# nano /etc/nagios/etc/nagios.cfg . . . # You can specify individual object config files as shown below: cfg_file=/etc/nagios/etc/objects/commands.cfg cfg_file=/etc/nagios/etc/objects/contacts.cfg cfg_file=/etc/nagios/etc/objects/timeperiods.cfg cfg_file=/etc/nagios/etc/objects/templates.cfg # Definitions for hostgroups and servicegroups cfg_file=/etc/nagios/etc/objects/hostgroups.cfg cfg_file=/etc/nagios/etc/objects/servicegroups.cfg # Definitions for monitoring the local (Linux) host cfg_file=/etc/nagios/etc/objects/localhost.cfg # Definitions for monitoring a Windows machine #cfg_file=/etc/nagios/etc/objects/windows.cfg # Definitions for monitoring a router/switch #cfg_file=/etc/nagios/etc/objects/switch.cfg # Definitions for monitoring a network printer #cfg_file=/etc/nagios/etc/objects/printer.cfg # You can also tell Nagios to process all config files (with a .cfg # extension) in a particular directory by using the cfg_dir # directive as shown below: cfg_dir=/etc/nagios/etc/servers #cfg_dir=/etc/nagios/etc/printers #cfg_dir=/etc/nagios/etc/switches #cfg_dir=/etc/nagios/etc/routers . . .
Создадим файлы для хост и сервис групп и выставим на них права
# cd /etc/nagios/etc/objects/ # touch hostgroups.cfg servicegroups.cfg # chown nagios:nagios hostgroups.cfg servicegroups.cfg # chmod 664 hostgroups.cfg servicegroups.cfg
Создадим каталог /etc/nagios/etc/servers/ и выставим на него права
# mkdir /etc/nagios/etc/servers/ # chown nagios:nagios /etc/nagios/etc/servers/ # chmod 775 /etc/nagios/etc/servers/
Добавим в hostgroups.cfg определения хост групп для linux и windows серверов из localhost.cfg и windows.cfg соответственно
# nano /etc/nagios/etc/objects/hostgroups.cfg # Define an optional hostgroup for Linux machines # All hosts that use the linux-server template will automatically be a member of this group define hostgroup{ hostgroup_name linux-servers ; The name of the hostgroup alias Linux Servers ; Long name of the group } # Define a hostgroup for Windows machines # All hosts that use the windows-server template will automatically be a member of this group define hostgroup{ hostgroup_name windows-servers ; The name of the hostgroup alias Windows Servers ; Long name of the group }
Так как в nagios.cfg путь к windows.cfg закоментирован, коментировать определение хост групп в windows.cfg не обязательно, а вот в localhost.cfg это обязательное действие
# nano /etc/nagios/etc/objects/localhost.cfg . . . # Define an optional hostgroup for Linux machines #define hostgroup{ # hostgroup_name linux-servers ; The name of the hostgroup # alias Linux Servers ; Long name of the group # members localhost ; Comma separated list of hosts that belong to this group # } . . .
При создании объекта windows сервер, он автоматически становится членом группы windows-servers. Это действие определено в файле шаблонов templates.cfg. Чтобы linux сервера попадали автоматически в группу linux-servers, нужно сделать следующее изменение
# nano /etc/nagios/etc/objects/templates.cfg . . . # Linux host definition template - This is NOT a real host, just a template! define host{ name linux-server ; The name of this host template use generic-host ; This template inherits other values from the generic-host template check_period 24x7 ; By default, Linux hosts are checked round the clock check_interval 5 ; Actively check the host every 5 minutes retry_interval 1 ; Schedule host check retries at 1 minute intervals max_check_attempts 10 ; Check each Linux host 10 times (max) check_command check-host-alive ; Default command to check Linux hosts notification_period workhours ; Linux admins hate to be woken up, so we only notify during the day ; Note that the notification_period variable is being overridden from ; the value that is inherited from the generic-host template! notification_interval 120 ; Resend notifications every 2 hours notification_options d,u,r ; Only send notifications for specific host states contact_groups admins ; Notifications get sent to the admins by default hostgroups linux-servers ; Host groups that linux servers should be a member of register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE! } . . .
Для настройки оповещения, нужно указать email администратора системы в contacts.cfg
# nano /etc/nagios/etc/objects/contacts.cfg . . . define contact{ contact_name nagiosadmin ; Short name of user use generic-contact ; Inherit default values from generic-contact template (defined above) alias Nagios Admin ; Full name of user email admin@4skill.ru ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ****** } . . .
После проделанных изменений нужно перезапустить службу nagios
# service nagios restart
Проверить работоспособность оповещений, можно следующим способом, в web интерфейсе выбрать слева «Hosts», далее нажимаем на «localhost», в меню справа нажимаем «Send custom host notification», пишем что угодно в строку «Comment» и нажимаем «Commit».
На почту, указанную в contacts.cfg должно прийти оповещение.
В папке /etc/nagios/libexec располагаются установленные плагины. В начале статьи было отмечено, что nagios получает всю информацию через плагины. Для примера посмотрим uptime системы
# /etc/nagios/libexec/check_uptime Uptime OK: 0 day(s) 3 hour(s) 52 minute(s) | uptime=232.000000;;;
Большинство плагинов работаю только с аргументами, к примеру посмотрим статус файла подкачки системы
# /etc/nagios/libexec/check_swap -w 20 -c 10 SWAP OK - 100% free (2044 MB out of 2044 MB) |swap=2044MB;0;0;0;2044
Здесь есть два аргумента -w 20 и -c 10.
w — warning, когда останется 20% свободного места, будет происходить событие warning.
c — critical, когда останется 10% свободного места, будет происходить событие critical.
Так же плагины бывают локальные и «общие». Приведенные выше примеры, относятся к локальным. К примеру плагином check_swap не удастся посмотреть статус файла подкачки на удаленном хосте, а вот плагином check_ping можно проверить доступность и локального и удаленного хоста
# /etc/nagios/libexec/check_ping -H localhost -w 100.0,20% -c 500.0,60% PING OK - Packet loss = 0%, RTA = 0.04 ms|rta=0.036000ms;100.000000;500.000000;0.000000 pl=0%;20;60;0 # /etc/nagios/libexec/check_ping -H 192.168.1.16 -w 100.0,20% -c 500.0,60% PING OK - Packet loss = 0%, RTA = 0.27 ms|rta=0.273000ms;100.000000;500.000000;0.000000 pl=0%;20;60;0
NRPE — Nagios Remote Plugin Executor. Для того, чтобы nagios мог получать информацию от удаленных хостов, такую как загрузка диска, или процессора, используется nrpe плагин. Nagios обращается через nrpe плагин, к nrpe серверу, установленному на удаленном linux/Unix хосте. Nrpe сервер запускает локальные плагины, и передает nagios серверу полученную информацию. Важно! nrpe сервер и плагин должны быть одной версии, иначе могут возникать ошибки.
Перед установкой nrpe плагина, нужно установить зависимость
# apt install libssl-dev
Скачать последнюю версию nrpe можно с сайта nagios. Перейдем в каталог для сборки, скачаем и разархивируем последнюю версию nrpe
# cd /usr/src/ # wget https://github.com/NagiosEnterprises/nrpe/archive/3.0.1.tar.gz # tar xzvf 3.0.1.tar.gz
Перейдем в папку с nrpe и выполним конфигурирование
# cd nrpe-3.0.1 # ./configure --prefix=/etc/nagios
Выполним сборку и установку nrpe плагина
# make check_nrpe # make install-plugin
Добавим в /etc/nagios/etc/objects/commands.cfg поддержку nrpe
# nano /etc/nagios/etc/objects/commands.cfg . . . # 'check_nrpe' command definition define command{ command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ } . . .
После проделанных изменений нужно перезапустить службу nagios
# service nagios restart
На linux хосте, который мы будем мониторить, нужно установить nrpe сервер, и плагины.
Установим необходимые зависимости
# apt install build-essential libssl-dev
Перейдем в каталог для сборки, скачаем nrpe, плагины и разархивируем их
# cd /usr/src/ # wget https://github.com/NagiosEnterprises/nrpe/archive/3.0.1.tar.gz # wget https://nagios-plugins.org/download/nagios-plugins-2.1.4.tar.gz # tar xzvf 3.0.1.tar.gz # tar xzvf nagios-plugins-2.1.4.tar.gz
Перейдем в каталог с nrpe и выполним конфигурирование
# cd nrpe-3.0.1 # ./configure --prefix=/etc/nagios
Выполним сборку
# make nrpe
Добавим пользователя и группу, от имени которых будет работать nrpe сервер
# make install-groups-users
Выполним установку сервера и конфигурационного файла
# make install-daemon # make install-config
Установим стартовый скрипт
# make install-init # systemctl enable /lib/systemd/system/nrpe.service
Перейдем в директорию с исходным кодом плагинов и выполним конфигурирование
# cd /usr/src/nagios-plugins-2.1.4/ # ./configure --prefix=/etc/nagios --with-nagios-user=nagios --with-nagios-group=nagios
Выполним сборку и установку плагинов
# make # make install
В /etc/nagios/etc/nrpe.cfg разрешим nagios серверу получать информацию о системе, а так же укажем истинное название раздела диска для мониторинга, в предопределенной команде
nano /etc/nagios/etc/nrpe.cfg . . . allowed_hosts=127.0.0.1, 192.168.1.13 . . . command[check_users]=/etc/nagios/libexec/check_users -w 5 -c 10 command[check_load]=/etc/nagios/libexec/check_load -w 15,10,5 -c 30,25,20 command[check_sda1]=/etc/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1 command[check_zombie_procs]=/etc/nagios/libexec/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/etc/nagios/libexec/check_procs -w 150 -c 200 . . .
192.168.1.13 нужно заменить на адрес своего nagios сервера.
Запустим nrpe сервер и проверим его статус
# service nrpe start # service nrpe status ● nrpe.service - Nagios Remote Program Executor Loaded: loaded (/lib/systemd/system/nrpe.service; enabled; vendor preset: enabled) Active: active (running)
Добавление linux хоста в систему мониторинга
Для этого мы создадим файл linux-server.cfg в папке servers
# nano /etc/nagios/etc/servers/linux-serv.cfg define host{ use linux-server host_name linux-serv alias linux-serv address 192.168.1.12 } define service{ use generic-service host_name linux-serv service_description CPU Load check_command check_nrpe!check_load } define service{ use generic-service host_name linux-serv service_description Current Users check_command check_nrpe!check_users } define service{ use generic-service host_name linux-serv service_description /dev/sda1 Free Space check_command check_nrpe!check_sda1 } define service{ use generic-service host_name linux-serv service_description Total Processes check_command check_nrpe!check_total_procs } define service{ use generic-service host_name linux-serv service_description Zombie Processes check_command check_nrpe!check_zombie_procs }
192.168.1.12 нужно заменить на адрес своего linux сервера.
Директива use указывает на имя шаблона в templates.cfg, в котором определены настройки по умолчанию. Для того, чтобы новый хост появился в web интерфейсе нужно перезагрузить службу nagios
# service nagios restart
Для проверки работоспособности nrpe можно выполнить команду
# /etc/nagios/libexec/check_nrpe -H 192.168.1.12 NRPE v3.0.1
Для проверки определенного сервиса, нужно добавить аргумент с названием проверки
# /etc/nagios/libexec/check_nrpe -H 192.168.1.12 -c check_sda1 DISK OK - free space: /var/tmp 14549 MB (85% inode=88%);| /var/tmp=2527MB;14411;16212;0;18014
Название проверки мы определяли в файле nrpe.cfg
command[check_sda1]=/etc/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1
и в файле linux-serv.cfg
define service{ use generic-service host_name linux-serv service_description /dev/sda1 Free Space check_command check_nrpe!check_sda1 }
Для мониторинга windows хостов используется nt плагин. По умолчанию он входит в состав базовых плагинов, и его не нужно отдельно устанавливать. Через nt плагин nagios обращается к NSClient++, установленному на windows хосте. NSClient++ обращается к определенным модулям, которые сообщают ему информацию о системе. Полученную информацию NSClient++ передает nogios серверу.
На windows хосте нужно установить NSClient++. Скачиваем последнюю версию и запускаем от имени администратора.
Нажимаем «Next»
Снова нажимаем «Next»
Выбираем «Typical»
Указываем адрес nagios сервера, пароль и оставляем две первых галочки. Жмем «Next»
Жмем «Install»
Жмем «Finish»
Добавление windows хоста в систему мониторинга
Для этого мы создадим файл windows-serv.cfg в папке servers
# nano /etc/nagios/etc/servers/windows-serv.cfg define host{ use windows-server host_name windows-serv alias My Windows Server address 192.168.1.33 } define service{ use generic-service host_name windows-serv service_description NSClient++ Version check_command check_nt!CLIENTVERSION } define service{ use generic-service host_name windows-serv service_description Uptime check_command check_nt!UPTIME } define service{ use generic-service host_name windows-serv service_description CPU Load check_command check_nt!CPULOAD!-l 5,80,90 } define service{ use generic-service host_name windows-serv service_description Memory Usage check_command check_nt!MEMUSE!-w 80 -c 90 } define service{ use generic-service host_name windows-serv service_description C:\ Drive Space check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90 } define service{ use generic-service host_name windows-serv service_description VMTools check_command check_nt!SERVICESTATE!-d SHOWALL -l VMTools } define service{ use generic-service host_name windows-serv service_description Explorer check_command check_nt!PROCSTATE!-d SHOWALL -l explorer.exe }
192.168.1.33 нужно заменить на адрес своего windows сервера.
Если при установке NSClient++ клиента указывался пароль, нужно добавить его в commands.cfg
# nano /etc/nagios/etc/objects/commands.cfg . . . # 'check_nt' command definition define command{ command_name check_nt command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s MegaPass -v $ARG1$ $ARG2$ } . . .
И перезапустить службу nagios
# service nagios restart
Сервисная группа объединяет хосты, по определенным сервисным проверкам. Создадим сервисную группу CPU Load, и объединим хосты по проверке загрузки процессора.
# nano /etc/nagios/etc/objects/servicegroups.cfg define servicegroup{ servicegroup_name cpuload alias CPU Load members linux-serv,CPU Load, localhost,Current Load, windows-serv,CPU Load }
Члены группы определяются в директиве members по принципу
members=<host1>,<service1>,<host2>,<service2>,…,<hostn>,<servicen>
Чтобы группа стала доступна, нужно перезапустить службу nagios
# service nagios restart
Расположение связей хостов на карте
По умолчанию все хосты на карте соединены с Nagios Process. Бывают случаи, когда нужно переопределить такое поведение. К примеру связь должна идти не от Nagios Process, а от другой точки на карте (как пример соединение сервера через свитч). Делается это добавлением в секцию описания хоста директивы parents. Для наглядного примера изменим связь windows-serv от Nagios Process к linux-serv
# nano /etc/nagios/etc/servers/windows-serv.cfg define host{ use windows-server host_name windows-serv alias My Windows Server address 192.168.1.33 parents linux-serv } . . .
И перезапустить службу nagios
# service nagios restart
В первом случае все хосты имели связь с Nagios Process, во втором случае связь windows-serv начинается от linux-serv.
В nagios есть возможность включения иконок рядом с названием хоста. Иконки находятся в папке /etc/nagios/share/images/logos. Можно воспользоваться готовым набором, можно загрузить из интернета. Для включения отображения иконок, нужно добавить следующие строки в templates.cfg
# nano /etc/nagios/etc/objects/templates.cfg . . . # Linux host definition template - This is NOT a real host, just a template! define host{ name linux-server ; The name of this host template use generic-host ; This template inherits other values from the generic-host template check_period 24x7 ; By default, Linux hosts are checked round the clock check_interval 1 ; Actively check the host every 5 minutes retry_interval 1 ; Schedule host check retries at 1 minute intervals max_check_attempts 10 ; Check each Linux host 10 times (max) check_command check-host-alive ; Default command to check Linux hosts notification_period workhours ; Linux admins hate to be woken up, so we only notify during the day ; Note that the notification_period variable is being overridden from ; the value that is inherited from the generic-host template! notification_interval 120 ; Resend notifications every 2 hours notification_options d,u,r ; Only send notifications for specific host states contact_groups admins ; Notifications get sent to the admins by default hostgroups linux-servers ; Host groups that linux servers should be a member of icon_image linux40.png statusmap_image linux40.gd2 register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE! } # Windows host definition template - This is NOT a real host, just a template! define host{ name windows-server ; The name of this host template use generic-host ; Inherit default values from the generic-host template check_period 24x7 ; By default, Windows servers are monitored round the clock check_interval 5 ; Actively check the server every 5 minutes retry_interval 1 ; Schedule host check retries at 1 minute intervals max_check_attempts 10 ; Check each server 10 times (max) check_command check-host-alive ; Default command to check if servers are "alive" notification_period 24x7 ; Send notification out at any time - day or night notification_interval 30 ; Resend notifications every 30 minutes notification_options d,r ; Only send notifications for specific host states contact_groups admins ; Notifications get sent to the admins by default hostgroups windows-servers ; Host groups that Windows servers should be a member of icon_image win40.png statusmap_image win40.gd2 register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE } . . .
Перезапускаем службу nagios
# service nagios restart