Cheap observability on Hetzner
18 July 2025 · 4 min read
- Devops
- Grafana
- NixOS
- Monitoring
The boring stack that works
One Hetzner box, declaratively configured via NixOS:
services.grafana.enable = true;
services.prometheus.exporters.node.enable = true;
services.prometheus.scrapeConfigs = [{
job_name = "node";
static_configs = [{ targets = [ "127.0.0.1:${toString cfg.port}" ]; }];
}]; A short watchlist gets you 90% of value:
- Disk usage — the #1 surprise-incident producer on small servers
- RAM + swap — the #2
- HTTP 5xx rate by vhost — catches upload/deploy breakage
- Backup job success/failure — the metric that saves companies
- Cert expiry — only if you insist on unmanaged TLS, which you shouldn’t
Alerting discipline
Alerts go to one channel. Alert only on conditions needing human action (or a page will train you to ignore pages). Metrics dashboards ≠ alerting.
Cost
Smallest AX-class box runs Prometheus, Loki, Grafana, and a restic backup receiver for ~€4/month. Pair it with the free-tier endpoint pushing via node_exporter and you have real production-grade numbers.
You will check the dashboard less that week, and the fear of checking goes with it. That’s the whole ROI.