LibreNMS на Ubuntu 24.04: пошаговая установка
Если у вас в сети десяток свитчей, пара роутеров и куча серверов, а мониторинг вы до сих пор ведёте «руками» — открывая каждое устройство по SSH — рано или поздно вы что-то проглядите. LibreNMS решает именно эту задачу: подключаете устройство по SNMP, и система сама разбирается, что это, какие у него интерфейсы, сенсоры и метрики, и начинает их собирать. Ниже — рабочая установка на чистом Ubuntu 24.04, без сокращений и без «магии», которую нужно гуглить отдельно.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое LibreNMS и зачем он вам нужен
LibreNMS — это форк проекта Observium, но с открытой разработкой: код на GitHub, пул-реквесты принимаются от сообщества, релизы выходят часто. Ключевая фишка — автообнаружение (auto-discovery) по SNMP: система сканирует сеть или конкретный диапазон, определяет тип устройства по OID, подтягивает подходящий набор датчиков (интерфейсы, температура, загрузка CPU, диски, БД, очереди принтера — список модулей большой) и сразу начинает рисовать графики. Ручных шаблонов, как в Zabbix, почти не требуется — за вас это делает библиотека уже написанных «os-профилей» под конкретные модели железа (Cisco, MikroTik, Ubiquiti, Juniper, серверы на Linux/Windows и так далее).
Это не значит, что LibreNMS — универсальная замена всему. Если вам нужен сложный триггеринг, гибкая эскалация инцидентов и SLA-отчётность корпоративного уровня, присмотритесь к Zabbix — там гибче с алертингом, но и настройки заметно больше. LibreNMS хорош, когда сеть уже есть и её нужно быстро увидеть целиком: какие устройства живы, где растёт трафик на интерфейсе, где скоро кончится место на диске. Сравнение с более лёгкими инструментами разобрано в статье «Netdata или Zabbix» — LibreNMS по духу ближе к Zabbix, только со ставкой на SNMP и сетевое оборудование, а не на агентов на каждом хосте.
Требования к серверу и подготовка Ubuntu 24.04
LibreNMS хранит все собранные метрики в RRD-файлах на диске плюс держит реляционную базу под конфигурацию, устройства и алерты. Для 20-50 устройств с интервалом опроса 5 минут достаточно скромной машины:
| Ресурс | Минимум | Комфортно (50-150 устройств) |
|---|---|---|
| CPU | 2 vCPU | 4 vCPU |
| RAM | 2 ГБ | 4-8 ГБ |
| Диск | 20 ГБ SSD | 60+ ГБ SSD (RRD растут со временем) |
| ОС | Ubuntu 24.04 LTS | Ubuntu 24.04 LTS |
Это ориентир, не измеренный бенчмарк — реальное потребление сильно зависит от числа опрашиваемых портов и включённых модулей (netflow и sFlow, например, едят диск заметно быстрее). Если сеть больше сотни устройств, закладывайте SSD с запасом и присматривайтесь к вынесению RRD на отдельный том.
Начните с обновления системы и создания непривилегированного пользователя, если ещё не сделали — об этом подробно в статье про SSH-ключи вместо пароля:
apt update && apt -y upgrade
apt -y install software-properties-common curl wget git unzip
timedatectl set-timezone Europe/Moscow
Часовой пояс важен: LibreNMS сверяет метки времени в базе, PHP и cron — если они разъедутся, графики будут «прыгать» или показывать пустоты.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстанавливаем зависимости: PHP, MariaDB, веб-сервер
Ubuntu 24.04 в стандартных репозиториях несёт PHP 8.3 — этого достаточно, отдельный PPA не нужен. Ставим весь стек одной командой:
apt install -y mariadb-server mariadb-client \
nginx \
php8.3-fpm php8.3-cli php8.3-mysql php8.3-gmp \
php8.3-curl php8.3-mbstring php8.3-snmp php8.3-xml \
php8.3-zip php8.3-gd php8.3-bcmath php8.3-ldap \
snmp snmpd snmp-mibs-downloader \
rrdtool fping imagemagick graphviz mtr-tiny nmap whois \
python3 python3-pip python3-mysqldb python3-dotenv \
python3-redis python3-setuptools python3-systemd
Если планируете отдавать метрики через nginx (рекомендованный сборщиком вариант — есть готовый пример конфига в статье про nginx как reverse-proxy, пригодится позже, когда закроете панель за отдельным доменом), php-fpm уже установлен командой выше. Проверьте, что сервис слушает сокет:
systemctl status php8.3-fpm
Разворачиваем LibreNMS и настраиваем базу данных
Создаём системного пользователя, под которым будет работать сама система, и клонируем репозиторий в /opt/librenms:
useradd librenms -d /opt/librenms -M -r -s /usr/sbin/nologin
git clone https://github.com/librenms/librenms.git /opt/librenms
chown -R librenms:librenms /opt/librenms
chmod 771 /opt/librenms
setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs \
/opt/librenms/bootstrap/cache /opt/librenms/storage
setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs \
/opt/librenms/bootstrap/cache /opt/librenms/storage
ACL нужны, потому что и веб-сервер (php-fpm под своим пользователем), и cron-скрипты (под librenms) должны иметь право писать в одни и те же каталоги логов и RRD.
Дальше — зависимости PHP через composer, который в репозитории уже есть как обёртка:
su - librenms -s /bin/bash -c '/opt/librenms/scripts/composer_wrapper.php install --no-dev'
Теперь база данных. Перед созданием таблиц включите innodb_file_per_table и отключите приведение имён таблиц к нижнему регистру — это стандартные требования LibreNMS, без них мастер установки откажется продолжать:
cat >> /etc/mysql/mariadb.conf.d/50-server.cnf << 'EOF'
[mysqld]
innodb_file_per_table=1
lower_case_table_names=0
EOF
systemctl restart mariadb
mysql_secure_installation
Создаём базу и пользователя:
mysql -u root -p
CREATE DATABASE librenms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'СЛОЖНЫЙ_ПАРОЛЬ';
GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Пароль подставьте свой и держите его подальше от систем контроля версий — он попадёт в .env на следующем шаге.
Настраиваем веб-интерфейс и завершаем установку
Конфиг nginx для LibreNMS смотрит на /opt/librenms/html как на корень и проксирует PHP на fpm-сокет:
server {
listen 80;
server_name librenms.example.com;
root /opt/librenms/html;
index index.php;
charset utf-8;
gzip on;
gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Активируем сайт и настраиваем часовой пояс PHP для веба и CLI одинаково — расхождение здесь одна из частых причин пустых графиков:
ln -s /etc/nginx/sites-available/librenms.conf /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
sed -i 's/;date.timezone.*/date.timezone = Europe\/Moscow/' /etc/php/8.3/fpm/php.ini
sed -i 's/;date.timezone.*/date.timezone = Europe\/Moscow/' /etc/php/8.3/cli/php.ini
systemctl restart php8.3-fpm nginx
Если сервер смотрит наружу без отдельного домена, закройте порт 80 фаервола до конца настройки и откройте только после выпуска SSL — базовые правила разобраны в статье «Настройка фаервола Ubuntu 24.04 с нуля». Панель LibreNMS даёт доступ к данным всей сети — оставлять её открытой без пароля даже на минуту не стоит.
Дальше открываете http://ваш-сервер/install.php в браузере — мастер проверит зависимости, попросит данные для подключения к MySQL (те, что вы создали выше) и заведёт первого администратора. По итогу мастер сгенерирует файл /opt/librenms/.env — если что-то пойдёт не так, его можно поправить руками и перезапустить php artisan migrate от пользователя librenms.
Проверить, что всё установлено корректно, можно встроенным валидатором:
su - librenms -s /bin/bash -c '/opt/librenms/validate.php'
Он честно скажет, каких прав или расширений PHP не хватает — гораздо быстрее, чем ловить это по логам.
SNMP, автообнаружение сети и cron-задачи
Сам сервер с LibreNMS обычно тоже стоит добавить как отслеживаемое устройство — включаем локальный snmpd:
cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf
sed -i 's/RANDOMSTRINGGOESHERE/ваша_community_строка/' /etc/snmp/snmpd.conf
curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro
chmod +x /usr/bin/distro
systemctl enable snmpd
systemctl restart snmpd
Community-строку (пароль SNMP v2c) придумайте сами и используйте одну и ту же на всех устройствах, которые собираетесь мониторить — так проще при массовом добавлении. Для продакшена лучше сразу смотреть в сторону SNMPv3 с аутентификацией и шифрованием — он поддерживается, но настраивается на каждом устройстве отдельно, поэтому в рамках первой установки многие стартуют с v2c и мигрируют позже.
Добавить устройство можно из веб-интерфейса (Devices → Add Device) или из консоли — второе удобнее, если добавляете сразу пачку по списку:
su - librenms -s /bin/bash -c '/opt/librenms/lnms device:add 10.0.0.1 --community "ваша_community_строка" --v2c'
Автообнаружение сети запускается по расписанию и просто перебирает диапазон, пробуя SNMP-community на каждом IP — найденные устройства добавляются сами, если ответили корректно. Задать диапазон для сканирования:
su - librenms -s /bin/bash -c '/opt/librenms/lnms discovery:new 10.0.0.0/24'
Собственно опрос устройств (poller) и обнаружение новых должны выполняться регулярно — под это в репозитории уже лежит готовый cron-файл:
cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms
Он запускает discovery раз в 6 часов и poller каждые 5 минут через poller-wrapper.py, который параллелит опрос нескольких устройств одновременно — при большом парке это заметно быстрее последовательного обхода. Если после установки графики не появляются часами — первым делом проверьте, что cron реально что-то делает:
tail -f /opt/librenms/logs/librenms.log
Отдельно стоит настроить ежедневный daily.sh — он чистит старые данные, обновляет OUI-базу для MAC-адресов и подчищает алерты:
echo "33 0 * * * librenms /opt/librenms/daily.sh >> /dev/null 2>&1" >> /etc/cron.d/librenms
Для алертов по e-mail или в Telegram зайдите в Alerting → Transports в веб-интерфейсе — правила там гибкие, но по умолчанию включён базовый набор (устройство недоступно, интерфейс упал, диск заполняется). Если вам важнее не пропустить падение самого сайта или VPN, а не сетевого железа, посмотрите также Uptime Kuma — он проще LibreNMS и заточен именно под доступность сервисов снаружи, а не под метрики оборудования изнутри сети.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Чем LibreNMS принципиально отличается от Zabbix?
LibreNMS изначально заточен под SNMP и сетевое оборудование с готовыми профилями под конкретные модели — меньше ручной настройки шаблонов «из коробки». Zabbix гибче в алертинге, эскалациях и активных проверках через агента, но требует больше настройки под каждый тип устройства.
Нужен ли отдельный сервер под LibreNMS или можно поставить на уже занятую машину?
Технически можно установить рядом с другими сервисами, но RRD-файлы дают постоянную дисковую нагрузку на запись — на нагруженном продакшен-сервере это может мешать. Для сети от полусотни устройств разумнее вынести мониторинг на отдельную небольшую VPS.
Почему графики устройства пустые, хотя оно добавлено?
Чаще всего дело в неверной community-строке, закрытом на устройстве UDP-порте 161 или в том, что cron ещё не успел отработать первый цикл poller — подождите 5-10 минут и проверьте /opt/librenms/logs/librenms.log.
Можно ли мониторить оборудование за NAT или в другой сети?
Да, если между сервером LibreNMS и устройством есть маршрутизируемая связность по UDP 161 — например, через VPN-туннель между офисом и сервером. Прямого доступа из интернета к SNMP лучше избегать вообще.
Как часто нужно обновлять LibreNMS?
Проект выпускает изменения часто, обновление делается штатным скриптом ./scripts/update.php от пользователя librenms, включая миграции базы — перед обновлением стоит сделать бэкап базы и каталога rrd.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →