Episode ini membahas definisi SLI untuk ingress dan routing, pembuatan runbook untuk kegagalan dan perubahan route, serta pola on-call untuk operasional gateway yang siap produksi.

Gateway yang bekerja tanpa target yang jelas sulit dievaluasi. Episode 21 membahas SLOs, runbooks, dan operational readiness: mendefinisikan SLI untuk ingress dan routing, membuat runbook untuk menangani kegagalan serta perubahan route, dan membangun pola on-call yang sehat.
Semua metrik dari episode 7 dan 20 sekarang dirangkai menjadi janji layanan yang terukur dan dipahami seluruh tim.
SLI dimulai dari pertanyaan sederhana: bagaimana tim tahu layanan sedang baik atau buruk? Untuk gateway, jawabannya biasanya dua angka: availability dan latensi.
sum(rate(multigress_http_requests_total{status!~"5.."}[28d]))
/ sum(rate(multigress_http_requests_total[28d]))Query di atas menghitung proporsi request yang tidak mengembalikan status 5xx selama 28 hari. status!~"5.." mengecualikan semua error server dari pembilang.
SLO menetapkan angka target untuk SLI, dan error budget adalah sisa yang bisa dikorbankan. Untuk SLO availability 99.9 persen per bulan, budget error hanya sekitar 43 menit. Pantau burn rate dengan alert sehingga tim tahu saat budget terkikis cepat.
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: multigress-slo
namespace: monitoring
spec:
groups:
- name: gateway-slo
rules:
- alert: ErrorBudgetBurn
expr: |
(1 - (sum(rate(multigress_http_requests_total{status=~"5.."}[1h]))
/ sum(rate(multigress_http_requests_total[1h]))))
< 0.99
for: 15m
labels:
severity: pageAlert ErrorBudgetBurn menyala saat availability satu jam turun di bawah 99 persen selama 15 menit. Burn rate yang tinggi berarti budget bulanan terkikis cepat dan harus segera ditangani.
Runbook menghapus tebakan saat insiden. Struktur yang konsisten memudahkan siapa pun memakainya, bahkan di tengah malam:
Salah satu insiden umum adalah status 429 melonjak tiba-tiba. Runbook untuk kasus ini berisi dua langkah diagnosis singkat.
kubectl get backendtrafficpolicy -A
kubectl logs -n multigress-system -l app=multigress-gateway --tail=200Perintah kubectl get backendtrafficpolicy -A memeriksa policy yang aktif, lalu log terakhir memberi petunjuk apakah 429 berasal dari rate limit atau dari aplikasi. Runbook menutup dengan langkah mitigasi: menaikkan rps sementara atau menambah replica.
On-call yang sehat punya rotasi jelas dan handover tertulis. Sebelum shift berakhir, operator mencatat apa yang sedang berjalan, apa yang mencurigakan, dan apa yang harus dicek shift berikutnya.
Tidak semua alert perlu membangunkan orang. Pisahkan critical yang memanggil on-call dari warning yang cukup masuk channel chat.
routes:
- matchers: ["severity=critical"]
receiver: pagerduty-oncall
- matchers: ["severity=warning"]
receiver: slack-gatewayMatcher severity=critical mengarah ke PagerDuty, sedangkan severity=warning cukup ke Slack. Routing yang disiplin menjaga on-call tidak kelelahan oleh noise.
Info
Runbook tidak berguna jika tidak pernah dibuka. Uji runbook utama saat drill di episode 18 dan perbarui setiap ada perubahan perilaku gateway.
Episode 21 menjadikan operasional gateway bisa diukur dan dipelajari: SLI mendefinisikan kesehatan, SLO menetapkan target dengan error budget, runbook menyiapkan langkah insiden, dan on-call menjaga respons yang sehat.
Inti yang harus dibawa pulang:
Di episode 22 selanjutnya sebagai episode terakhir kita akan membahas production hardening & best practices — security hardening, traffic governance dan configuration hygiene, serta upgrade path dan compatibility check. Seluruh pelajaran series akan dirangkum menjadi checklist produksi.