Datadog wanted $1,500/month for my setup. I rebuilt my monitoring stack with open-source tools for $0. Here's what I use.
The Datadog bill
I run a small production setup (12 services, ~20 hosts, 50 GB of metrics/day). Datadog's pricing is per-host and per-GB-ingested. With my volume, the bill was:
- Infrastructure: $0.10/host × 20 = $2/day
- APM: $31/host/month × 12 = $372/month
- Logs: $0.10/GB × 50 GB/day × 30 = $150/month
- Custom metrics: ~$300/month
- Synthetics: ~$100/month
- Total: ~$900/month, peaked at $1,500 when I enabled APM
For a side project. Out of the question.
What I replaced it with
Metrics: Prometheus + Grafana
Prometheus scrapes metrics from my services (Node Exporter for hosts, app-specific exporters for apps). Grafana visualizes.
Setup:
- Single VM with 4 GB RAM
- Prometheus ~1 GB RAM for 50 GB/day
- Grafana ~200 MB
- 30-day retention
For long-term storage I use Thanos with S3 backend. Costs about $5/month in S3 storage.
Logs: Loki + Grafana
Loki is "Prometheus but for logs" — it doesn't index log content, just labels. Way cheaper than Elasticsearch.
Each service ships logs via Promtail (Loki's agent). I store about 20 GB/day of logs. Total disk usage: ~600 GB with 30-day retention.
Setup time: 30 min.
Uptime monitoring: Uptime Kuma
Self-hosted status page. Pings every 5 minutes, alerts via email/Discord/Telegram on failure.
I run it on the same VM as Prometheus. Tiny footprint.
APM: SigNoz (OpenTelemetry-based)
For one service I need distributed tracing. SigNoz is a Datadog APM alternative. It's OpenTelemetry-native, so any OTel-instrumented service works.
Currently I have it tracking my main API. Dashboard shows p50/p95/p99 latencies, request counts, error rates.
Setup time: ~1 hour.
Alerting: Alertmanager + PagerDuty (free for 5 users)
Alertmanager comes for free with Prometheus. I route alerts to Discord (free), email (free), and PagerDuty free tier for things that wake me up.
My setup
┌──────────────┐ VMs ────────────▶│ Prometheus │ Containers ────▶│ │──┐ Apps ──────────▶│ │ │ └──────────────┘ │ ▼ ┌──────────────┐ ┌──────────────┐ │ Loki │ │ Grafana │ │ (logs) │─────────────▶│ (dashboards) │ └──────────────┘ └──────────────┘ ▲ │ │ ▼ ┌──────────────┐ ┌──────────────┐ │ Promtail │ │ Alertmanager │ └──────────────┘ └──────────────┘ │ ▼ Discord/Email Cost comparison
| Datadog | My setup | |
|---|---|---|
| Metrics | $300/mo | $5/mo (S3) |
| Logs | $150/mo | $5/mo (S3) |
| APM | $372/mo | $0 |
| Uptime | $100/mo | $0 |
| Total | ~$900/mo | ~$10/mo |
Plus: data never leaves my servers.
What I gave up
Honestly, a few things:
- Managed reliability: Datadog's infrastructure is rock solid. Self-hosted Prometheus can fail.
- Auto-instrumentation: Datadog's agents instrument apps automatically. With SigNoz I have to add OpenTelemetry SDKs.
- Real-time alerting: Datadog alerts in seconds. My stack alerts in 30-60 seconds.
- Integrations: Datadog has 600+ integrations. My stack has ~30 (Prometheus exporters).
For a small setup, the trade-off is worth it. For a large team, probably not.
What surprised me
- Grafana dashboards are easier to build than Datadog's. Once you know PromQL, you can build anything.
- Loki's "no indexing" approach works surprisingly well for my volume.
- Self-hosted monitoring is more work than I expected but less than I feared.
Should you self-host monitoring?
Self-host if:
- You're under $500/month on Datadog currently
- You have 1+ engineer with Prometheus experience
- You can tolerate a few hours of setup time per service
- You care about data ownership
Don't self-host if:
- You're a large team with APM needs beyond 5 services
- You need 24/7 on-call alerting with paging
- You don't have time to learn PromQL/Loki
Tips for getting started
- Start with just Prometheus + Grafana. Skip logs and APM initially.
- Use kube-prometheus-stack if you're on Kubernetes. Skip if not.
- Learn PromQL. It's not SQL. 30 min of tutorials gets you 80%.
- Import community dashboards from grafana.com. Don't build from scratch.
- Alert on symptoms, not causes. Page on "p99 > 500ms" not "CPU > 90%".
The monitoring stack is now genuinely good enough to replace Datadog for small teams. Try it before paying your maintenance fee.
