Observability & Monitoring Fundamentals
Memahami metrik, log, trace, SLI/SLO, golden signals, dan desain alert yang berguna.
Observability adalah kemampuan memahami kondisi sistem dari data yang dihasilkan. Monitoring menjawab “apakah sistem baik-baik saja?”, observability menjawab “mengapa ini terjadi?”.
Tiga pilar
| Pilar | Isi | Menjawab |
|---|---|---|
| Metrics | Angka time-series | Apakah terjadi lonjakan/drop? |
| Logs | Event diskrit | Apa yang terjadi pada request tertentu? |
| Traces | Alur request lintas service | Di mana waktu habis? |
Monitoring vs observability
- Monitoring — kumpulan dashboard dan alert yang sudah diketahui.
- Observability — kemampuan menyelidiki masalah baru tanpa menebak.
Sistem yang baik memiliki keduanya.
Golden signals
| Signal | Arti | Contoh |
|---|---|---|
| Latency | Waktu request | p95, p99 |
| Traffic | Beban | RPS, request count |
| Errors | Kegagalan | 5xx rate, exception |
| Saturation | Kepenuhan resource | CPU, memory, queue |
Empat sinyal ini adalah titik awal dashboard dan alert.
SLI, SLO, SLA
| Istilah | Arti |
|---|---|
| SLI (Indicator) | Metrik yang diukur, mis. persentase request sukses |
| SLO (Objective) | Target internal, mis. 99,9% sukses per 30 hari |
| SLA (Agreement) | Janji ke pelanggan dengan konsekuensi |
Contoh SLO:
99,9% request HTTP sukses (bukan 5xx) selama 30 hari
95% request selesai < 500 msError budget
Jika SLO 99,9%, error budget adalah 0,1% dari total request.
- Budget habis → prioritaskan stabilitas, tahan rilis berisiko.
- Budget tersisa → boleh bereksperimen.
Instrumentasi
Aplikasi harus menghasilkan metrik dan log yang konsisten.
import { Counter, Histogram } from 'prom-client';
const httpRequests = new Counter({
name: 'http_requests_total',
help: 'Total HTTP requests',
labelNames: ['method', 'route', 'status'],
});
const httpDuration = new Histogram({
name: 'http_request_duration_seconds',
help: 'HTTP request duration',
labelNames: ['method', 'route'],
buckets: [0.05, 0.1, 0.25, 0.5, 1, 2.5, 5],
});Log terstruktur
Gunakan JSON agar mudah dicari:
{
"level": "error",
"time": "2026-10-20T10:00:00Z",
"request_id": "abc123",
"route": "/api/orders",
"status": 500,
"message": "database timeout"
}Hindari log berisi password, token, atau data pribadi.
Trace dan correlation ID
Buat request_id di edge, teruskan ke service lain, dan sertakan di log.
const requestId = req.headers['x-request-id'] || crypto.randomUUID();
res.setHeader('x-request-id', requestId);Dengan ID ini, Anda bisa menghubungkan log, trace, dan error.
Dashboard yang baik
- Mulai dari SLO dan golden signals.
- Tampilkan tren, bukan hanya angka saat ini.
- Kelompokkan berdasarkan layanan.
- Sertakan anotasi deploy.
- Jangan membuat dashboard dengan 50 grafik tanpa fokus.
Desain alert
Alert harus actionable. Jika tidak ada tindakan, jangan alert.
| Buruk | Baik |
|---|---|
| CPU > 80% | Error rate > 1% selama 5 menit |
| Disk 70% | Disk penuh < 10% atau 1 jam |
| Satu request lambat | p95 latency > SLO selama 10 menit |
Gunakan multi-window burn rate untuk SLO agar alert tidak berisik.
Alert fatigue
Terlalu banyak alert membuat tim mengabaikan semuanya. Prioritaskan gejala yang berdampak pada pengguna, bukan setiap fluktuasi resource.
Tools umum
| Kebutuhan | Tool |
|---|---|
| Metrics | Prometheus, VictoriaMetrics |
| Visualisasi | Grafana |
| Logs | Loki, ELK, OpenSearch |
| Traces | Tempo, Jaeger, OpenTelemetry |
| Alert | Alertmanager |
| Uptime | Blackbox exporter, Uptime Kuma |
Ringkasan
- Observability dibangun dari metrik, log, dan trace.
- Golden signals dan SLO memberi fokus.
- Instrumentasi dan correlation ID menghubungkan data.
- Alert harus actionable dan berbasis gejala.
Selanjutnya
Pasang stack metrik di Prometheus, Node Exporter & Grafana.