DEV Community

疏影
疏影

Posted on

How I cut my Datadog bill by 90% - the open-source observability stack I switched to

I was paying $1,800/month to Datadog for 40 hosts. Now I pay $0. Here's the open-source stack that replaced it.

What Datadog was costing me

  • 40 hosts × $15/host/month (infrastructure monitoring)
  • 50M custom metrics × $0.05 per 100 = $2,500/month
  • Log management: 50GB/day × $0.10/GB = $1,500/month
  • APM: $31/host/month for 10 hosts = $310/month
  • Total: ~$6,000/month

The metric cost was the killer. Once you exceed 100 custom metrics per host, Datadog's pricing punishes you for actually monitoring things.

My current stack

Metrics: Prometheus + Grafana

Prometheus scrapes node_exporter on each host (CPU, memory, disk, network).
Grafana queries Prometheus for dashboards.

Setup: ~3 hours. Single VM, 2 GB RAM handles my 40 hosts comfortably.
Cost: $0 (one VM at Hetzner: $5/month).

Logs: Loki + Promtail

Loki stores logs, Promtail ships them from each host.
Grafana queries both metrics AND logs in the same UI.

Setup: ~4 hours including Promtail config for journald, docker logs, and a few specific app files.
Cost: $0.

APM: SigNoz

SigNoz replaces Datadog APM. OpenTelemetry instrumentation, distributed tracing, flame graphs.

Setup: ~2 hours (the OpenTelemetry SDK changes were the most painful part).
Cost: $0 self-hosted.

Uptime: Uptime Kuma

Simple ping/HTTP monitoring. Sends Telegram alerts.

Setup: 15 minutes.
Cost: $0.

What I kept paying for

  • Sentry for errors: $26/month. Worth it. The alternative is rolling your own error tracking and I don't have time for that.
  • PagerDuty: $0 (free tier covers my needs).
  • Better Stack for status page: $0 (free tier).

Total cost comparison

  • Before (Datadog + Sentry): $6,000 + $26 = $6,026/month
  • After (self-hosted + Sentry): $5 (VM) + $26 = $31/month
  • Savings: $5,995/month, ~$72,000/year

What I gave up

Honestly, very little. Datadog's UX is nicer than Grafana, but Grafana is good enough. The alert noise is similar.

What I did lose:

  • Auto-instrumentation for some libraries: Had to manually add OpenTelemetry SDK to a few Python services
  • Real-time log streaming: Loki is batch-oriented, ~30 second lag vs Datadog's instant
  • Some managed integrations: Datadog has 600+ integrations out of the box, my stack has ~50

What I gained

  • No per-metric pricing: I can actually monitor everything without paying per metric
  • Predictable cost: $31/month regardless of how much I monitor
  • My data stays on my servers
  • Custom queries: PromQL is more powerful than Datadog's query language for metrics

Migration timeline

  • Week 1: Set up Prometheus + Grafana for infra metrics
  • Week 2: Add Loki + Promtail for logs
  • Week 3: Migrate alerts from Datadog to Alertmanager
  • Week 4: Add SigNoz for APM on the most important services
  • Week 5: Decommission Datadog

About 30 hours total over 5 weeks. The hardest part was getting the team used to Grafana.

When Datadog wins

  • You have 5+ engineers who need polished UX
  • You're a startup that values speed over cost (and your metrics are < 100M)
  • You need enterprise compliance (SOC2, HIPAA) certifications Datadog has
  • You don't want to spend engineering time on observability infra

For a team of 1-5 engineers watching infrastructure carefully, self-host is a no-brainer.

How I run all of this on one machine

Specs:

  • Hetzner CCX13: 4 dedicated vCPU, 16 GB RAM, NVMe SSD
  • Runs: Prometheus + Grafana + Loki + Promtail + SigNoz + Alertmanager + Uptime Kuma
  • RAM usage at idle: 4 GB
  • Disk usage: 200 GB (logs retained 30 days, metrics retained 1 year)
  • Backups: 2x weekly snapshots to B2

This box is the single most cost-effective thing I've ever run.

TL;DR

Replaced $6,000/month Datadog with $5/month VM + open-source stack. Same visibility into infra, logs, and APM. Gave up some UX polish, gained predictable costs and unlimited metrics. Best engineering decision I made last year.

If you want a trial to test out the stack before committing, most of these tools run in Docker Compose in under 30 minutes.

Top comments (0)