Mempelajari disiplin menguji sistem dengan sengaja memecahkannya: prinsip chaos engineering, perbedaan chaos vs kejahatan acak, game days yang terstruktur, dan tools seperti Chaos Mesh dan Litmus — lengkap dengan simulasi kegagalan service yang aman

Ada kalanya insiden terjadi karena kegagalan yang tidak pernah dibayangkan: node mati berbarengan dengan DNS bermasalah, atau satu query berat menguras seluruh koneksi database. Sistem jarang gagal seperti yang kita antisipasi — ia gagal dengan cara yang tidak kita pikirkan sama sekali. Chaos engineering lahir untuk mengubah ketakutan itu menjadi pengetahuan: sengaja membuat sistem gagal, di lingkungan terkendali, sebelum ia gagal sendiri di lingkungan tak terkendali.
Ini bukan "sabotase iseng" atau "membiarkan semuanya meledak". Chaos engineering adalah eksperimen berdisiplin yang menguji hipotesis — "sistem kita masih melayani pengguna walau satu AZ mati" — dengan cara mengukurnya, bukan dengan percaya diri.
Empat prinsip dari Principles of Chaos Engineering (principlesofchaos.org):
Sebelum memecahkan sesuatu, tentukan dulu tanda sehatnya: metrik apa yang menunjukkan sistem berfungsi normal (latency, error rate, throughput). Ini adalah hipotesis yang akan diuji.
Rumuskan dugaan yang bisa diuji: "Saat 30% pod payment mati, error rate tetap di bawah 1% dan p95 tetap di bawah 300 ms." Bukan "mudah-mudahan tidak apa-apa" — tapi klaim spesifik yang bisa terbukti salah.
Eksperimen harus memakai kejadian nyata di sistem nyata: matikan process, tunda paket, habiskan disk, matikan zona. Skala dan cakupan diatur bertahap — bukan simulasi di kepala.
Mulai dari yang terkecil dan aman: satu pod, lalu beberapa, lalu layanan edge. Sistem produksi diuji dengan gradual roll-out — persis seperti canary, tetapi untuk kegagalan.
| Chaos engineering | Kejahatan acak |
|---|---|
| Punya hipotesis dan steady state | Tidak ada tujuan terukur |
| Blast radius bertahap dan terkendali | Mencoba "semuanya sekaligus" |
| Berhenti dan rollback saat masalah muncul | Terus menekan sampai rusak |
| Hasilnya dokumentasi & perbaikan | Hasilnya insiden dan kelelahan |
Aturan non-negoisabel: setiap eksperimen punya tombol stop, dan dipantau oleh manusia yang berwenang menghentikannya. Jika steady state melanggar, eksperimen dihentikan dan perbaikan dimulai — bukan dilanjutkan "untuk melihat sejauh mana".
Important
Jangan pernah menjalankan chaos engineering di environment yang tidak punya observability dan alerting yang memadai. Eksperimen tanpa pengukuran adalah percobaan buta — kalian tidak akan tahu apakah sistem bertahan atau hanya beruntung. Kerjakan dulu episode 5-8 sebelum episode ini.
Game day adalah versi terjadwal dan lintas-tim dari chaos experiment — gabungan incident drill (episode 7) dan chaos engineering:
Hasil game day yang baik berupa dua daftar: hal yang ternyata bertahan (pengetahuan berharga — jangan diotomasi ulang) dan celah yang baru terungkap (prioritas perbaikan).
Chaos Mesh adalah proyek CNCF (incubating) yang berjalan di dalam Kubernetes. Ia menyuntik kegagalan pada pod, network, filesystem, dan time lewat CRD — tanpa mengubah kode aplikasi. Contoh yang sering dipakai:
apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
name: pod-kill-demo
spec:
action: pod-kill
mode: one
duration: "60s"
selector:
namespaces: ["default"]
labelSelectors:
app: demoLitmus (CNCF graduated) mengambil pendekatan berbasis scenario: kalian mendefinisikan eksperimen sebagai workflow yang mencakup inject, observability, dan verification otomatis. Cocok untuk tim yang ingin integration dengan CI: eksperimen dijalankan sebagai bagian dari pipeline rilis.
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
name: engine-demo
spec:
appinfo:
appns: default
applabel: "app=demo"
experiments:
- name: pod-network-latency
spec:
components:
env:
- name: LATENCY
value: "1000"
- name: JITTER
value: "200"Untuk lab lokal tanpa Kubernetes, kita bisa mulai sederhana dengan Chaos Toolkit (sudah diinstall di episode 0). Eksperimen: matikan service demo dan amati apakah stack memulihkan diri.
{
"title": "Demo service hilang, recovery sehat",
"steady-state-hypothesis": {
"title": "Service kembali sehat dalam 120 detik",
"probes": [
{
"type": "probe",
"tolerance": 1,
"provider": {
"type": "http",
"url": "http://localhost:8080/health",
"timeout": 120
}
}
]
},
"method": [
{
"name": "matikan container demo",
"type": "action",
"provider": {
"type": "process",
"path": "docker",
"arguments": ["stop", "sre-lab-demo-1"]
}
}
]
}Jalankan eksperimen dan lihat hasilnya:
chaos run experiment.json[Steady State Hypothesis] PASSED: service sehat kembali < 120s
[method] container demo di-stop, healthcheck auto-restart memulihkanTip
Mulailah dari kegagalan yang sudah terasa aman — satu pod restart adalah eksperimen pertama yang sempurna: risikonya kecil, dan hasilnya langsung memberi kepercayaan diri. Setelah itu baru naikkan kompleksitas: network latency, database failover, lalu multi-pod. Chaos engineering adalah keterampilan yang dibangun dengan gradasi, sama seperti segala hal lain di series ini.
Pada episode 13 ini, kalian telah belajar mendisiplinkan kekacauan.
Inti yang harus dibawa pulang:
Di episode 14 selanjutnya, kita akan merangkai seluruh konfigurasi menjadi kode: reliability-as-code — SLO-as-code, alert-as-code, dan IaC untuk recovery, lengkap dengan praktik menyimpan SLO dan alert di git. Sampai jumpa di episode 14!