Налаштування моніторингу серверів за допомогою Nagios

Nagios Core — один з найстаріших і найпоширеніших інструментів моніторингу інфраструктури з відкритим кодом. У цій статті розглянемо, як встановити Nagios Core та клієнт NRPE на VPS на Debian, Ubuntu та AlmaLinux, а також базові модулі системи.

Що таке Nagios Core

Nagios Core — це система моніторингу серверів, мереж та сервісів, яка існує з 2002 року і досі активно розвивається. На відміну від Zabbix чи Prometheus, Nagios історично збирається з вихідного коду, а не встановлюється готовим пакетом — це дає повний контроль над збіркою, але й вимагає трохи більше кроків при встановленні.

Базові модулі Nagios

  • Nagios Core — головний движок, який планує перевірки, оцінює статуси й надсилає сповіщення.
  • Nagios Plugins — окремий набір виконуваних скриптів (check_http, check_disk, check_load тощо), які реально виконують перевірки.
  • NRPE (Nagios Remote Plugin Executor) — агент для віддалених Linux-серверів, який дозволяє Nagios Core виконувати плагіни на клієнтській машині, а не лише перевіряти її ззовні.
  • Web-інтерфейс (CGI) — класична панель на Apache + PHP для перегляду статусів хостів і сервісів.
  • NCPA (Nagios Cross-Platform Agent) — сучасніша альтернатива NRPE, працює і на Linux, і на Windows, через HTTP API замість окремого протоколу.
  • Host/Service Groups — угруповання хостів і перевірок для зручного перегляду й масових дій.
  • Notifications та Escalations — правила сповіщень і ескалації, якщо проблему довго не підтверджують.

Що має бути готово заздалегідь

  • VPS для Nagios сервера з Debian 12, Ubuntu 22.04/24.04 або AlmaLinux 8/9
  • Доступ sudo або root
  • Мінімум 1 ГБ RAM для невеликої кількості хостів

Встановлення Nagios Core на Debian та Ubuntu

Крок 1. Встановлення залежностей збірки

sudo apt update
sudo apt install -y build-essential gcc make unzip libgd-dev libssl-dev apache2 php libapache2-mod-php php-gd openssl wget curl autoconf gettext

Крок 2. Створення користувача та групи команд

sudo useradd -m -s /bin/bash nagios
sudo groupadd nagcmd
sudo usermod -aG nagcmd nagios
sudo usermod -aG nagcmd www-data

Крок 3. Завантаження та збірка Nagios Core

Перевірте актуальну версію на сторінці релізів Nagios Core — приклад нижче використовує 4.5.12.
cd /tmp
wget https://github.com/NagiosEnterprises/nagioscore/archive/refs/tags/nagios-4.5.12.tar.gz
tar xzf nagios-4.5.12.tar.gz
cd nagioscore-nagios-4.5.12

./configure --with-httpd-conf=/etc/apache2/sites-enabled --with-command-group=nagcmd
make all
sudo make install
sudo make install-init
sudo make install-config
sudo make install-commandmode
sudo make install-webconf

Крок 4. Встановлення Nagios Plugins

cd /tmp
wget https://github.com/nagios-plugins/nagios-plugins/archive/refs/tags/release-2.4.12.tar.gz
tar xzf release-2.4.12.tar.gz
cd nagios-plugins-release-2.4.12
./tools/setup
./configure
make
sudo make install

Крок 5. Обліковий запис для веб-інтерфейсу

sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
sudo a2enmod rewrite cgi
sudo systemctl restart apache2

Крок 6. Запуск служби

sudo systemctl enable --now nagios
sudo systemctl status nagios

Встановлення Nagios Core на AlmaLinux

На RPM-дистрибутивах простіше скористатись готовим пакетом з EPEL, ніж збирати з нуля.

Крок 1. Підключення EPEL, CRB та встановлення

Важливо: пакет nagios-plugins-all тягне за собою залежність nagios-plugins-disk_smb, яка вимагає Perl-модулі perl-Import-Into та perl-PerlIO-utf8_strict. Ці модулі лежать у репозиторії CRB (CodeReady Builder), який на AlmaLinux 9 вимкнений за замовчуванням. Без нього встановлення завершиться помилкою “nothing provides perl(Import::Into)”. Увімкніть CRB перед EPEL, як показано нижче.
sudo dnf config-manager --set-enabled crb
sudo dnf install -y epel-release
sudo dnf install -y nagios nagios-common nagios-plugins nagios-plugins-all nrpe httpd php php-fpm nano
sudo systemctl enable --now php-fpm
Важливо: без окремо встановленого й запущеного php-fpm веб-інтерфейс Nagios не відкриється — Apache намагатиметься підключитись до Unix-сокета /run/php-fpm/www.sock, якого просто не існуватиме, і в логах Apache з’явиться помилка AH02454: FCGI: attempt to connect to Unix domain socket ... failed. Пакет php сам по собі не включає й не запускає php-fpm — це окрема служба.

Крок 2. Обліковий запис для веб-інтерфейсу

sudo htpasswd -c /etc/nagios/passwd nagiosadmin

Крок 3. Запуск служб

sudo systemctl enable --now nagios
sudo systemctl enable --now httpd
Якщо на сервері увімкнено SELinux, а веб-інтерфейс показує помилки доступу — перевірте контексти httpd_can_network_connect: sudo setsebool -P httpd_can_network_connect 1.

Доступ до веб-інтерфейсу

http://IP_ВАШОГО_СЕРВЕРА/nagios

Логін — nagiosadmin, пароль — той, що встановили на кроці з htpasswd.

Встановлення клієнта NRPE на моніторингових серверах

NRPE ставиться на кожен сервер, який хочете перевіряти зсередини (навантаження CPU, вільна пам’ять, диски тощо), а не тільки ззовні по мережі.

Debian / Ubuntu:

sudo apt install -y nagios-nrpe-server nagios-plugins

AlmaLinux:

sudo dnf config-manager --set-enabled crb
sudo dnf install -y epel-release
sudo dnf install -y nrpe nagios-plugins-all openssl nano

Налаштуйте, з яких IP дозволені підключення:

sudo nano /etc/nagios/nrpe.cfg

Знайдіть і змініть:

allowed_hosts=127.0.0.1,IP_NAGIOS_СЕРВЕРА

Перезапустіть службу:

sudo systemctl restart nrpe
sudo systemctl enable nrpe
Важливо: порт NRPE (5666) не повинен бути відкритий для всього інтернету. Обмежте доступ фаєрволом лише з IP вашого Nagios-сервера — allowed_hosts у конфігу не є повноцінним фаєрволом, а лише додатковим шаром перевірки на рівні самого NRPE.

Відкрийте порт 5666 на хості

Debian/Ubuntu (UFW):

sudo ufw allow from IP_NAGIOS_СЕРВЕРА to any port 5666

AlmaLinux (firewalld):

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="IP_NAGIOS_СЕРВЕРА" port protocol="tcp" port="5666" accept'
sudo firewall-cmd --reload
Якщо команда firewall-cmd --reload “зависає” й не завершується — не перебивайте одразу. Відкрийте другий термінал і перевірте стан служби: sudo systemctl status firewalld та sudo journalctl -u firewalld -n 50 --no-pager. Якщо служба справді зависла — допоможе повний перезапуск замість reload: sudo systemctl restart firewalld. Майте напоготові доступ через консоль хостинг-провайдера (VNC/KVM) на випадок тимчасової втрати SSH-з’єднання під час перезапуску.

Перевірте з боку сервера, що порт реально доступний:

nc -zv IP_ХОСТА 5666

Підключення клієнта до сервера

Шлях до конфігураційних файлів залежить від способу встановлення самого Nagios: Debian/Ubuntu (збірка з джерел) — файли лежать у /usr/local/nagios/etc/objects/; AlmaLinux (пакет з EPEL) — файли лежать у /etc/nagios/objects/.

Крок 0. Встановіть плагін check_nrpe на самому сервері

Важливо: пакет nagios-plugins-all, встановлений раніше, не включає сам виконуваний файл check_nrpe — саме ним Nagios Server звертається до клієнтів. Без нього перевірки завершуються помилкою execvp(/usr/lib64/nagios/plugins/check_nrpe, ...) failed. errno is 2: No such file or directory.

Ubuntu/Debian:

sudo apt install -y nagios-nrpe-plugin

AlmaLinux:

sudo dnf install -y nagios-plugins-nrpe

Перевірте, що бінарник з’явився:

which check_nrpe || find / -name check_nrpe 2>/dev/null

Крок 1. Оголосіть команду check_nrpe в конфігурації сервера

Важливо: на AlmaLinux (пакет з EPEL) команда check_nrpe зазвичай не оголошена в commands.cfg за замовчуванням, навіть якщо сам бінарник check_nrpe вже встановлено (Крок 0) і він коректно відповідає при ручному запуску через CLI. Без цього оголошення перевірки через check_command check_nrpe!... не працюватимуть, а веб-інтерфейс показуватиме помилки або застарілий статус, попри те що сама команда локально й напряму з сервера відпрацьовує без проблем.

Спершу перевірте, чи команда вже є:
Ubuntu/Debian:

grep -r "check_nrpe" /usr/local/nagios/etc/objects/commands.cfg

AlmaLinux:

grep -r "check_nrpe" /etc/nagios/objects/commands.cfg

Якщо команди немає (порожній вивід) — додайте в кінець відповідного файлу commands.cfg:

define command {
    command_name check_nrpe
    command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
На AlmaLinux пакет з EPEL встановлює майже порожній commands.cfg — на відміну від Debian/Ubuntu (збірка з джерел), де стандартні команди на кшталт check_disk, check_load тощо йдуть “з коробки” через make install-config. Якщо плануєте моніторити не лише віддалені хости через NRPE, а й локально сам Nagios-сервер, знадобиться оголосити й базові команди вручну, наприклад:
define command {
    command_name    check_disk
    command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
}

Після додавання обов’язково перезапустіть Nagios (див. Крок 4 нижче) — сама по собі зміна файлу конфігурації не застосовується “на льоту”.

Крок 2. Опишіть клієнта окремим файлом

Створіть новий файл — назва довільна, головне розширення .cfg.

Ubuntu/Debian:

sudo nano /usr/local/nagios/etc/objects/client1.cfg

AlmaLinux:

sudo nano /etc/nagios/objects/client1.cfg

Впишіть конкретний хост і сервіси, наприклад для сервера з IP 192.168.1.50 (вміст файлу однаковий для обох дистрибутивів):

define host {
    use                  linux-server
    host_name            web-01
    alias                Веб-сервер 01
    address              192.168.1.50
}

define service {
    use                  generic-service
    host_name            web-01
    service_description  CPU Load
    check_command        check_nrpe!check_load
}

define service {
    use                  generic-service
    host_name            web-01
    service_description  Вільне місце на диску
    check_command        check_nrpe!check_disk
}

Тут use linux-server і use generic-service — це готові шаблони, які вже йдуть у стандартній конфігурації Nagios (templates.cfg), з них успадковуються базові налаштування на кшталт інтервалу перевірок.

Крок 3. Підключіть новий файл до основної конфігурації

Цей крок обов’язковий для **обох** дистрибутивів — навіть якщо в nagios.cfg вже є директива cfg_dir, варто явно перевірити й за потреби додати рядок, інакше новий файл хоста просто не підхопиться.

Ubuntu/Debian:

sudo nano /usr/local/nagios/etc/nagios.cfg

Додайте рядок:

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

AlmaLinux:

sudo nano /etc/nagios/nagios.cfg

Перевірте, чи є рядок:

cfg_dir=/etc/nagios/objects

Якщо його немає або він закоментований (# на початку) — додайте чи розкоментуйте, або пропишіть окремий файл явно:

cfg_file=/etc/nagios/objects/client1.cfg

Крок 4. Перевірте конфігурацію й перезапустіть

Ubuntu/Debian:

sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
sudo systemctl restart nagios

AlmaLinux:

sudo /usr/sbin/nagios -v /etc/nagios/nagios.cfg
sudo systemctl restart nagios

Прапорець -v перевіряє синтаксис і посилання між файлами, не запускаючи саму службу — якщо є помилка (наприклад, друкарська помилка в назві команди чи хоста), вона покаже точний рядок і файл, де проблема, ще до перезапуску.

Основні плагіни та де вони лежать

Шлях до плагінів залежить від способу встановлення — це важливо знати, бо саме цей шлях підставляється в command_line при оголошенні нових команд (замість $USER1$, яка вказує саме на цю директорію).

  • Debian/Ubuntu (збірка з джерел): /usr/local/nagios/libexec/
  • AlmaLinux (пакет з EPEL): /usr/lib64/nagios/plugins/

Найпоширеніші плагіни, які реально використовуються майже в кожній конфігурації:

  • check_disk — вільне місце на дисках і розділах.
  • check_load — середнє навантаження CPU (load average).
  • check_users — кількість активних користувацьких сесій.
  • check_procs — кількість запущених процесів (зокрема корисно для виявлення “зависаючих” чи runaway-процесів).
  • check_swap — вільне місце в swap.
  • check_ping — доступність хоста та затримка по ICMP.
  • check_tcp — перевірка, чи відкритий конкретний TCP-порт.
  • check_http — доступність веб-сервера, код відповіді, вміст сторінки.
  • check_ssh — доступність SSH-служби.
  • check_nrpe — виклик перевірок на віддаленому хості через NRPE-демон (детально розглянуто вище).

Побачити повний список встановлених плагінів можна командою:

ls /usr/local/nagios/libexec/

або на AlmaLinux:

ls /usr/lib64/nagios/plugins/

Кожен плагін підтримує прапорець --help, який показує всі доступні параметри — це швидше й надійніше, ніж шукати документацію в інтернеті для конкретної версії:

/usr/lib64/nagios/plugins/check_disk --help

Nagstamon — десктопний клієнт замість постійно відкритої вкладки браузера

Якщо не хочете тримати вкладку з веб-інтерфейсом Nagios відкритою весь час, є зручна альтернатива — Nagstamon, безкоштовний десктопний застосунок з відкритим кодом для Windows, Linux і macOS.

Nagstamon підключається до вашого Nagios-сервера (а також Icinga, Centreon, Opsview, Check_MK та інших сумісних систем) і показує статус хостів і сервісів прямо в системному треї — іконка сама змінює колір при появі проблеми, без потреби постійно оновлювати сторінку в браузері. При наведенні курсора розгортається детальний список проблемних хостів і сервісів, а через контекстне меню можна одразу підключитись до проблемного сервера по SSH, RDP чи VNC.

Для підключення потрібно лише вказати адресу вашого веб-інтерфейсу Nagios (http://IP_ВАШОГО_СЕРВЕРА/nagios) та обліковий запис, створений на кроці з htpasswd — жодних додаткових налаштувань на боці сервера не потрібно.

Якщо плануєте моніторити велику кількість хостів чи тримати довгу історію перевірок — варто одразу підібрати VPS з достатнім запасом ресурсів під сам сервер Nagios, оскільки кожна активна перевірка споживає CPU й пам’ять, а частота опитування напряму впливає на навантаження при великій кількості хостів.

Прокрутка до верху