LibreNMS: Network Monitoring and Autodiscovery for Your Homelab
Most homelab monitoring setups focus on server metrics — CPU, RAM, disk — using tools like Prometheus and Grafana. But what about your switches, access points, UPS units, and other network gear? That's where LibreNMS shines. It's a full-featured network monitoring system that speaks SNMP natively and can autodiscover every device on your network.
Photo by Javier Miranda on Unsplash
What LibreNMS Does
LibreNMS is a fork of Observium that's been community-developed since 2013. It monitors network devices via SNMP, tracks interface bandwidth, generates historical graphs, sends alerts, and maintains a complete inventory of your infrastructure. Think of it as the homelab equivalent of what enterprise NOCs use to monitor thousands of devices.
Key capabilities:
- Autodiscovery: Point it at a subnet or seed device and it finds everything via CDP, LLDP, SNMP, and ARP tables
- Bandwidth graphing: Per-port traffic graphs with 95th percentile calculations
- Alerting: Rules-based alerts via email, Slack, Discord, PagerDuty, or custom transports
- Device inventory: Hardware models, serial numbers, firmware versions, and module details
- Weathermaps: Visual network topology maps showing real-time traffic flow
- API: Full REST API for integration with other tools
Deploying LibreNMS with Docker
The official Docker image is the easiest path. Create a docker-compose.yml:
services:
librenms:
image: librenms/librenms:latest
container_name: librenms
hostname: librenms
ports:
- "8000:8000"
environment:
- DB_HOST=db
- DB_NAME=librenms
- DB_USER=librenms
- DB_PASSWORD=changeme_db_password
- DB_TIMEOUT=60
- TZ=America/Los_Angeles
volumes:
- ./data:/data
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
restart: unless-stopped
dispatcher:
image: librenms/librenms:latest
container_name: librenms-dispatcher
hostname: librenms-dispatcher
environment:
- DB_HOST=db
- DB_NAME=librenms
- DB_USER=librenms
- DB_PASSWORD=changeme_db_password
- DISPATCHER_NODE_ID=dispatcher1
- SIDECAR_DISPATCHER=1
- TZ=America/Los_Angeles
volumes:
- ./data:/data
depends_on:
librenms:
condition: service_started
restart: unless-stopped
db:
image: mariadb:10.11
container_name: librenms-db
environment:
- MYSQL_DATABASE=librenms
- MYSQL_USER=librenms
- MYSQL_PASSWORD=changeme_db_password
- MYSQL_ROOT_PASSWORD=changeme_root_password
volumes:
- ./db:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 3
restart: unless-stopped
redis:
image: redis:7-alpine
container_name: librenms-redis
restart: unless-stopped
Start it up:
docker compose up -d
Access the web UI at http://your-server:8000. The first-run wizard walks you through creating an admin account.
Configuring SNMP on Your Devices
LibreNMS needs SNMP access to monitor devices. Most managed switches, routers, and NAS units support SNMP — you just need to enable it.
Linux servers
Install the SNMP daemon:
sudo apt install snmpd
Edit /etc/snmp/snmpd.conf:
rocommunity homelab_readonly default
syslocation "Home Lab Rack"
syscontact [email protected]
agentaddress udp:161
Restart and enable:
sudo systemctl restart snmpd
sudo systemctl enable snmpd
Managed switches
Most managed switches have an SNMP settings page in their web UI. Enable SNMPv2c with a read-only community string. Use the same community string across all devices to simplify autodiscovery.
SNMPv3 for better security
If your devices support it, SNMPv3 adds authentication and encryption:
# On Linux hosts
createUser librenms_user SHA "auth_password" AES "priv_password"
rouser librenms_user priv
In LibreNMS, add the device with SNMPv3 credentials specifying authPriv security level, SHA auth, and AES privacy protocols.
Like what you're reading? Subscribe to HomeLab Starter — free weekly guides in your inbox.
Setting Up Autodiscovery
Once your first device is added manually, LibreNMS can discover the rest automatically. Go to Settings → Discovery → General and configure:
- Enable autodiscovery: Turn on CDP, LLDP, OSPF, and ARP table discovery
- Discovery networks: Add your homelab subnets (e.g.,
10.0.0.0/24,192.168.1.0/24) - Community strings: Add your SNMP community strings so discovered devices can be polled
LibreNMS polls every 5 minutes by default. After a discovery cycle or two, your device list should populate with switches, APs, servers, and anything else responding to SNMP.
Building Useful Alert Rules
Raw monitoring without alerts is just data hoarding. Set up rules that actually matter:
# High bandwidth utilization (>80% on any port for 15 minutes)
%ports.ifInOctets_rate > ((%ports.ifSpeed / 100) * 80)
# Device unreachable
%devices.status = 0
# High CPU on network devices
%processors.processor_usage >= 90
# Storage filling up
%storage.storage_perc >= 85
Configure alert transports under Settings → Alerting → Alert Transports. Discord webhooks work well for homelab notifications — create a #network-alerts channel and point a webhook URL at it.
Weathermaps and Dashboards
LibreNMS includes a weathermap plugin that creates visual network topology diagrams with real-time bandwidth overlays. Enable it under Settings → Plugins → Weathermap.
You'll draw your network topology manually — placing nodes for each device and drawing links between ports. The map then shows live traffic with color-coded bandwidth utilization. Green means idle, yellow means moderate, red means saturated.
For integration with existing Grafana dashboards, LibreNMS exposes all metrics via its API:
curl -H "X-Auth-Token: your_api_token" \
http://librenms:8000/api/v0/devices
The community also maintains a Grafana datasource plugin that pulls LibreNMS data directly into your existing dashboards.
Performance Tuning
A default LibreNMS install handles 50–100 devices without issues. For larger homelabs:
- Increase poller threads: Set
DISPATCHER_NODE_IDand run multiple dispatcher containers - RRDcached: Enable RRD caching to reduce disk I/O from constant graph updates
- Fast ping: Enable
ping_rrdto get sub-minute latency tracking - Disable unused modules: Turn off modules like
applicationsorservicesfor devices that don't need them
Monitor LibreNMS itself — check the Poller tab to ensure all devices complete polling within the 5-minute window. If polling overruns, you need more dispatcher workers or fewer enabled modules.
LibreNMS vs Other Monitoring Tools
If you already run Prometheus and Grafana, you might wonder why you'd add LibreNMS. The answer is specialization. Prometheus excels at application and server metrics with its pull-based model. LibreNMS excels at network device monitoring with its SNMP-native approach.
Most managed switches and enterprise APs don't expose Prometheus endpoints, but they all speak SNMP. LibreNMS handles the device discovery, MIB parsing, and per-port tracking that would require significant custom work in Prometheus.
The ideal homelab monitoring stack uses both: Prometheus and Grafana for your servers and containers, LibreNMS for your network infrastructure. They complement each other rather than compete.
Wrapping Up
LibreNMS fills a real gap in most homelab monitoring setups. It gives you visibility into the network layer — switches, routers, APs, UPS units — that server-focused tools miss. The autodiscovery alone saves hours of manual configuration, and the historical bandwidth graphs help you make informed decisions about network upgrades. Set it up once and it quietly watches everything, alerting you only when something needs attention.
