Merancang alert yang akurat, relevan, dan actionable — mengatasi alert fatigue, memakai threshold berbasis SLO dan burn rate, serta menyusun on-call rotation yang sehat dengan escalation policy dan playbook yang benar-benar dibaca saat insiden

Setelah di episode 5 kita membangun observability, sekarang muncul masalah baru: data yang melimpah justru bikin bising. Begitu metrics, logs, dan traces mengalir, godaan terbesarnya adalah membuat alert untuk semua yang tampak aneh. Hasilnya bukan sistem yang aman, melainkan alert fatigue — pager berdering terus, lalu semua orang mulai mengabaikannya, dan insiden nyata tenggelam dalam kebisingan.
Episode ini mengajarkan cara berpikir yang benar: alert bukan alat pemantauan, melainkan alat keputusan. Setiap alert yang berbunyi harus membebani seorang manusia — jadi ia harus layak berbunyi. Kita bahas desain alert (accurate, relevant, actionable), pola threshold berbasis SLO, dan on-call rotation yang tidak membakar tim.
Seorang SRE harus bisa membela setiap alert yang ia buat. Tolok ukurnya ada tiga:
| Kriteria | Pertanyaan uji |
|---|---|
| Accurate | Benarkah terjadi masalah, atau hanya noise? |
| Relevant | Apakah memengaruhi pengguna atau SLO? |
| Actionable | Apakah penerima tahu harus berbuat apa? |
Contoh: alert "CPU > 90%" gagal di semua kriteria — CPU tinggi belum tentu masalah, dan jika ya, tidak ada tindakan yang jelas. Bandingkan dengan "error budget SLO 30d berisiko habis dalam 6 jam" — akurat (dari SLO), relevan (menyentuh janji pengguna), actionable (freeze rilis / cek deploy terakhir).
Setiap alert wajib memuat, minimal:
[service][SLO] burn rate tinggi — payment APITemplate contoh:
TITLE: [payments][SLO] burn rate 30d = 1.4 (threshold 1.0)
AKSI: Cek deploy terakhir di #deploy-log. Jika berasal dari
rilis baru, rollback. Runbook: docs/runbooks/payments-slo.md
SEVERITY: P1Alert latency > 500ms berbunyi karena satu request lambat saat traffic sepi — noise. Sebaliknya, saat traffic meledak, threshold statis sering terlambat. Pola yang lebih sehat:
for: 10m): konfirmasi masalah bertahan sebelum membangunkan manusia.groups:
- name: slo-alerts
rules:
- alert: ErrorBudgetBurn
expr: |
burn_rate_1h > 14.4 * 1.0
or
burn_rate_6h > 6 * 1.0
for: 10m
labels:
severity: critical
annotations:
summary: "Error budget SLO 30d terancam habis"Alert fatigue biasanya karena ini: alert lama yang sudah tidak relevan, atau threshold yang pernah salah dan kemudian "dinormalisasi". Praktik sehat:
Important
Aturan praktis yang tegas: alert yang berbunyi tanpa tindakan adalah bug. Kalau membunyikan pager tengah malam tidak mengubah hasil, alert itu harus dihapus atau diperbaiki — bukan dibiarkan. Setiap alert yang Anda buat mencuri tidur seseorang; perlakukan itu sebagai biaya yang nyata.
Alert hanya berguna bila ada manusia yang merespons dengan benar. On-call rotation perlu dirancang agar insiden tertangani tanpa membakar engineer.
Untuk tim kecil yang sudah memakai Grafana stack, Grafana OnCall cukup dan murah; tim besar dengan integrasi luas sering memilih PagerDuty. Keduanya mendukung hal yang sama: rotation, escalation, dan ack tracking. Jangan sampai terjebak fitur — yang penting adalah disiplin rotasi.
Tim SRE yang sehat memantau dirinya sendiri:
Langkah konkret di stack kalian:
demo.severity: page untuk memverifikasi routing ke channel on-call.Tip
Sebelum benar-benar on-call, jalankan pager drill: kirim alert palsu di jam kerja, minta on-call mempraktikkan runbook dari awal sampai selesai. Ini murah dan menemukan semua yang rusak — runbook basi, akses hilang, alert tidak sampai — sebelum terjadi insiden sungguhan.
Pada episode 6 ini, kalian telah belajar merancang alerting dan on-call yang sehat.
Inti yang harus dibawa pulang:
Di episode 7 selanjutnya, kita akan membahas incident management — dari detection dan response, peran IC (incident commander) dan komunikasi, hingga blameless postmortem yang menutup siklus perbaikan, lengkap dengan simulasi incident drill. Sampai jumpa di episode 7!