Episode ini membuat kualitas layanan terukur: mendefinisikan SLI dan SLO untuk trafik HAProxy, menyusun alerting berbasis error rate, latensi, dan saturasi sumber daya, serta menulis runbook untuk insiden trafik dan failover.

Metrik tanpa target hanyalah angka. Episode 21 memberi angka-angka itu makna melalui SLO (Service Level Objectives) dan SLI (Service Level Indicators), lalu menghubungkannya ke alerting dan runbook.
Kalian akan mendefinisikan SLI untuk trafik HAProxy, menyusun aturan alert untuk error rate, latensi, dan saturasi, serta menulis runbook yang membuat insiden trafik bisa ditangani dengan tenang.
SLI adalah pengukuran kualitas yang dipilih. Untuk trafik HTTP melalui HAProxy, SLI yang paling umum:
Rumus availability dalam PromQL:
1 - (
sum(rate(haproxy_frontend_http_responses_total{code=~"5.."}[5m]))
/
sum(rate(haproxy_frontend_http_requests_total[5m]))
)Rumus di atas menghitung proporsi respons 5xx terhadap total request dalam 5 menit. Kode code=~"5.." memakai label matcher untuk mengambil semua respons 5xx.
SLO menetapkan target pada SLI:
Prinsipnya: SLO harus realistis dan disepakati bersama tim serta pemilik layanan. Jangan menetapkan target yang membuat tim malu untuk mengakuinya.
Visualkan SLO dengan panel Grafana: bagan waktu untuk error rate dan garis target SLO. Ketika kurva mendekati garis, kalian sedang menghabiskan error budget.
Alert harus membangunkan manusia hanya saat benar-benar perlu:
groups:
- name: haproxy.rules
rules:
- alert: HighErrorRate
expr: |
sum(rate(haproxy_frontend_http_responses_total{code=~"5.."}[5m]))
/ sum(rate(haproxy_frontend_http_requests_total[5m])) > 0.05
for: 10m
labels:
severity: critical
annotations:
summary: "Error rate melebihi 5 persen selama 10 menit"for: 10m memastikan alert hanya menyala jika kondisi bertahan 10 menit, menghindari alarm palsu dari lonjakan sesaat. Severity critical menandakan tindakan segera.
Dua kategori berikutnya:
groups:
- name: haproxy.latency
rules:
- alert: HighLatency
expr: |
histogram_quantile(0.95,
rate(haproxy_frontend_http_request_duration_seconds_bucket[5m])) > 0.5
for: 15m
labels:
severity: warning
- alert: ConnSaturation
expr: haproxy_frontend_current_sessions / haproxy_frontend_max_sessions > 0.9
for: 10m
labels:
severity: warninghistogram_quantile(0.95, ...) > 0.5 memicu alert jika 95 persen request lebih lambat dari setengah detik. ConnSaturation menyala ketika penggunaan koneksi mendekati batas maxconn.
Tidak semua peringatan harus membangunkan:
Pembagian ini menjaga tim tetap responsif tanpa kelelahan alert.
Runbook adalah langkah berurutan yang sudah teruji. Contoh untuk node HAProxy mati:
journalctl -u haproxy dan systemctl status haproxy.ip addr show.systemctl status haproxy --no-pager
ip addr show eth0 | grep 10.0.0.10
curl -s -o /dev/null -w "%{http_code}\n" http://10.0.0.10/systemctl status haproxy --no-pager memastikan kondisi proses sebelum bertindak, dan curl ... http://10.0.0.10/ mengonfirmasi layanan masih hidup lewat VIP.
Saat error rate melonjak karena trafik:
maxconn, CPU backend.Ketika backend menghilang karena service discovery:
dig users-svc.internal.show servers state.resolvers dan hold valid sesuai.Runbook yang tidak diuji adalah omong kosong. Praktik yang menjaga runbook tetap relevan:
curl -s -o /dev/null -w "%{http_code}\n" http://localhost/ curl -s -o /dev/null -w "%{http_code}\n" adalah cara tercepat memverifikasi kesehatan saat melakukan drill atau insiden nyata.
Episode 21 mengubah metrik menjadi janji yang terukur: SLI yang dipilih dengan sadar, SLO yang disepakati, alerting yang disaring agar tidak bising, dan runbook yang membuat insiden menjadi rutinitas yang bisa dieksekusi.
Inti yang harus dibawa pulang:
for untuk menghindari alarm palsu.Di episode 22 selanjutnya, episode terakhir, kita akan membahas production hardening & best practices — checklist produksi untuk keamanan, ketersediaan, observability, dan kesiapan operasional, strategi disaster recovery dan backup konfigurasi, serta cara mendokumentasikan konvensi dan batas dukungan.