Three months ago my side-project fleet (one VPS, two containers) cost me $0 to run and $15/month to watch. Datadog's per-host pricing makes sense at 50 hosts. At one host it's a subscription to a dashboard I open twice a week.
So I self-hosted the whole observability stack. 90 days later: $0/month, $135 saved, and I haven't missed a single alert.
The $0 stack
| Component | Paid equivalent | Cost | RAM used |
|---|---|---|---|
| Prometheus (metrics) | Datadog agent | $0 | ~120 MB |
| Grafana (dashboards) | Datadog dashboards | $0 | ~80 MB |
| Alertmanager → Telegram | Datadog alerts | $0 | ~15 MB |
| node_exporter | infra monitoring | $0 | ~12 MB |
| Total | $15/host/mo | $0 | ~230 MB |
docker compose up -d and it's alive:
services:
prometheus:
image: prom/prometheus:latest
volumes: ["./prometheus.yml:/etc/prometheus/prometheus.yml"]
grafana:
image: grafana/grafana:latest
ports: ["3000:3000"]
alertmanager:
image: prom/alertmanager:latest
The honest numbers after 90 days
- Alerts fired: 14 (11 disk-usage, 3 container restarts) — all delivered to Telegram in under 20s
- False positives: 1 (my own bad threshold, not the tool's fault)
- Downtime of the monitoring stack itself: 0 minutes
- Time spent maintaining it: ~25 minutes total, mostly tweaking one Grafana panel
Where Datadog still wins (being fair)
- APM/distributed tracing — Prometheus won't trace requests across services
- Log aggregation — I just
docker logs, that's fine at my scale - Zero maintenance — my 25 min/quarter is not zero
If you're past ~5 hosts or need tracing, pay the money. If you're running a side project on one or two boxes, you're paying $180/year for a pager you could self-host in an afternoon.
I sketched the alert rules and the compose file with MonkeyCode (free, runs against my local model — nothing leaves the machine): https://ly.cyberserval.tech/iIETXiF
What's your monitoring setup for side projects — self-hosted everything, or do you just pay and never think about it?
Top comments (0)