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
- Metrics — Prometheus scraping every 15s. node-exporter for system metrics, the apps expose
/metricsthemselves. - Logs — structured JSON to stdout, captured by PM2, shipped to Loki via promtail.
- 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.