What LibreNMS Monitors and Why It Belongs in Your Homelab
LibreNMS is a fully-featured, auto-discovering network monitoring system. Think of it as PRTG or SolarWinds for the self-hosted world — except it’s open source, has no device limits, and runs happily in Docker.
If your homelab has more than a handful of network devices — MikroTik routers, managed switches, Proxmox hosts, Linux servers — you’ve probably run into the pain of manually checking each one when something breaks. LibreNMS solves this by polling every device at configurable intervals, graphing interface utilization, CPU, memory, storage, and temperature sensors, and alerting you when thresholds cross.
Unlike Prometheus + Grafana, which requires a separate exporter per metric type, LibreNMS speaks SNMP natively. Enable SNMP on a device, add it to LibreNMS, and it automatically discovers every interface, disk, process, and sensor the device exposes.
In this guide you’ll deploy the full LibreNMS Docker Compose stack, configure SNMP on MikroTik RouterOS and Linux hosts, set up autodiscovery, create alert rules, and optionally integrate Oxidized for automated config backups.
Docker Compose Stack for LibreNMS
The official LibreNMS Docker image uses MariaDB for storage and Redis for queue and cache. Create a directory and the compose file:
|
|
Here is the complete compose file:
|
|
Pull and start the stack:
|
|
The first startup initializes the database. Check the logs until the web UI is ready:
|
|
Initial Setup via Web Installer
Point your browser to http://your-docker-host:8000/install. The installer will guide you through:
- Checking prerequisites (all should pass in the Docker image)
- Database credentials — leave as defaults since they match the compose environment
- Creating the admin user — username, password, email
- Generating the
config.php— the Docker image handles this through environment variables
After the installer completes, log in and go to Settings → Global Settings → Poller Settings to adjust the polling interval (default 5 minutes) and enable distributed polling if you run multiple pollers.
SNMP Configuration on Target Devices
MikroTik RouterOS
LibreNMS reads the standard SNMP MIBs that RouterOS exposes. Start with SNMPv2c for simplicity, then move to SNMPv3 for security.
SNMPv2c (quick setup):
|
|
SNMPv3 (recommended for production):
|
|
Linux and Proxmox Hosts
Install and configure snmpd on each host to expose system metrics:
|
|
Edit /etc/snmp/snmpd.conf:
|
|
Restart snmpd:
|
|
Verify connectivity from your Docker host:
|
|
Managed Switches (MikroTik CRS3xx)
Add SNMP on MikroTik switches the same way:
|
|
Adding Devices and Autodiscovery
LibreNMS can discover devices automatically by scanning subnets. Enable it in Settings → Global Settings → Autodiscovery:
- Set
Autodiscoveryto Enabled - Set
Autodiscovery Networksto your homelab CIDR blocks, e.g.10.0.20.0/24,10.0.30.0/24
Then run discovery manually from inside the container:
|
|
This scans the configured subnets, tests SNMP reachability, and adds any device that responds.
To manually add a single device via the command line:
|
|
You can also use the Devices → Add Device form in the web UI.
Device Groups
Organize devices by type. Go to Devices → Device Groups and create groups:
- MikroTik — match by sysDescr regex
/MikroTik|RouterOS/ - Linux Servers — match by sysDescr regex
/Linux/ - Proxmox — match by sysLocation or manual assignment
Groups make it easier to set per-group alert rules and build focused dashboards.
Alerting and Notifications
LibreNMS ships with sensible default alert rules. You can also create custom ones.
Default Alert Rules
Go to Alerts → Alert Rules. Pre-configured rules include:
- Device Down — ICMP unreachable or SNMP timeout
- Port Down — administrative + operational status changes
- High CPU — threshold per device type
- High Storage — disk usage above 90%
Telegram Notifications
Create a transport in Alerts → Alert Transports → Create Transport:
- Transport Type: Telegram
- API Key: your bot token from BotFather
- Chat ID: your Telegram chat ID
- Format: Markdown or HTML
Then map transport to alert rules via Alert Rules → edit → Transport → Telegram.
Custom Alert Rule Example
Create a rule that fires when a MikroTik CPU exceeds 80% for two polling cycles:
- Go to Alerts → Alert Rules → Create Alert Rule
- Rule name:
MikroTik High CPU - Builder mode: Advanced
- Query:
%macros.deviceAND%macros.sensor_cpu - Condition:
sensor_current >= 80 - Interval: check every
600s(two standard polling intervals) - Max alerts per day:
3 - Transport: select your Telegram transport
You can also use the rule builder without writing SQL:
|
|
Dashboard and Graphing
LibreNMS automatically generates per-device graphs. Navigate to a device in the web UI to see:
- Overview — summary with health, uptime, and sysinfo
- Ports — traffic graphs for every interface
- Health — CPU, memory, storage, temperature
- Apps — application-level monitoring (nginx, MySQL, Docker, etc.)
To add application monitoring for Docker on a Linux host:
|
|
Custom Dashboard
Create a custom dashboard: Overview → Dashboards → Create Dashboard.
Use the “Worldmap” widget to pin device locations for WAN link visibility. Use “Device Summary” widgets per group for at-a-glance health.
- Widget 1: Device Summary — all MikroTik devices
- Widget 2: Alerts — outstanding alerts
- Widget 3: Traffic Graphs — top 5 ports by utilization
Oxidized Config Backup Integration (Optional)
Oxidized automatically backs up RouterOS and switch configurations whenever they change, and stores the history in a Git repository.
Deploy Oxidized in Docker alongside LibreNMS:
|
|
Add it to the same LibreNMS compose file and configure LibreNMS integration: Settings → Global Settings → Oxidized Integration → enable, set the Oxidized URL to http://oxidized:8888.
Oxidized needs a RouterOS-specific model. Create the config file data/oxidized/config:
|
|
And data/oxidized/router.db:
|
|
After setup, RouterOS config changes are automatically committed. View history in LibreNMS under Device → Config → History.
Traefik Reverse Proxy Integration
Expose LibreNMS behind Traefik for HTTPS access via a subdomain like librenms.homelab.example.com. Add Traefik labels to the compose file:
|
|
Add traefik-net to the services and remove the ports section for LibreNMS to avoid direct HTTP exposure.
Performance Tuning for Larger Networks
If your homelab grows beyond 50 devices, optimize the poller:
|
|
For distributed polling, run additional poller containers that connect to the same database — LibreNMS handles multi-poller natively.
Summary
LibreNMS fills a specific gap in the homelab monitoring landscape: automatic SNMP-based discovery with zero per-metric config. Deploy it alongside your existing Prometheus + Grafana stack for network-focused observability, or use it standalone for a quick overview of every device on your network.
Start by enabling SNMP on your MikroTik RouterOS devices — the standard MIBs cover interfaces, CPU, memory, and temperature. Then expand to Linux hosts, switches, and Proxmox nodes. Once autodiscovery is running, LibreNMS finds new devices automatically, so your monitoring coverage grows with your lab.