Network Monitoring with Prometheus & SNMP Exporter in the Homelab

Why SNMP Exporter instead of LibreNMS?

Anyone who’s done network monitoring before knows the usual suspects: Nagios, Zabbix, LibreNMS. These tools come with everything — SNMP discovery, device inventory, maps, alerting — but also their own database, their own visualization layer, and their own operational overhead.

In a homelab that already runs Prometheus, Grafana, and Loki, there’s little reason to add LibreNMS on top. The Prometheus SNMP Exporter fits seamlessly into an existing stack: it’s a single container that accepts SNMP queries and returns them as Prometheus metrics.

In this post I’ll walk through how I’m monitoring OPNsense, a Ruckus R720 AP, managed switches, Proxmox nodes, and a Brother printer with it.


Preparing devices: enabling SNMP

OPNsense

Go to Services → SNMP: enable the service, set a community string (e.g. homelab), bind to the LAN interface.

Ruckus R720

In the web UI under System → SNMP: enable SNMPv2c, enter the community string.

Proxmox nodes

On each node in the shell:

Edit /etc/snmp/snmpd.conf:

Managed switch & Brother printer

Varies by vendor — enable SNMP in the management UI and set the community string. On the Brother DCP-L8410CDW the option is under Network → Protocol → SNMP.


Docker Compose (Dockge)

Place snmp.yml in the same directory as the compose file.


snmp.yml — configuration

The official snmp.yml from the repository ships with ready-made modules for hundreds of device types and is the recommended starting point:

For a leaner custom config (compatible with snmp_exporter v0.26+):

Note on the Brother page counter: OIDs under 1.3.6.1.4.1.2435 are model-specific. The best way to find the right one for your printer is to run snmpwalk -v2c -c homelab <IP> 1.3.6.1.4.1.2435 and look for a counter that increments with each print job. The standard Printer-MIB (1.3.6.1.2.1.43) is model-independent and reliably covers toner levels.


Prometheus scrape config


Testing it

Once the container is running, query a device directly to verify everything works:

You should see Prometheus-formatted metrics. An empty response usually means a firewall issue — UDP 161 needs to be open from the exporter host to the target devices.


Grafana dashboards

Ready-made dashboards on grafana.com that work with these metrics out of the box:

  • 11169 — SNMP interface monitoring (generic)
  • 21491 — OPNsense
  • 10347 — Proxmox (SNMP)

For the printer, a simple hand-built dashboard works well — toner colors come through as labels directly from the SNMP walk.


Wrap-up

The SNMP Exporter is the leanest way to bring network devices into an existing Prometheus/Grafana stack. No extra database backend, no separate web UI — just one exporter container and a few lines of config. If you already have the stack running, it’s a much cleaner solution than standing up LibreNMS or Zabbix alongside it.

Ubuntu 24.04 Server Quick Start: Sudo User, SSH Hardening, fail2ban, Docker and Dockge

Every time I spin up a new Ubuntu server I go through the same handful of steps before anything else touches it. This post is that checklist, written down so I (and hopefully you) don’t have to piece it together again. It assumes a fresh Ubuntu 24.04 LTS install where your SSH public key is already in place for the initial login.

Throughout the post I use youruser as the new account name and 2222 as the new SSH port. Replace both with your own values.

Golden rule: keep your current SSH session open the whole time and test every change from a second terminal. That way a typo never locks you out.

Read more

Rome / Milan CPUs

Processor Model Codename Cores/Threads Base Frequency Max Boost Frequency TDP (W) L3 Cache (MB) Approximate Used Price (USD)
EPYC 7F32 Rome 8/16 3.7 GHz 3.9 GHz 180 128 $198
EPYC 7F52 Rome 16/32 3.5 GHz 3.9 GHz 240 256 $315
EPYC 7F72 Rome 24/48 3.2 GHz 3.7 GHz 240 192 $469
EPYC 7302P Rome 16/32 3.0 GHz 3.3 GHz 155 128 $149
EPYC 7402P Rome 24/48 2.8 GHz 3.35 GHz 180 128 $192
EPYC 7502P Rome 32/64 2.5 GHz 3.35 GHz 180 128 $210
EPYC 7702P Rome 64/128 2.0 GHz 3.35 GHz 200 256 $695
EPYC 7742 Rome 64/128 2.25 GHz 3.4 GHz 225 256 $749
EPYC 7313P Milan 16/32 3.0 GHz 3.7 GHz 155 128 $850
EPYC 7443P Milan 24/48 2.85 GHz 4.0 GHz 200 128 $1,337
EPYC 7502P Milan 32/64 2.5 GHz 3.35 GHz 180 128 $1,575
EPYC 7702P Milan 64/128 2.0 GHz 3.35 GHz 200 256 $1,995
EPYC 7763 Milan 64/128 2.45 GHz 3.5 GHz 280 256 $7,890
EPYC 73F3 Milan 16/32 3.5 GHz 4.0 GHz 240 256 $1,688.88
EPYC 74F3 Milan 24/48 3.2 GHz 4.0 GHz 240 256 $2,268
EPYC 7C13 Milan 64/128 2.0 GHz — 240 256 $818.80

Proxmox – GPU Passthrough / Plex LXC

Gute Anleitung hier, jedoch funktionierte es noch nicht.

Fehler gab es bei den Zahlen in der cgroup2 config.

Aktuelle Version (06.01.2025) – https://download.nvidia.com/XFree86/Linux-x86_64/550.142/

Weitere URL für das Archiv – https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa

URL des Proxmox Helper Scripts – https://community-scripts.github.io/ProxmoxVE/scripts?id=plex

Read more

Proxmox – error bei Anlage eines neuen LXC Container: unable to create session key: disk quota exceeded: unknown

Viele Container bereits deployed. Docker ließ sich nicht starten.

Edit: detailliertere Lösung: https://gkellynavarro.com/blog/2020/04/04/container-issues/

Restoring a 2017 Redmine backup into Redmine 5.0.2 (Docker)

Update 2026: this setup has since been upgraded to Redmine 6.1 on PostgreSQL 15, and the permission workaround below is no longer needed. See Upgrading a neglected Redmine: PostgreSQL 9.6 → 15 and Redmine 5.0 → 6.1 in Docker.

I had an old Redmine backup from 2017 lying around and wanted it running again on a current system. This is a quick record of how I restored it with the sameersbn Docker images, and the permission problem that kept getting in the way.

Read more