Network Monitoring Stack
Complete network monitoring with LibreNMS, Oxidized config backup, and Smokeping
Overview
LibreNMS is a comprehensive open-source network monitoring platform that auto-discovers devices via SNMP and provides detailed performance metrics, alerting, and network visualization. Originally forked from Observium in 2013, LibreNMS has evolved into a community-driven solution supporting thousands of device types from major vendors like Cisco, Juniper, HP, and Dell. The platform excels at monitoring network infrastructure through SNMP polling, providing bandwidth utilization graphs, port status monitoring, and device health tracking.
This monitoring stack combines LibreNMS's network discovery capabilities with Oxidized for automated configuration backup and Smokeping for latency monitoring. Oxidized connects to network devices via SSH/Telnet to regularly backup configurations and track changes over time, while Smokeping measures network latency and packet loss through continuous ping monitoring. MariaDB serves as LibreNMS's primary database for storing device information, performance metrics, and historical data, while Redis handles caching and job queuing for the LibreNMS dispatcher service.
Network administrators managing enterprise infrastructure, MSPs monitoring client networks, and homelab enthusiasts tracking personal networks will find this stack invaluable. The combination provides complete visibility into network performance, automated change tracking for compliance, and proactive latency monitoring to identify connectivity issues before they impact users. Unlike standalone monitoring tools, this integrated approach correlates device performance with configuration changes and network latency patterns.
Key Features
- Auto-discovery of network devices via SNMP with support for 3000+ device types including Cisco, Juniper, HP, and Mikrotik
- Real-time bandwidth monitoring with customizable alerting thresholds for interface utilization and error rates
- Automated configuration backup through Oxidized with Git-based version control and change detection
- Continuous latency monitoring via Smokeping with multi-target ping graphs and packet loss tracking
- LibreNMS dispatcher service for distributed polling across multiple nodes to handle large network infrastructures
- Integration between LibreNMS and Oxidized for centralized device management and configuration correlation
- Weathermap plugin support for creating visual network topology diagrams with real-time link utilization
- Custom OID monitoring for proprietary SNMP metrics and vendor-specific device parameters
Common Use Cases
- 1Enterprise network monitoring for tracking switch port utilization, router performance, and firewall throughput across multiple sites
- 2MSP client network management with automated configuration backups for compliance and change tracking
- 3Data center infrastructure monitoring including server hardware, UPS systems, and environmental sensors
- 4ISP network operations for monitoring core routers, edge devices, and customer connection quality
- 5Campus network administration tracking wireless access points, distribution switches, and core infrastructure
- 6Homelab network monitoring for enthusiasts running complex home networks with VLANs and multiple subnets
- 7DevOps network visibility for monitoring cloud infrastructure, VPN concentrators, and hybrid connectivity
Prerequisites
- Docker host with minimum 4GB RAM (LibreNMS requires 2GB+, MariaDB needs 1GB+, additional overhead for other services)
- Network devices with SNMP v1/v2c/v3 enabled and proper community strings or authentication credentials configured
- TCP ports 8000, 8081, and 8888 available for LibreNMS, Smokeping, and Oxidized web interfaces respectively
- SSH/Telnet access credentials for network devices if using Oxidized configuration backup functionality
- Understanding of SNMP concepts, OIDs, and network device management for proper monitoring configuration
- Firewall rules allowing SNMP (UDP 161) and ICMP traffic from Docker host to monitored network devices
For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms
docker-compose.yml
docker-compose.yml
1services: 2 librenms: 3 image: librenms/librenms:latest4 container_name: librenms5 restart: unless-stopped6 ports: 7 - "${LIBRENMS_PORT:-8000}:8000"8 environment: 9 - TZ=${TZ:-UTC}10 - PUID=${PUID:-1000}11 - PGID=${PGID:-1000}12 - DB_HOST=librenms-db13 - DB_NAME=librenms14 - DB_USER=librenms15 - DB_PASSWORD=${DB_PASSWORD}16 - REDIS_HOST=librenms-redis17 volumes: 18 - librenms_data:/data19 depends_on: 20 - librenms-db21 - librenms-redis2223 librenms-dispatcher: 24 image: librenms/librenms:latest25 container_name: librenms-dispatcher26 restart: unless-stopped27 environment: 28 - TZ=${TZ:-UTC}29 - PUID=${PUID:-1000}30 - PGID=${PGID:-1000}31 - DB_HOST=librenms-db32 - DB_NAME=librenms33 - DB_USER=librenms34 - DB_PASSWORD=${DB_PASSWORD}35 - REDIS_HOST=librenms-redis36 - SIDECAR_DISPATCHER=137 volumes: 38 - librenms_data:/data39 depends_on: 40 - librenms4142 librenms-db: 43 image: mariadb:10.1144 container_name: librenms-db45 restart: unless-stopped46 environment: 47 - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}48 - MYSQL_DATABASE=librenms49 - MYSQL_USER=librenms50 - MYSQL_PASSWORD=${DB_PASSWORD}51 volumes: 52 - librenms_db_data:/var/lib/mysql5354 librenms-redis: 55 image: redis:7-alpine56 container_name: librenms-redis57 restart: unless-stopped5859 oxidized: 60 image: oxidized/oxidized:latest61 container_name: oxidized62 restart: unless-stopped63 ports: 64 - "${OXIDIZED_PORT:-8888}:8888"65 volumes: 66 - ./oxidized:/home/oxidized/.config/oxidized67 depends_on: 68 - librenms6970 smokeping: 71 image: lscr.io/linuxserver/smokeping:latest72 container_name: smokeping73 restart: unless-stopped74 ports: 75 - "${SMOKEPING_PORT:-8081}:80"76 environment: 77 - PUID=${PUID:-1000}78 - PGID=${PGID:-1000}79 - TZ=${TZ:-UTC}80 volumes: 81 - ./smokeping/config:/config82 - smokeping_data:/data8384volumes: 85 librenms_data: 86 librenms_db_data: 87 smokeping_data: .env Template
.env
1# Network Monitoring Stack2LIBRENMS_PORT=80003OXIDIZED_PORT=88884SMOKEPING_PORT=808156# Database7DB_PASSWORD=librenms_password8DB_ROOT_PASSWORD=root_password910# User/Group11PUID=100012PGID=100013TZ=UTCUsage Notes
- 1LibreNMS at http://localhost:8000
- 2Smokeping (latency graphs) at http://localhost:8081
- 3Oxidized (config backup) at http://localhost:8888
- 4Add network devices in LibreNMS via SNMP
- 5Configure Oxidized to backup device configs
- 6LibreNMS auto-discovers devices on the network
Individual Services(6 services)
Copy individual services to mix and match with your existing compose files.
librenms
librenms:
image: librenms/librenms:latest
container_name: librenms
restart: unless-stopped
ports:
- ${LIBRENMS_PORT:-8000}:8000
environment:
- TZ=${TZ:-UTC}
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- DB_HOST=librenms-db
- DB_NAME=librenms
- DB_USER=librenms
- DB_PASSWORD=${DB_PASSWORD}
- REDIS_HOST=librenms-redis
volumes:
- librenms_data:/data
depends_on:
- librenms-db
- librenms-redis
librenms-dispatcher
librenms-dispatcher:
image: librenms/librenms:latest
container_name: librenms-dispatcher
restart: unless-stopped
environment:
- TZ=${TZ:-UTC}
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- DB_HOST=librenms-db
- DB_NAME=librenms
- DB_USER=librenms
- DB_PASSWORD=${DB_PASSWORD}
- REDIS_HOST=librenms-redis
- SIDECAR_DISPATCHER=1
volumes:
- librenms_data:/data
depends_on:
- librenms
librenms-db
librenms-db:
image: mariadb:10.11
container_name: librenms-db
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
- MYSQL_DATABASE=librenms
- MYSQL_USER=librenms
- MYSQL_PASSWORD=${DB_PASSWORD}
volumes:
- librenms_db_data:/var/lib/mysql
librenms-redis
librenms-redis:
image: redis:7-alpine
container_name: librenms-redis
restart: unless-stopped
oxidized
oxidized:
image: oxidized/oxidized:latest
container_name: oxidized
restart: unless-stopped
ports:
- ${OXIDIZED_PORT:-8888}:8888
volumes:
- ./oxidized:/home/oxidized/.config/oxidized
depends_on:
- librenms
smokeping
smokeping:
image: lscr.io/linuxserver/smokeping:latest
container_name: smokeping
restart: unless-stopped
ports:
- ${SMOKEPING_PORT:-8081}:80
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-UTC}
volumes:
- ./smokeping/config:/config
- smokeping_data:/data
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 librenms:5 image: librenms/librenms:latest6 container_name: librenms7 restart: unless-stopped8 ports:9 - "${LIBRENMS_PORT:-8000}:8000"10 environment:11 - TZ=${TZ:-UTC}12 - PUID=${PUID:-1000}13 - PGID=${PGID:-1000}14 - DB_HOST=librenms-db15 - DB_NAME=librenms16 - DB_USER=librenms17 - DB_PASSWORD=${DB_PASSWORD}18 - REDIS_HOST=librenms-redis19 volumes:20 - librenms_data:/data21 depends_on:22 - librenms-db23 - librenms-redis2425 librenms-dispatcher:26 image: librenms/librenms:latest27 container_name: librenms-dispatcher28 restart: unless-stopped29 environment:30 - TZ=${TZ:-UTC}31 - PUID=${PUID:-1000}32 - PGID=${PGID:-1000}33 - DB_HOST=librenms-db34 - DB_NAME=librenms35 - DB_USER=librenms36 - DB_PASSWORD=${DB_PASSWORD}37 - REDIS_HOST=librenms-redis38 - SIDECAR_DISPATCHER=139 volumes:40 - librenms_data:/data41 depends_on:42 - librenms4344 librenms-db:45 image: mariadb:10.1146 container_name: librenms-db47 restart: unless-stopped48 environment:49 - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}50 - MYSQL_DATABASE=librenms51 - MYSQL_USER=librenms52 - MYSQL_PASSWORD=${DB_PASSWORD}53 volumes:54 - librenms_db_data:/var/lib/mysql5556 librenms-redis:57 image: redis:7-alpine58 container_name: librenms-redis59 restart: unless-stopped6061 oxidized:62 image: oxidized/oxidized:latest63 container_name: oxidized64 restart: unless-stopped65 ports:66 - "${OXIDIZED_PORT:-8888}:8888"67 volumes:68 - ./oxidized:/home/oxidized/.config/oxidized69 depends_on:70 - librenms7172 smokeping:73 image: lscr.io/linuxserver/smokeping:latest74 container_name: smokeping75 restart: unless-stopped76 ports:77 - "${SMOKEPING_PORT:-8081}:80"78 environment:79 - PUID=${PUID:-1000}80 - PGID=${PGID:-1000}81 - TZ=${TZ:-UTC}82 volumes:83 - ./smokeping/config:/config84 - smokeping_data:/data8586volumes:87 librenms_data:88 librenms_db_data:89 smokeping_data:90EOF9192# 2. Create the .env file93cat > .env << 'EOF'94# Network Monitoring Stack95LIBRENMS_PORT=800096OXIDIZED_PORT=888897SMOKEPING_PORT=80819899# Database100DB_PASSWORD=librenms_password101DB_ROOT_PASSWORD=root_password102103# User/Group104PUID=1000105PGID=1000106TZ=UTC107EOF108109# 3. Start the services110docker compose up -d111112# 4. View logs113docker compose logs -fOne-Liner
Run this command to download and set up the recipe in one step:
terminal
1curl -fsSL https://docker.recipes/api/recipes/network-monitoring-stack/run | bashTroubleshooting
- SNMP timeout errors during device discovery: Verify SNMP community strings, check firewall rules allowing UDP 161, and ensure devices have SNMP enabled
- LibreNMS shows 'DB connection failed': Wait for MariaDB container to fully initialize (can take 2-3 minutes on first run), check DB_PASSWORD environment variable matches
- Oxidized failing to backup configurations: Verify SSH/Telnet credentials in oxidized config, ensure devices allow management connections from Docker host IP
- Smokeping graphs not generating data: Check ICMP is not blocked by host firewall, verify target hosts in smokeping config are reachable via ping
- LibreNMS dispatcher not processing jobs: Restart librenms-dispatcher container, check Redis connectivity, verify proper file permissions on librenms_data volume
- Web interface loading slowly or timing out: Increase PHP memory limits in LibreNMS container, check if polling intervals are too aggressive for network size
Community Notes
Loading...
Loading notes...
Download Recipe Kit
Get all files in a ready-to-deploy package
Includes docker-compose.yml, .env template, README, and license
Components
librenmsoxidizedsmokepingmariadbredis
Tags
#librenms#snmp#network#oxidized#smokeping#monitoring
Category
Monitoring & ObservabilityAd Space
Shortcuts: C CopyF FavoriteD Download