Best Homelab Monitoring Stack: Glances, cAdvisor, Prometheus, Grafana, and Uptime Kuma

A homelab without monitoring is just a collection of servers you hope will keep working. The problem most people face is not a lack of tools; it is too many tools that do not talk to each other. CPU usage on Proxmox, Docker container stats, disk space on the NAS, and uptime for public services all end up in different dashboards or worse, in your head.

This guide focuses on a practical monitoring stack using tools that run easily on a homelab server: Glances for per-host metrics, cAdvisor for container metrics, Prometheus for time-series storage, and Grafana for visualization. The goal is a unified view without enterprise complexity.

Start With Glances for Per-Host Monitoring

Glances is a cross-platform system monitoring tool written in Python. It shows CPU, memory, disk, network, and process metrics in a terminal or web interface. Unlike top or htop, Glances automatically detects metrics and works on Linux, macOS, and Windows.

Install Glances with pip or your package manager. Run it in server mode with glances -w to expose a web interface on port 61208. You can query individual metrics with its REST API or push them to Prometheus with the glances-e exporter.

For a quick setup, run Glances on every Proxmox node and LXC container you want to monitor. It is lightweight and does not require a database.

Add cAdvisor for Container Metrics

cAdvisor collects resource usage and performance metrics for running containers. It exposes CPU, memory, filesystem, and network stats in a format Prometheus can scrape.

Deploy cAdvisor as a Docker container. It needs access to the host filesystem and Docker socket, so mount /var/run/docker.sock and /sys and /var/lib/docker as volumes. The default scrape port is 8080.

cAdvisor automatically discovers all containers on the host. It groups metrics by container name and Docker label. If you use Docker Compose, label your services for better grouping in Grafana.

Store Metrics in Prometheus

Prometheus is a time-series database designed for monitoring. It scrapes metrics from Glances, cAdvisor, and other exporters at regular intervals. The data stays local unless you configure remote storage.

Install Prometheus on a dedicated VM or LXC container. Use a minimal prometheus.yml configuration with scrape jobs for Glances and cAdvisor. Set a retention period that matches your storage capacity. Thirty days is usually enough for homelab trend analysis.

Add node_exporter to every host you want to monitor. Node exporter collects hardware and OS metrics: CPU, memory, disk, network, and systemd service status. Prometheus scrapes node exporter on each host, then you can correlate Proxmox node metrics with VM metrics in Grafana.

Visualize in Grafana

Grafana turns Prometheus data into dashboards. You do not need to build dashboards from scratch. Import community dashboards for Glances, cAdvisor, node exporter, and Proxmox. Dashboard IDs 1860, 179, and 10619 are popular starting points.

Create a homelab overview dashboard with panels for:
– CPU usage per Proxmox node
– Memory usage per VM and LXC container
– Disk usage and inode usage
– Network throughput per host and container
– Docker container uptime and restart count
– Alert status for failed services

Set up a second dashboard for application-specific metrics if you run databases, web servers, or media tools.

Alerting With Alertmanager

Grafana alerts are good for simple thresholds. For more complex routing, install Alertmanager alongside Prometheus. Alertmanager groups alerts, silences noisy notifications, and routes messages to email, Telegram, or Discord webhooks.

Define alert rules in Prometheus for critical conditions: disk usage above 85 percent, memory usage above 90 percent, node exporter unreachable for more than five minutes, or a container restarting repeatedly.

Alternative: Uptime Kuma for Service Monitoring

Prometheus and Grafana are great for infrastructure metrics, but they do not tell you if a website or API is actually responding. Uptime Kuma fills that gap with TCP, HTTP, ping, and DNS checks.

Deploy Uptime Kuma as a Docker container. Add monitors for your public services: WordPress sites, Nextcloud, media servers, and VPN endpoints. Uptime Kuma sends notifications to Telegram, Slack, or email when a service goes down.

Stack Comparison

Tool Purpose Resource Usage Best For
Glances Per-host metrics Low Quick server overview
cAdvisor Container metrics Low Docker and Podman stats
Node Exporter Hardware metrics Low Prometheus scrape target
Prometheus Time-series database Medium Historical metrics and alerts
Grafana Visualization Medium Dashboards and reporting
Alertmanager Alert routing Low Notifications and grouping
Uptime Kuma Uptime checks Low HTTP, TCP, and ping monitoring

Deployment Tips

Run Prometheus and Grafana on a dedicated VM with at least 2 CPU cores and 4 GB of RAM. Store Prometheus data on an SSD for faster queries. Use Docker Compose to deploy cAdvisor, Uptime Kuma, and exporters consistently across hosts.

Secure Grafana with authentication and HTTPS behind a reverse proxy. Do not expose Prometheus or Grafana directly to the internet without a VPN or reverse proxy.

Final Thoughts

A good monitoring stack does not need to be perfect on day one. Start with Glances and cAdvisor. Add Prometheus and Grafana when you want historical data. Add Alertmanager and Uptime Kuma when you need alerts. The stack grows with your homelab.

If you want to secure the servers you are monitoring, read our guide on homelab security hardening and Docker networking for homelabs.

Related Posts

Leave a Comment