SRE OBSERVABILITY RELIABILITY DEVOPS SYSTEM-DESIGN MONITORING METRICS PERFORMANCE USER-EXPERIENCE INCIDENT-MANAGEMENT

Mengukur Keandalan Aplikasi Anda: Panduan Praktis untuk SLI dan SLO

⏱️ 9 menit baca
👨‍💻

Mengukur Keandalan Aplikasi Anda: Panduan Praktis untuk SLI dan SLO

1. Pendahuluan

Pernahkah Anda meluncurkan fitur baru, lalu tiba-tiba mendengar keluhan dari pengguna tentang aplikasi yang lambat atau tidak bisa diakses? Atau mungkin Anda sering merasa “kebakaran” karena alert yang terus-menerus berbunyi, tapi tidak tahu persis seberapa parah dampaknya bagi pengguna?

Sebagai developer, kita semua ingin membangun aplikasi yang tidak hanya fungsional, tetapi juga andal dan cepat. Namun, apa sebenarnya arti “andal” itu? Bagaimana kita bisa mengukurnya secara objektif, tidak hanya berdasarkan firasat atau keluhan sesaat? Di sinilah konsep Service Level Indicators (SLI) dan Service Level Objectives (SLO) berperan penting.

Artikel ini akan membawa Anda menyelami dunia SLI dan SLO, dua fondasi utama dalam praktik Site Reliability Engineering (SRE). Kita akan belajar bagaimana SLI membantu kita mengidentifikasi metrik kunci, dan bagaimana SLO mengubah metrik tersebut menjadi target performa yang terukur dan disepakati. Dengan memahami dan mengimplementasikan SLI/SLO, Anda tidak hanya bisa merespons masalah dengan lebih efektif, tetapi juga membangun aplikasi yang secara proaktif memprioritaskan pengalaman pengguna dan stabilitas sistem. Siap? Mari kita mulai!

2. Apa itu Keandalan (Reliability) dan Mengapa Penting?

Sebelum masuk ke SLI dan SLO, mari kita definisikan dulu apa itu keandalan (reliability). Dalam konteks aplikasi web, keandalan adalah kemampuan sistem untuk beroperasi secara konsisten sesuai harapan penggunanya, tanpa kegagalan yang signifikan, dalam periode waktu tertentu.

Bayangkan Anda sedang berbelanja online. Jika situs sering down, proses pembayaran gagal, atau halaman butuh waktu lama untuk load, Anda pasti akan frustrasi dan mungkin pindah ke toko lain, bukan? Nah, di sinilah pentingnya keandalan:

Keandalan bukan hanya tentang “tidak down”. Ini juga mencakup performa, ketersediaan, latensi, dan kualitas respons. Dan untuk mengukur semua itu secara objektif, kita butuh SLI dan SLO.

3. Memahami SLI (Service Level Indicators): Metrik Kritis Aplikasi Anda

📌 SLI (Service Level Indicator) adalah metrik kuantitatif yang mengukur beberapa aspek perilaku layanan yang penting bagi pengguna. Singkatnya, SLI adalah “apa yang akan kita ukur?”.

SLI haruslah terukur, relevan, dan mudah dipahami. Kita tidak bisa mengukur semuanya; fokuslah pada metrik yang paling berdampak pada pengalaman pengguna.

Berikut adalah beberapa contoh SLI umum yang sering digunakan:

💡 Tips Memilih SLI:

Contoh Konkret SLI: Misalkan Anda memiliki layanan Order Processing.

4. Mendefinisikan SLO (Service Level Objectives): Batasan Keandalan yang Jelas

🎯 SLO (Service Level Objective) adalah target keandalan yang spesifik dan terukur untuk SLI tertentu. SLO adalah “berapa target yang akan kita capai untuk apa yang kita ukur?”. Ini adalah janji yang Anda buat kepada diri sendiri dan tim Anda tentang seberapa andal layanan Anda seharusnya.

SLO biasanya dinyatakan sebagai persentase dari SLI dalam periode waktu tertentu.

Format Umum SLO: [SLI] harus [target] selama [periode waktu].

Contoh SLO berdasarkan SLI di atas:

⚠️ Pentingnya SLO yang Realistis:

5. Error Budget: Mengelola Risiko dan Inovasi

💡 Konsep Error Budget adalah salah satu hal paling revolusioner dari SLI/SLO. Error Budget adalah “jumlah downtime atau error yang diizinkan” berdasarkan SLO Anda.

Jika SLO Anda adalah 99.9% ketersediaan dalam sebulan, maka 0.1% sisanya adalah Error Budget Anda. Dalam contoh sebelumnya, itu berarti 43.2 menit downtime dalam sebulan.

Bagaimana Error Budget Bekerja?

Manfaat Error Budget:

Contoh Penggunaan Error Budget: Tim Anda meluncurkan fitur baru yang menyebabkan peningkatan latensi sebesar 10% dan tingkat error sedikit naik. Jika Error Budget masih tersedia, Anda mungkin bisa melanjutkan dan memantau dampaknya. Namun, jika Error Budget sudah kritis, fitur tersebut mungkin harus di-rollback atau ditunda hingga masalah keandalan teratasi.

6. Implementasi Praktis: Dari Konsep ke Kode dan Monitoring

Bagaimana kita mengimplementasikan SLI/SLO dalam praktik sehari-hari?

a. Identifikasi SLI dan SLO Kritis

Mulailah dengan layanan yang paling penting bagi bisnis Anda.

b. Kumpulkan Metrik yang Relevan

Pastikan sistem monitoring Anda (Prometheus, Grafana, Datadog, dll.) dapat mengumpulkan metrik yang Anda butuhkan untuk SLI.

// Contoh instrumentasi Go dengan Prometheus
package main

import (
	"fmt"
	"net/http"
	"time"

	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
	httpRequestsTotal = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Name: "http_requests_total",
			Help: "Total number of HTTP requests.",
		},
		[]string{"path", "method", "status"},
	)
	httpRequestDuration = prometheus.NewHistogramVec(
		prometheus.HistogramOpts{
			Name: "http_request_duration_seconds",
			Help: "Duration of HTTP requests.",
			Buckets: prometheus.DefBuckets, // Default buckets for common latencies
		},
		[]string{"path", "method", "status"},
	)
)

func init() {
	prometheus.MustRegister(httpRequestsTotal)
	prometheus.MustRegister(httpRequestDuration)
}

func main() {
	http.Handle("/metrics", promhttp.Handler())
	http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
		start := time.Now()
		status := "200" // Default status

		defer func() {
			duration := time.Since(start).Seconds()
			httpRequestDuration.WithLabelValues(r.URL.Path, r.Method, status).Observe(duration)
			httpRequestsTotal.WithLabelValues(r.URL.Path, r.Method, status).Inc()
		}()

		fmt.Fprintf(w, "Hello, World!")
	})

	fmt.Println("Server started at :8080")
	http.ListenAndServe(":8080", nil)
}

Kode di atas adalah contoh bagaimana Anda bisa menginstrumentasi aplikasi Go sederhana untuk memancarkan metrik yang bisa digunakan sebagai SLI (total request dan durasi request) ke Prometheus.

c. Visualisasikan dan Pantau SLO

Buat dashboard di Grafana atau tool monitoring lainnya yang secara jelas menampilkan SLI dan progres terhadap SLO Anda.

# Contoh PromQL untuk menghitung Error Rate sebagai SLI
# Misalkan kita ingin menghitung error rate untuk endpoint /api/v1/orders
# dalam 5 menit terakhir

# Total request ke endpoint /api/v1/orders
sum(rate(http_requests_total{path="/api/v1/orders"}[5m]))

# Total error (status 5xx) ke endpoint /api/v1/orders
sum(rate(http_requests_total{path="/api/v1/orders", status=~"5..|429"}[5m]))

# Error Rate = (Total Error / Total Request) * 100
# error_rate = (sum(rate(http_requests_total{path="/api/v1/orders", status=~"5..|429"}[5m])) / sum(rate(http_requests_total{path="/api/v1/orders"}[5m]))) * 100

# Contoh PromQL untuk memantau Error Budget Burn Rate
# Jika SLO 99.9% availability, berarti 0.1% error allowed.
# Jika error rate saat ini 0.5%, berarti 5x lebih cepat dari yang diizinkan.
# Alert jika burn rate > 1 (membakar budget lebih cepat dari target) selama periode tertentu.
# (1 - (sum(rate(http_requests_total{job="my-service", status!~"5.."}[5m])) / sum(rate(http_requests_total{job="my-service"}[5m])))) > (1 - 0.999) * 5
# Angka 5 di atas adalah multiplier, artinya alert jika kita membakar budget 5x lebih cepat dari yang seharusnya dalam 5 menit.

d. Tinjau dan Sesuaikan Secara Berkala

SLI dan SLO bukanlah sesuatu yang statis. Seiring evolusi aplikasi Anda, kebutuhan pengguna, dan lingkungan teknis, SLI dan SLO Anda mungkin perlu disesuaikan. Lakukan tinjauan secara berkala (misalnya, setiap kuartal).

Kesimpulan

Mengimplementasikan SLI dan SLO mungkin terasa seperti pekerjaan tambahan di awal, tetapi investasi ini akan membayar lunas dalam jangka panjang. Anda akan memiliki pemahaman yang jauh lebih baik tentang bagaimana aplikasi Anda benar-benar bekerja dari sudut pandang pengguna, meminimalkan downtime yang tidak terduga, dan memberdayakan tim Anda untuk berinovasi dengan lebih percaya diri.

Dengan SLI sebagai kompas dan SLO sebagai tujuan, Anda dapat membangun budaya di mana keandalan bukan lagi sekadar harapan, melainkan metrik yang terukur dan target yang bisa dicapai. Mulailah dengan langkah kecil, fokus pada metrik yang paling penting, dan saksikan bagaimana aplikasi Anda menjadi lebih stabil, lebih cepat, dan lebih dicintai pengguna. Selamat mencoba!

🔗 Baca Juga