· 17 мин чтения

LibreNMS для распределённой сети: SNMP, карта, алерты и Oxidized

Меня зовут Семёнов Евгений Сергеевич, и у меня в практике за 15 лет было около сорока внедрений NMS разного масштаба — от маленьких офисов с двумя коммутаторами до логистических сетей с сотнями Cisco, Aruba и MikroTik в филиалах. Если мониторят серверы и приложения — я выбираю Zabbix. Если именно сеть, то почти всегда — LibreNMS: он бесплатный, понимает любое оборудование через SNMP MIB и ставится за рабочий день. Ниже — наш внутренний boilerplate-регламент внедрения и реальный кейс с цифрами.

Что такое LibreNMS и почему он так прижился

LibreNMS — форк старого-доброго Observium, но с открытой разработкой и нормальным community. Работает на стеке PHP + MySQL + RRDtool + Python-поллерах. Сильная сторона — встроенная база описаний оборудования: 1500+ моделей из коробки, от Cisco Catalyst до HP ProCurve и промышленных Moxa. Слабая — тяжёлый веб-интерфейс, если устройств становится много.

У нас на продакшене LibreNMS крутится на отдельной виртуалке Debian 12 с 6 vCPU и 12 ГБ RAM, в дата-центре МТС, мониторит 230+ сетевых устройств у клиентов. Сервер — Dell Xeon Platinum 8280, дисковая подсистема NVMe, к ней подцеплен 40-гигабитный Mellanox для взаимодействия с остальными виртуалками.

Установка: официальный скрипт vs ручная сборка

Есть три пути: Docker-образ, Debian-пакет и ручная установка из git. Я всегда беру ручную — контроль над версиями PHP, nginx и MariaDB окупается с лихвой, когда приходит время большого апгрейда.

sudo apt update && sudo apt install -y acl curl fping git graphviz imagemagick \
  mariadb-client mariadb-server mtr-tiny nginx-full nmap php8.2-cli php8.2-curl \
  php8.2-fpm php8.2-gd php8.2-gmp php8.2-mbstring php8.2-mysql php8.2-snmp \
  php8.2-xml php8.2-zip python3-dotenv python3-pymysql python3-redis \
  python3-setuptools python3-systemd python3-pip rrdtool snmp snmpd whois \
  unzip python3-pip

sudo useradd librenms -d /opt/librenms -M -r -s "$(which bash)"
cd /opt
sudo git clone https://github.com/librenms/librenms.git
sudo chown -R librenms:librenms /opt/librenms
sudo chmod 771 /opt/librenms
sudo setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache
sudo setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache

MariaDB, nginx, PHP-FPM, cron, dispatcher-сервис — всё по официальной документации. Я не переписываю туториал, в нём 200 строк, они действительно рабочие. Если при ./validate.php всё горит зелёным — двигаемся дальше.

SNMP v3: нормальная аутентификация вместо пароля на заборе

Первое, что я делаю после установки — раскатываю SNMP v3 на всех коммутаторах. У нас в стандартной заготовке два контекста: ro (только чтение, полл LibreNMS) и rw (управление, Oxidized тоже ходит по v3). На Cisco IOS это выглядит так:

snmp-server group LIBRENMS-RO v3 priv
snmp-server user nms LIBRENMS-RO v3 auth sha1 AuthPass2025! priv aes 128 PrivPass2025!
snmp-server contact "it@company.ru"
snmp-server location "MSK-Office-5floor"

Для MikroTik:

/snmp community add name=nms authentication-protocol=SHA1 authentication-password=AuthPass2025! \
    encryption-protocol=AES encryption-password=PrivPass2025! security=private
/snmp set enabled=yes trap-version=3 contact="it@company.ru" location="Warehouse-Khimki"

Добавляем устройство в LibreNMS одним CLI-вызовом:

sudo -u librenms /opt/librenms/addhost.php 10.10.5.1 v3 nms AuthPass2025! SHA1 PrivPass2025! AES priv

Auto-discovery и карта топологии

Включите на коммутаторах CDP (Cisco) или LLDP (все остальные) — после этого LibreNMS сам построит карту связей. Настройка на стороне LibreNMS — в config.php:

$config['autodiscovery']['xdp']      = true;   // LLDP/CDP/FDP/OSPF
$config['autodiscovery']['ospf']     = true;
$config['autodiscovery']['bgp']      = false;
$config['autodiscovery']['snmpscan'] = false;  // на проде вредно, грузит сеть
$config['nets']                      = ['10.10.0.0/16', '10.20.0.0/16'];

Крон /opt/librenms/discovery-wrapper.py запускается каждые 6 часов и сам добавляет новые устройства. Через сутки после настройки в разделе Maps появится наглядная schema с линиями между коммутаторами — это не декорация, по ней удобно находить петли и несимметричные каналы.

Алерты в Telegram: минимум шума, максимум пользы

Стандартный саундтрек пожилого админа — 300 писем за выходные. Чтобы не скатиться туда, я настраиваю Telegram-транспорт и жёсткий список правил. Добавляем в config.php:

$config['alert']['transports']['telegram'][0]['token']   = '1234567890:AA...';
$config['alert']['transports']['telegram'][0]['chat_id'] = '-1001234567890';
$config['alert']['transports']['telegram'][0]['parse_mode'] = 'markdown';

Дальше в UI → Alerts → Rules создаю минимальный набор:

ПравилоУсловиеSeverityDelay
Device downdevices.status = 0Critical5 мин
Port down (uplink)ports.ifOperStatus = down AND ifAlias ~ "UPLINK"Critical1 мин
CPU > 85%processors.processor_usage > 85Warning10 мин
Temp > 65°Csensors.sensor_current > 65 AND class=temperatureWarning15 мин
UPS batterysensors.sensor_class = charge AND sensor_current < 90Warning30 мин

Delay в 5 минут убивает около 80% ложных алертов от кратковременных пропаданий пинга. Оставшиеся 20% уже реально требуют действий.

Oxidized: git-история всех сетевых конфигов

Сетевое оборудование часто меняют не спеша и без документирования. Oxidized решает это радикально — каждую ночь стягивает running-config со всех устройств и коммитит в git. LibreNMS видит его через плагин и отрисовывает diff прямо в веб-интерфейсе.

sudo apt install -y ruby ruby-dev libssl-dev pkg-config g++ cmake
sudo gem install oxidized oxidized-script oxidized-web

sudo useradd -s /bin/bash -m oxidized
sudo -u oxidized oxidized  # создаст /home/oxidized/.config/oxidized/

В config указываем источник — сам LibreNMS через его API (удобно: добавили устройство в NMS — оно автоматически попало в бэкап):

source:
  default: http
  http:
    url: https://nms.company.ru/api/v0/oxidized
    headers:
      X-Auth-Token: 'ВАШ_API_ТОКЕН_ИЗ_LIBRENMS'
output:
  default: git
  git:
    user: oxidized
    email: oxidized@company.ru
    repo: /var/lib/oxidized/devices.git
interval: 3600

После первого прогона в репозитории лежат все running-configs. Диффы за месяц рассказывают о сети больше, чем любая Confluence-страница.

Реальный кейс: логистика, 8 складов, 140 устройств

В апреле 2025 года к нам пришёл логистический оператор — один головной офис в Москве, 8 складов в Подмосковье и Калужской области, суммарно 140 сетевых устройств: 72 Cisco Catalyst, 38 MikroTik, 14 Aruba-точек, 8 АТС, плюс Wi-Fi-контроллеры. До нас мониторили «никак, в основном пингом из гугл-таблицы».

Мы развернули LibreNMS на новой виртуалке в их кластере Proxmox, SNMP v3 на всём парке раскатили через Ansible за два вечера, IPsec-туннели до складов уже были. Через неделю появилось то, что клиент никогда не видел: карта связности с перекрёстными путями, графики загрузки uplinks на всех складах, сигналы о перегретых коммутаторах в котельных.

За первые полтора месяца LibreNMS выявил три проблемы, о которых не подозревали: деградирующий SFP-модуль на складе в Подольске (ежечасные переподключения, гуляли вместе с грузовиками), петлю на складе Ногинск (разъединили, и время доставки заказа по WMS упало с 48 секунд до 9), перегрев стойки в Дмитрове (кондиционер чинили четыре месяца, никто не замечал). Бюджет — 215 000 рублей за внедрение под ключ плюс техподдержка 18 000 в месяц.

Distributed polling и масштабирование

Когда устройств становится больше 400–500, одной виртуалке становится тесно: цикл опроса не укладывается в 5 минут. Решение — distributed poller: отдельная машина пополняет ту же БД. Конфигурация в config.php:

$config['distributed_poller']                = true;
$config['distributed_poller_name']           = 'poller-spb';
$config['distributed_poller_group']          = 1;
$config['distributed_poller_memcached_host'] = 'nms.company.ru';
$config['distributed_poller_memcached_port'] = 11211;

У меня в практике потолок одного поллера — примерно 700 устройств с интервалом 5 минут. Выше — ставьте второй и третий.

Что я обязательно делаю после запуска

Развернём LibreNMS и сделаем сеть прозрачной

Устанавливаем и настраиваем NMS для офисов до 50 РМ и для распределённых сетей с филиалами. SNMP v3, автодискавери, Telegram-алерты, Oxidized, отчёты руководителю — всё под ключ. Первый мониторинг раскатаем за рабочий день.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — LibreNMS в корпоративной сети

Когда LibreNMS выигрывает у Zabbix?
Когда главная задача — именно сеть. LibreNMS из коробки понимает более 1500 моделей коммутаторов, роутеров и UPS, рисует карту топологии по CDP/LLDP, умеет weathermap. Zabbix универсальнее для серверов и приложений.
Почему мы используем только SNMP v3?
SNMP v2c передаёт community-string по сети в открытом виде. v3 добавляет SHA-аутентификацию и AES-шифрование. Для распределённых сетей с туннелями через публичный интернет это минимальная гигиена.
Сколько железа нужно под LibreNMS для офиса 50–150 устройств?
4 vCPU, 8 ГБ RAM, 120 ГБ SSD хватает с запасом. RRD-базы занимают около 200 МБ на устройство, но за счёт round-robin не растут со временем.
Зачем нужен Oxidized, если на коммутаторах есть ручной бэкап?
Oxidized тянет конфиг раз в сутки и коммитит в git. Вы видите diff — что именно и когда изменилось. При ЧП открываете вчерашний коммит и возвращаете рабочую конфигурацию за минуту.
Как мониторить филиалы за NAT?
Самый надёжный путь — поднять IPsec/WireGuard туннели и опрашивать SNMP по внутренним адресам. Для крупной сети — distributed polling: ставим дополнительный poller в филиале.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.