Monitoring
Infrastructure Monitoring & Alerting Plan
Executive Summary
This document establishes the architecture, service inventory, and phased rollout plan for comprehensive telemetry, uptime monitoring, and alerting across the self-hosted infrastructure (ul.drheck.dev) and external nodes (rng.drheck.dev).
1. Current Infrastructure Inventory
Primary Host (ul.drheck.dev)
- Hardware: AMD Ryzen Threadripper PRO 5955WX (16 Cores / 32 Threads), 128 GB RAM, 468 GB NVMe (
/) with extensive storage pools mounted under/data. - Edge Proxy: Nginx reverse proxy with SSL termination and domain routing for
*.drheck.dev. - Rootless Podman Quadlet Fleet (
docker-data,/home/docker-data/.config/containers/systemd/):- Identity & Security: Authentik (Server, Worker, LDAP), Vaultwarden, Step-CA, Webshell.
- Media, AI & Gaming: Immich (Server + ROCm ML), Funkwhale, Navidrome, RomM (+ MariaDB), Sopro TTS, Demucs Stem Splitter, SubOCR (ROCm MIGraphX).
- Productivity & Docs: Nextcloud + Collabora CODE, BookStack (+ MariaDB), Penpot (Frontend, Backend, Exporter, Postgres, Redis), Vikunja, WIPStudio (+ MinIO).
- Infrastructure & Web Apps: Anchor, Grill Monitor, YOURLS (+ MariaDB), SControl, DeGoog, AudioMass, BentoPDF, Drawpile, Excalidraw, TLDraw, WebRcade, Wick.
- Native Systemd Services: Nginx, HAProxy, Unbound, PostgreSQL, Valkey, Ollama, Forgejo, Jellyfin, Plex Media Server, Kavita, Minecraft (
mc-manager+minecraft@*), Transmission-daemon, CrowdSec, Kanji, Sunshine + Gamescope.
External VPS (rng.drheck.dev)
- Hardware: Debian 12 (1 GB RAM, 16 GB available on
/homestorage mount). - Role: Off-site canary sentinel, external HTTP/SSL prober, and out-of-band alert dispatcher.
2. Monitoring Architecture & Topology
┌───────────────────────────────────────────┐
│ Off-Site VPS (rng.drheck.dev) │
│ - Uptime Kuma (Blackbox & SSL Prober) │
│ - External WAN/DNS/Port Health Probes │
│ - Independent Alert Routing (ntfy/Pushover)│
└─────────────────────┬─────────────────────┘
│ Probes *.drheck.dev (HTTPS/IPv6/IPv4)
▼
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ Primary Host (ul.drheck.dev) │
│ │
│ [ Telemetry Exporters ] │
│ ├── node_exporter (Host CPU, RAM, NVMe I/O, Network, Systemd) │
│ ├── cAdvisor (Per-container CPU, Memory, Network, Restart Loops) │
│ ├── nginx-prometheus (Request rates, 4xx/5xx error spikes, upstream latencies) │
│ ├── postgres_exporter (DB connections, query latency, lock monitoring) │
│ └── smartctl_exporter (NVMe wear, drive temperatures, hardware health) │
│ │
│ [ Time-Series Storage & Dashboards ] │
│ ├── VictoriaMetrics (High-efficiency TSDB, low memory footprint, PromQL) │
│ └── Grafana (Unified dashboards & visual panels) │
│ │
│ [ Alert Engine ] │
│ └── Alertmanager (Routes internal metrics -> Telegram / ntfy / Matrix) │
└────────────────────────────────────────────────────────────────────────────────────────┘
3. Core Component Roles
A. External Canary (Uptime Kuma on rng)
- Purpose: Detects total site loss, ISP drops, power outages, and certificate expiration before users notice.
- Why
rng: Becauserngis outside the local network, it accurately detects external DNS, IPv6 routing, and gateway failures that local monitors cannot detect. - Configuration: Probes all public subdomains (
wiki.drheck.dev,auth.drheck.dev,immich.drheck.dev,cloud.drheck.dev, etc.) on 60-second intervals.
B. Host & Container Telemetry (VictoriaMetrics + cAdvisor + Exporters on ul)
- VictoriaMetrics: Selected over standard Prometheus due to its significantly lower memory footprint, superior compression for NVMe endurance, and drop-in PromQL compatibility.
- cAdvisor / Podman Exporter: Continuously monitors all 41 rootless Podman containers (
user@1100.servicecgroup hierarchy), capturing CPU throttling, memory leaks, and container restart loops. - node_exporter: Monitors host-level thread saturation, memory usage, network interfaces (
eth77), and disk utilization across mounts.
C. Unified Visualization (Grafana on ul)
- Preconfigured Dashboards:
- Host Overview: 32-thread CPU load, RAM allocation, NVMe I/O, network throughput.
- Rootless Podman Fleet: Container status, memory limits, restart counters, per-service resource breakdown.
- Web Traffic & Edge: Nginx request rates, response latency percentiles (p95/p99), HTTP status distribution (2xx/3xx/4xx/5xx).
- Database Health: PostgreSQL and MariaDB active connections, buffer hits, query response times.
4. Phased Rollout Plan
Phase 1: External Sentinel (rng.drheck.dev)
- Deploy Uptime Kuma under
/home/luke/docker/uptime-kumaonrngusing rootless Podman. - Configure HTTP(s), TCP, and SSL certificate monitors for all public services on
drheck.dev. - Configure notification webhooks (e.g. ntfy.sh, Telegram, or Gotify) for instant push alerts to mobile devices.
Phase 2: Exporter Deployment (ul.drheck.dev)
- Deploy
node_exporteras a native systemd unit or container (listening on127.0.0.1:9100). - Deploy
prometheus-podman-exporter/cAdvisoras a rootless Podman Quadlet reading/run/user/1100/podman/podman.sockand/sys/fs/cgroup. - Add
smartctl_exporterfor continuous NVMe drive telemetry.
Phase 3: Time-Series DB & Grafana Stack (ul.drheck.dev)
- Create rootless Podman Quadlets under
/data/docker/monitoring/linked into/home/docker-data/.config/containers/systemd/with:victoriametrics(TSDB storage)grafana(Dashboard UI)vmagentor Prometheus scraping configuration
- Configure scrape jobs for
node_exporter,cAdvisor, Nginx metrics, and database exporters. - Expose Grafana behind Nginx at
monitor.drheck.dev(secured with Authentik SSO).
Phase 4: Alert Rules & Thresholds
Define critical alert rules in VictoriaMetrics / Alertmanager:
- Disk Space: Warning at >80% utilization; Critical at >90% on
/or any/datamount. - Service Outage: Any service unreachable for > 2 probe cycles (120s).
- Container Crashes: Container restart count > 3 in a 10-minute window.
- Host Resource Saturation: RAM available < 10% or continuous high load average.
- SSL Certificates: Alert if certificate validity < 14 days remaining.
Phase 5: Verification & Drills
- Perform synthetic service termination drill (e.g. test container stop) to verify alert firing and recovery notification.
- Verify dashboard graphs and metric retention policies.