Mengubah semua pengaturan reliability menjadi artefak yang di-version dan direview: SLO-as-code dengan OpenSLO/Sloth, alert-as-code yang sinkron dengan kode, dan IaC untuk recovery yang cepat — lengkap dengan praktik menyimpan SLO dan alert di git dengan pull request

Sepanjang series ini kalian membangun banyak hal: SLO, alert, dashboard, runbook, konfigurasi chaos, rencana kapasitas. Sekarang muncul pertanyaan yang sama pentingnya dengan membangunnya: siapa yang bisa mengubahnya, dan bagaimana perubahannya direview? Jika SLO diedit langsung di UI Prometheus, jika alert dimatikan dari dashboard tanpa jejak, jika runbook hanya ada di kepala satu orang — maka semua yang kalian bangun bukan aset, melainkan utang.
Reliability-as-code menjawab ini dengan satu prinsip yang sederhana dan radikal: semua pengaturan reliability diperlakukan seperti kode. Disimpan di git, di-review lewat pull request, di-version, dan di-render ke sistem target oleh otomasi. Episode 14 merangkum dan mempraktikkan pola ini.
SLO adalah keputusan bisnis (episode 3-4). Keputusan yang baik perlu direview oleh manusia yang berwenang, disertai alasan, dan bisa ditelusuri siapa yang mengubahnya kapan. Menyimpan SLO sebagai YAML di repo melakukan semua itu — dan sekaligus menjadi single source of truth yang bisa di-render ke mana pun.
OpenSLO adalah spesifikasi terbuka untuk mendefinisikan SLO sebagai kode. Contoh:
version: 1.0.0
service: payments
slos:
- name: availability-30d
description: Availability payment API 99.9% per 30 hari
objective: 99.9
indicator:
thresholdMetric:
source: prometheus
queryType: promql
promql:
good: >-
sum(rate(http_requests_total{service="payments",code=~"2..|3.."}[30d]))
total: >-
sum(rate(http_requests_total{service="payments"}[30d]))
timeWindow:
- duration: 30d
isRolling: trueYAML OpenSLO sendiri tidak dipahami Prometheus. Sloth dan Pyrra membaca YAML ini dan menghasilkan recording rules + alert Prometheus yang siap pakai. Alurnya:
Ubah SLO di git → generator menjalankan ulang → rules baru di-deploy → dashboard ikut ter-update. Tidak ada lagi SLO yang "terlupakan" di UI.
Alert yang dibuat lewat UI Prometheus/Grafana punya tiga penyakit: tidak ada review (siapa pun bisa menambah tanpa tahu konteks), tidak ada riwayat (kenapa alert ini ada?), dan tidak sinkron dengan kode (service dihapus, alert menganggur).
sre/
├── slo/
│ └── payments-api.yaml
├── alerts/
│ ├── payments-errorbudget.yaml
│ └── infra-disk.yaml
├── dashboards/
│ └── payments-overview.json
└── runbooks/
└── payments-errorbudget.mdSetiap perubahan lewat pull request: reviewer melihat dif dan bisa menanyakan "kenapa thresholdnya diubah?" — diskusi terekam, bukan dihapus dari ingatan. Ketika alert digabung, CI menjalankan generator dan men-deploy ke Prometheus.
Important
Hubungkan setiap alert ke runbook dan owner — persis kriteria actionable di episode 6. Alert-as-code memberi kita sarana (file yang wajib berisi field), tetapi disiplin (runbook benar-benar ditulis dan dipelihara) tetap tanggung jawab tim. Struktur file tidak menyelamatkan tim yang malas mendokumentasikan.
SLO dan alert menjamin pengukuran; yang menjamin pemulihan adalah kemampuan membangun kembali infrastruktur secara otomatis. Dua pola recovery berbasis kode:
Seluruh lingkungan di-deklarasikan sebagai kode (Terraform, Pulumi, CloudFormation). Saat disaster, lingkungan baru dibuat dari repo — bukan dari "ingatan orang yang dulu menyetup server". Ini mengubah recovery dari restore manual menjadi apply ulang:
resource "aws_instance" "app" {
ami = data.aws_ami.ubuntu.id
instance_type = "t3.medium"
user_data = file("scripts/bootstrap.sh")
tags = {
Name = "app-${var.environment}"
Managed = "terraform"
}
}Practice DR yang sehat: environment recovery dibangun & diuji terus-menerus, bukan disimpan untuk "saat dibutuhkan". Jika pipeline yang sama yang men-deploy production juga bisa membangun environment kosong dari nol, maka recovery menjadi aktivitas biasa, bukan panik dadakan.
Runbook disimpan sebagai Markdown di repo, di-review seperti kode, dan — yang paling penting — dieksekusi sebagian: langkah-langkah yang bisa otomasi diubah menjadi script yang bisa dijalankan langsung. Runbook yang "dibaca lalu diketik manual" adalah toil (episode 9).
Bangun alur lengkap untuk service payments kalian:
sre-config dengan struktur di atas (slo/, alerts/, runbooks/).payments-api.yaml (contoh OpenSLO di atas).alerts/payments-errorbudget.yaml.main, jalankan generator dan sync ke Prometheus.Tip
Sertakan alasan (why) dalam setiap file SLO/alert — satu baris description yang menjelaskan keputusan bisnis di balik target. Setahun kemudian, orang yang membaca file ini tidak perlu menebak-nebak mengapa angka itu dipilih; di sinilah dokumentasi yang baik menyimpan waktu insiden.
Pada episode 14 ini, kalian telah mengubah reliability menjadi kode.
Inti yang harus dibawa pulang:
Di episode 15 selanjutnya, kita akan membidik performa: performance engineering — profiling, optimasi latency, dan load testing dengan k6 untuk membuktikan bahwa SLO performa benar-benar bisa dicapai. Sampai jumpa di episode 15!