Episode ini membahas observability dan monitoring: memantau performa dan runtime errors, pelaporan error dengan Sentry, analytics dan pelacakan perilaku pengguna, serta dukungan produksi dan manajemen insiden.

Setelah aplikasi berjalan di produksi, pertanyaan berubah: bagaimana kita tahu ia sehat? Episode 22 membahas observability dan monitoring untuk SvelteKit: log terstruktur, pelaporan error dengan Sentry, analytics perilaku pengguna, serta alur dukungan produksi dan manajemen insiden.
Observability berarti bisa menjawab pertanyaan tentang sistem dari data yang sudah dikumpulkan, bukan menebak. Log, metrik, dan trace yang terstruktur memungkinkan tim menemukan akar masalah dengan cepat saat pengguna melapor atau metrik mulai aneh.
Setelah episode ini, kalian punya fondasi untuk mengetahui aplikasi bermasalah sebelum pengguna mengeluh, dan tahu langkah apa yang diambil saat insiden terjadi.
Log yang konsisten dan terstruktur adalah tulang punggung observability. Catat method, path, status, dan durasi untuk setiap request lewat hook handle, sehingga jejak setiap permintaan tersedia saat dibutuhkan.
import pino from "pino";
const logger = pino({ level: process.env.LOG_LEVEL ?? "info" });
export const handle = async ({ event, resolve }) => {
const mulai = performance.now();
const res = await resolve(event);
logger.info({
method: event.request.method,
path: event.url.pathname,
status: res.status,
durasiMs: Math.round(performance.now() - mulai)
});
return res;
};Selain log, pantau metrik sistem: penggunaan memori, waktu respons, dan tingkat error. Pasang npm install pino untuk logging dan kirim metrik ke layanan observabilitas yang menyediakan dashboard dan alert.
Sentry mengumpulkan error runtime beserta konteks lengkap: stack trace, browser, dan langkah yang mengarah ke error. Integrasi SvelteKit disediakan dalam satu paket SDK.
import * as Sentry from "@sentry/sveltekit";
Sentry.init({
dsn: process.env.SENTRY_DSN,
tracesSampleRate: 1.0
});
export const handleError = async ({ error, event }) => {
Sentry.captureException(error, {
extra: { path: event.url.pathname }
});
return {
message: "Terjadi kesalahan internal",
status: 500
};
};Hook handleError menangkap error yang dilempar dari load functions dan server actions. Gabungkan dengan Sentry agar error tidak hanya dilaporkan, tetapi juga memberikan konteks yang dibutuhkan untuk reproduksi.
Analytics memberi gambaran bagaimana pengguna berinteraksi dengan aplikasi: halaman yang dikunjungi, tombol yang diklik, hingga titik di mana pengguna berhenti. Kirim peristiwa dari komponen saat aksi terjadi.
<script>
import { onMount } from "svelte";
onMount(() => {
kirimPeristiwa("pageview", { path: location.pathname });
});
</script>Pilih alat analytics yang mendukung tanpa pelacak pihak ketiga yang invasif. Prioritaskan yang bisa mematuhi kebijakan cookie dan memberikan data tanpa membebani bundle. Gabungkan data analytics dengan error monitoring untuk melihat bukan hanya apa yang terjadi, tetapi juga seberapa sering.
Metrik tanpa alert tidak banyak membantu. Atur alert untuk sinyal yang benar-benar penting: error rate melonjak, latensi melebihi ambang, atau resource menipis. Buat alert yang bisa ditindaklanjuti dengan informasi konteks, bukan sekadar angka.
Tetapkan alur untuk insiden: siapa yang dihubungi, di mana komunikasi dipusatkan, dan bagaimana perbaikan diukur. Setelah insiden selesai, lakukan tinjauan singkat: apa yang terjadi, mengapa terjadi, dan perubahan apa yang mencegahnya terulang. Proses yang sederhana lebih mungkin dijalankan daripada yang rumit.
Inti yang harus dibawa pulang:
handle mencatat jejak setiap request.handleError menangkap error dari load functions dan actions.Di episode 23, episode terakhir dari seri ini, kita membahas stable modern features & future trends: fitur stabil SvelteKit seperti adapters, load functions, dan server actions, tren full-stack Svelte dan edge-first web, ekosistem dan tools komunitas, serta strategi agar skill tetap relevan.