Skip to content
harry-suryapambagya
Back to blog

Observability stack murah: Grafana + Loki + Tempo di VPS $5

Setup observability lengkap (metrics + logs + traces) untuk side project, tanpa tagihan SaaS yang bikin deg-degan.

2 min read
On this page5 sections

Tagihan Datadog buat side project bisa melampaui biaya infrastruktur itu sendiri. Kalau kamu sekedar pengen tau “kenapa endpoint ini lambat” atau “apakah ada error yang lolos”, kamu nggak butuh platform seharga mobil.

Setup yang aku pakai di VPS $5/bulan — Grafana + Loki + Tempo + Prometheus — cukup buat semua pertanyaan operasional harian.

Komponen

  • Grafana — UI untuk visualisasi semuanya.
  • Prometheus — metrics (CPU, memory, request rate, latency).
  • Loki — logs (lightweight, indeks lewat labels saja).
  • Tempo — distributed tracing (OTel-compatible).
  • Promtail / Alloy — agent yang push logs dari app ke Loki.

Semua Grafana Labs, semua open source, dan yang paling penting: semua jalan nyaman di 2 GB RAM.

docker-compose

services:
grafana:
image: grafana/grafana-oss:latest
ports: ["3000:3000"]
volumes:
- grafana-data:/var/lib/grafana
- ./provisioning:/etc/grafana/provisioning:ro
environment:
GF_SECURITY_ADMIN_PASSWORD: __file:/run/secrets/grafana_admin
secrets: [grafana_admin]
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prom-data:/prometheus
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.retention.time=15d"
loki:
image: grafana/loki:latest
volumes:
- ./loki-config.yml:/etc/loki/config.yml:ro
- loki-data:/loki
command: -config.file=/etc/loki/config.yml
tempo:
image: grafana/tempo:latest
volumes:
- ./tempo-config.yml:/etc/tempo.yml:ro
- tempo-data:/var/tempo
command: -config.file=/etc/tempo.yml
volumes:
grafana-data: {}
prom-data: {}
loki-data: {}
tempo-data: {}
secrets:
grafana_admin:
file: ./secrets/grafana_admin.txt

Retention yang realistis

Kebanyakan setup hancur di retention. Default banyak tool punya retention kelewat panjang. Untuk single-node:

SignalRetentionAlasan
Metrics15–30 hariCukup buat grafik weekly & investigasi
Logs7–14 hariPaling boros disk, paling jarang dibutuhkan
Traces3–7 hariHampir selalu kamu butuh yang kemarin

Kalau butuh data lama, export ke object storage (Cloudflare R2, Backblaze B2).

Alerting tanpa Datadog

Prometheus Alertmanager → Slack / Discord / Telegram webhook. Tiga alert yang aku selalu mulai dari sini:

- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05
for: 5m
labels: { severity: page }
- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) < 0.1
for: 10m
- alert: EndpointDown
expr: probe_success == 0
for: 2m

Dari tiga ini aja udah ketangkep 90% masalah yang bakal bikin ke-wake malam.

Kesimpulan

Platform SaaS keren, tapi kamu nggak butuh mereka cuma buat bilang “service ini down”. Untuk blog, side project, atau homelab, stack di atas cukup. Dan yang paling penting: kamu tau apa yang berjalan di bawahnya.