LibreNMS: Monitorização de Rede Open-Source para PME em 2026

Introdução

O LibreNMS é um sistema de monitorização de rede open-source baseado em PHP e MySQL/MariaDB, com suporte nativo para SNMP, API REST e integração com múltiplas plataformas de notificação. Em 2026, continua a ser uma das soluções mais robustas para pequenas e médias empresas (PME) que precisam de visibilidade sobre switches, routers, servidores e dispositivos IoT sem pagar licenças comerciais.

O projecto nasceu em 2013 como fork do Observium Community Edition e desde então mantém lançamentos regulares. A versão estável actual suporta PHP 8.2+, MariaDB 10.6+, e inclui funcionalidades como autenticação via LDAP/Active Directory, API GraphQL, integração com Grafana e dashboards customizáveis.

Para uma PME com 10 a 50 dispositivos de rede, o LibreNMS oferece um custo total de propriedade (TCO) significativamente inferior a soluções como PRTG ou SolarWinds, sem sacrificar funcionalidades essenciais como recolha de métricas via SNMP, alertas por email/Slack/Telegram e mapas de topologia automáticos.

ℹ Requisitos mínimos

Servidor com 2 vCPU, 2 GB RAM e 20 GB disco. Para ambientes com mais de 100 dispositivos, recomenda-se 4 vCPU e 4 GB RAM com MariaDB configurado com InnoDB buffer pool adequado.

Instalar LibreNMS

A instalação oficial corre em Debian 12 ou Ubuntu 24.04 LTS. O processo manual dá controlo total sobre cada componente, mas o script automatizado librenms.sh da comunidade reduz o tempo de 45 minutos para cerca de 10.

Passos principais para instalação manual em Debian 12:

# 1. Instalar dependências
apt update && apt install -y nginx mariadb-server php8.2-fpm \
  php8.2-cli php8.2-mysql php8.2-gd php8.2-snmp php8.2-curl \
  php8.2-mbstring php8.2-xml php8.2-zip python3-pip fping rrdtool \
  snmp snmpd whois traceroute mtr-tiny imagemagick graphviz

# 2. Criar base de dados
mysql -u root -e "CREATE DATABASE librenms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -e "CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'SenhaForteAqui';"
mysql -u root -e "GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';"
mysql -u root -e "FLUSH PRIVILEGES;"

# 3. Criar utilizador de sistema
useradd -r -s /bin/bash -d /opt/librenms librenms

# 4. Clonar repositório
cd /opt && git clone https://github.com/librenms/librenms.git
chown -R librenms:librenms /opt/librenms

# 5. Configurar permissões
chmod +x /opt/librenms/scripts
setfacl -R -m g:librenms:rwx /opt/librenms
setfacl -d -m g:librenms:rwx /opt/librenms

Após instalar os pacotes, configurar o Nginx com um virtual host dedicado e o PHP-FPM pool para o utilizador librenms. A configuração do config.php define a ligação à base de dados e o URL base da instalação.

# /opt/librenms/config.php (excerto)
$config['db_host'] = 'localhost';
$config['db_user'] = 'librenms';
$config['db_pass'] = 'SenhaForteAqui';
$config['db_name'] = 'librenms';
$config['base_url'] = 'https://monitor.empresa.pt';

# Configurar timezone
$config['timezone'] = 'Europe/Lisbon';

# Activar alertas por email
$config['alert']['email']['enable'] = true;
$config['alert']['email']['from'] = '[email protected]';

O último passo do instalador web em https://monitor.empresa.pt valida a base de dados, permissões e dependências PHP. Se tudo estiver correcto, cria a conta de administrador e carrega o esquema inicial da base de dados.

✓ Cron e serviços

O LibreNMS depende de tarefas cron para executar a descoberta automática de equipamentos (discovery), poller de métricas SNMP, alertas e limpeza de base de dados. Sem o cron, o LibreNMS não recolhe dados nem gera alertas. Para activar, copiar /opt/librenms/librenms.nonroot.cron para /etc/cron.d/librenms e reiniciar o serviço cron com systemctl restart cron.

SNMP e Descoberta

O LibreNMS descobre dispositivos automaticamente via SNMP v2c ou v3. A descoberta automática lê a tabela ARP, FDB (Forwarding DataBase) e LLDP/CDP vizinhos do núcleo de rede para mapear toda a topologia sem intervenção manual.

Configuração SNMP nos dispositivos de rede. Exemplo para um switch Cisco ou HP com SNMP v2c:

# Switch Cisco IOS
snmp-server community public RO
snmp-server location Sala_Tecnica_Edificio_A
snmp-server contact [email protected]
snmp-server enable traps

# SNMP v3 (recomendado em producao)
snmp-server group admins v3 priv read all
snmp-server user librenms admins v3 auth SHA SenhaAuth123 priv AES 128 SenhaPriv456

No LibreNMS, adicionar dispositivos pela interface web em Devices > Add Device ou via CLI:

su - librenms
cd /opt/librenms
./snmp-scan.py -t 192.168.1.0/24 -c public
./addhost.php 192.168.1.1 public v2c
./discovery.php -h all

A descoberta identifica automaticamente o tipo de dispositivo (switch, router, servidor, AP Wi-Fi), carrega o OS-specific YAML e começa a recolher métricas de portas, CPU, memória e temperatura. O processo de poller corre a cada 5 minutos por cron e actualiza os gráficos RRD.

💡 Dica de performance

Para redes com mais de 50 dispositivos, activar o distributed_poller no config.php com Redis para partilha de estado. Reduz o tempo de poll de 5 minutos para menos de 1 minuto.

Alertas e Notificações

O sistema de alertas do LibreNMS baseia-se em regras flexíveis que avaliam métricas SNMP em tempo real. Cada regra tem uma condição, um nível de severidade e um ou mais transportes de notificação.

Regras de alerta mais comuns para PME em 2026:

# Alerta: port down mais de 2 minutos
rule: ports.port_status = down AND ports.ifOperStatus = down
severity: critical
delay: 120

# Alerta: CPU acima de 85% por 5 minutos
rule: processors.processor_usage > 85
severity: warning
delay: 300

# Alerta: disco com menos de 10% livre
rule: storage.storage_perc < 10
severity: critical
delay: 60

Transportes suportados nativamente em 2026: Email, Slack, Telegram, Discord, Microsoft Teams, PagerDuty, Pushover, SMS via API (Twilio/Nexmo) e webhook HTTP genérico. A configuração de cada transporte é feita em Alerts > Alert Transports.

Exemplo de configuração de transporte Telegram:

# /opt/librenms/config.php
$config['alert']['telegram']['enable'] = true;
$config['alert']['telegram']['bot_token'] = '123456:ABC-DEF...';
$config['alert']['telegram']['chat_id'] = '-1001234567890';

# Template de mensagem (usar nome do dispositivo e severidade)
# O LibreNMS envia automaticamente:
# "ALERTA: {hostname} - {title} (Severidade: {severity})"

⚠ Alertas de maintenance

Configurar janelas de manutenção em Alerts > Maintenance antes de reiniciar dispositivos. Sem isto, o LibreNMS dispara alertas de port down durante manutenções planeadas, saturando canais de Telegram/Slack.

Erros Comuns

Os problemas mais frequentes em instalações LibreNMS em PME, com diagnóstico e solução:

Erro Causa Solução
SNMP no response SNMP não activo no dispositivo ou firewall a bloquear UDP 161 Verificar com snmpwalk -v2c -c public IP. Abrir UDP 161 no firewall do dispositivo
Poller stuck Cron não configurado ou permissões incorrectas em /opt/librenms Correr ./discovery.php -h all manualmente. Verificar /etc/cron.d/librenms
RRD graphs blank Permissões do directório rrd/ ou SELinux/AppArmor a bloquear escrita Correr ./scripts/fix_permissions.sh. Verificar SELinux com getsebool -a | grep httpd
Web 502 Bad Gateway PHP-FPM parado ou socket path errado na config Nginx systemctl restart php8.2-fpm. Verificar socket em /run/php/php8.2-fpm.sock
DB connection failed Credenciais erradas em config.php ou MariaDB não a correr Verificar systemctl status mariadb. Testar ligação: mysql -u librenms -p librenms
Alertas não chegam Transporte mal configurado ou regra sem transporte associado Testar em Alerts > Transports com botão Test. Verificar mapa regra→transporte
Discovery timeout Rede com dispositivos inacessíveis ou fping lento Excluir ranges não monitorizados. Aumentar $config['snmp']['timeout'] para 10s
Upgrade falha Dependências PHP desactualizadas ou schema DB desync Correr ./daily.sh manualmente. Verificar ./scripts/composer_wrapper.php install