Back to Blog
Observability

A minimal observability stack for a one-person Kubernetes cluster

You do not need Datadog. You need three signals — metrics, logs, traces — and a dashboard that fits on one screen. Here is the stack I run for under $5 of compute.

A minimal observability stack

Most observability advice is written for teams with budgets. Here's what actually works when you're one person with a single VPS.

The three signals

  1. Metrics — Prometheus scraping every 15s. node-exporter for system metrics, the apps expose /metrics themselves.
  2. Logs — structured JSON to stdout, captured by PM2, shipped to Loki via promtail.
  3. Traces — OpenTelemetry SDK in each app, exporting to Tempo. Sampled at 10% because storage is the limit.

Grafana ties them together. One dashboard with all three signals correlated by trace_id.

What I cut

  • No APM agent. The metrics from the runtime are enough.
  • No synthetic monitoring. The smoke tests in CI/CD cover deploy-time. For live monitoring, real user traffic is the heartbeat.
  • No error tracking SaaS. Errors are logs with level=error. Grafana alerts on the log rate.
  • No managed Prometheus. Self-hosted, single replica, 7-day retention. If it dies, I lose 7 days of metrics. That's fine for a personal lab.

What I would add if this were prod

  • Long-term metrics storage (Thanos or Mimir)
  • A second alerting channel (currently just one Slack webhook)
  • Synthetic monitoring of the auth flow (the highest-value thing to know is broken)

But for a personal project, the minimal stack catches everything I actually need to act on, costs nothing extra, and forces me to keep the alerts honest — every false positive wakes me up.

Implement These Best Practices Today

Our templates include all the patterns described in this article, ready to deploy.

View Templates