Pelajari cetak biru praktis untuk membangun aplikasi web yang melacak timer SLA, mendeteksi pelanggaran secara instan, memberi peringatan ke tim, dan memvisualisasikan kepatuhan secara real time.

Sebelum merancang layar atau menulis logika deteksi, pastikan tujuan aplikasi Anda jelas. “Pemantauan SLA” bisa berarti apa saja, dari laporan harian hingga prediksi pelanggaran detik-per-detik—itu produk yang sangat berbeda dengan kebutuhan arsitektur yang berbeda pula.
Mulai dengan menyepakati jendela reaksi yang tim Anda realistis jalankan.
Jika organisasi support Anda beroperasi dalam siklus 5–10 menit (antrian triase, rotasi paging), maka “real time” mungkin berarti pembaruan dashboard setiap menit dengan peringatan dalam 2 menit. Jika Anda menangani insiden berdampak tinggi di mana hitungan menit penting, Anda mungkin butuh loop deteksi-dan-peringatan 10–30 detik.
Tuliskan ini sebagai tujuan terukur, misalnya: “Mendeteksi potensi pelanggaran dalam 60 detik dan memberi tahu on-call dalam 2 menit.” Ini menjadi pembatas saat membuat tradeoff arsitektur dan biaya nanti.
Daftarkan janji spesifik yang Anda lacak, dan definisikan masing-masing dengan bahasa sederhana:
Catat juga bagaimana ini berkaitan dengan definisi SLO dan SLA di organisasi Anda. Jika SLO internal berbeda dari SLA yang terlihat pelanggan, aplikasi Anda mungkin perlu melacak keduanya: satu untuk perbaikan operasional, satu untuk risiko kontraktual.
Namai kelompok yang akan menggunakan atau bergantung pada sistem: support, engineering, customer success, team leads/manajer, dan incident response/on-call.
Untuk setiap kelompok, tangkap apa yang perlu mereka putuskan saat itu juga: “Apakah tiket ini berisiko?”, “Siapa pemiliknya?”, “Perlukah eskalasi?” Ini akan membentuk dashboard, routing alert, dan izin.
Tujuan Anda bukan hanya visibilitas—melainkan aksi tepat waktu. Putuskan apa yang harus terjadi saat risiko meningkat atau pelanggaran terjadi:
Contoh outcome yang baik: “Mengurangi pelanggaran SLA dengan memungkinkan deteksi pelanggaran dan respons insiden dalam jendela reaksi yang disepakati.”
Sebelum membangun logika deteksi, tuliskan dengan tepat apa yang dianggap “baik” dan “buruk” untuk layanan Anda. Sebagian besar masalah pemantauan SLA bukanlah teknis—melainkan masalah definisi.
Sebuah SLA (Service Level Agreement) adalah janji kepada pelanggan, biasanya dengan konsekuensi (kredit, penalti, syarat kontrak). Sebuah SLO (Service Level Objective) adalah target internal yang Anda upayakan agar tetap aman di atas SLA. KPI (Key Performance Indicator) adalah metrik apa pun yang Anda pantau (berguna, tapi tidak selalu terikat pada janji).
Contoh: SLA = “merespons dalam 1 jam.” SLO = “merespons dalam 30 menit.” KPI = “rata-rata waktu first response.”
Daftarkan setiap tipe pelanggaran yang perlu Anda deteksi dan event yang memulai jamnya.
Kategori pelanggaran umum:
Jelaskan apa yang dihitung sebagai “response” (balasan publik vs catatan internal) dan “resolution” (resolved vs closed), serta apakah reopening mereset timer.
Banyak SLA hanya menghitung waktu selama jam kerja. Definisikan kalender: hari kerja, hari libur, jam mulai/selesai, dan zona waktu yang digunakan untuk perhitungan (zona pelanggan, kontrak, atau tim). Juga putuskan apa yang terjadi saat pekerjaan melintasi batas (mis. tiket tiba pukul 16:55 dengan SLA respons 30 menit).
Dokumentasikan kapan jam SLA berhenti, seperti:
Tuliskan ini sebagai aturan yang bisa diterapkan aplikasi secara konsisten, dan simpan contoh kasus rumit untuk pengujian nanti.
Pemantau SLA hanya sebaik data yang memasukinya. Mulai dengan mengidentifikasi “sistem catatan” untuk setiap jam SLA. Untuk banyak tim, alat ticketing adalah sumber kebenaran untuk timestamp siklus hidup, sementara monitoring dan logging menjelaskan mengapa sesuatu terjadi.
Kebanyakan setup SLA real-time menarik dari beberapa sistem inti:
Jika dua sistem berbeda, putuskan sebelumnya mana yang menang untuk setiap field (mis. “status tiket dari ServiceNow, tier pelanggan dari CRM”).
Sebagai minimum, lacak event yang memulai, menghentikan, atau mengubah jam SLA:
Pertimbangkan juga event operasional: perubahan kalender jam kerja, update zona waktu pelanggan, dan perubahan jadwal hari libur.
Utamakan webhook untuk pembaruan near-real-time. Gunakan polling ketika webhook tidak tersedia atau tidak dapat diandalkan. Simpan API exports/backfills untuk rekonsiliasi (mis. job malam yang mengisi celah). Banyak tim berakhir dengan hybrid: webhook untuk kecepatan, polling periodik untuk keamanan.
Sistem nyata itu berantakan. Harapkan:
Anggap ini sebagai kebutuhan produk, bukan "edge case"—deteksi pelanggaran Anda bergantung pada perbaikan hal ini.
Aplikasi monitoring SLA lebih mudah dibangun (dan dipelihara) ketika arsitekturnya jelas dan disengaja. Secara garis besar, Anda membangun pipeline yang mengubah sinyal operasional mentah menjadi “state SLA”, lalu menggunakan state itu untuk memberi peringatan dan menggerakkan dashboard.
Pikirkan dalam lima blok:
Pemisahan ini menjaga tanggung jawab tetap bersih: ingestion tidak boleh mengandung logika SLA, dan dashboard tidak menjalankan perhitungan berat.
Putuskan sejak awal seberapa “real-time” yang Anda butuhkan.
Pendekatan pragmatis: mulai dengan perhitungan ulang berkala untuk satu atau dua aturan SLA, lalu pindahkan aturan berdampak tinggi ke streaming.
Hindari kompleksitas multi-region dan multi-environment di awal. Satu region, satu lingkungan produksi, dan staging minimal biasanya cukup sampai Anda memvalidasi kualitas data dan kegunaan peringatan. Buat prinsip “scale later” sebagai batasan desain, bukan kebutuhan saat membangun.
Jika Anda ingin mempercepat versi kerja pertama dashboard dan workflow, platform vibe-coding seperti Koder.ai dapat membantu Anda membangun UI React dan backend Go + PostgreSQL dengan cepat dari spesifikasi berbasis chat, lalu iterasi layar dan filter saat Anda memvalidasi apa yang benar-benar dibutuhkan responder.
Tulis ini sebelum implementasi:
Ingest event adalah tempat sistem pemantauan SLA Anda menjadi dapat diandalkan—atau berisik dan membingungkan. Tujuannya sederhana: terima event dari banyak alat, ubah ke format "satu kebenaran", dan simpan konteks yang cukup untuk menjelaskan setiap keputusan SLA nanti.
Mulai dengan menstandarkan seperti apa “event relevan-SLA”, meski upstream bervariasi. Baseline praktis meliputi:
ticket_id (atau ID case/work item)timestamp (waktu perubahan terjadi, bukan waktu diterima)status (opened, assigned, waiting_on_customer, resolved, dll.)priority (P1–P4 atau setara)customer (identifier akun/tenant)sla_plan (aturan SLA mana yang berlaku)Versioning skema (mis. schema_version) memungkinkan evolusi field tanpa merusak producer lama.
Sistem berbeda memberi nama hal yang sama secara berbeda: “Solved” vs “Resolved,” “Urgent” vs “P1,” perbedaan zona waktu, atau priority yang hilang. Bangun lapisan normalisasi kecil yang:
is_customer_wait atau is_pause) yang menyederhanakan logika pelanggaran nantiIntegrasi nyata melakukan retry. Ingest Anda harus idempotent agar event berulang tidak membuat duplikasi. Pendekatan umum:
event_id dan tolak duplikatticket_id + timestamp + status) dan lakukan upsertSaat seseorang bertanya “Kenapa kami memberi peringatan?”, Anda butuh jejak yang jelas. Simpan setiap raw event yang diterima dan setiap event yang telah dinormalisasi, plus siapa/apa yang mengubahnya. Riwayat audit ini penting untuk percakapan dengan pelanggan dan review internal.
Beberapa event akan gagal parsing atau validasi. Jangan buang mereka secara diam-diam. Arahkan ke dead-letter queue/table dengan alasan error, payload asli, dan hitungan retry, jadi Anda bisa memperbaiki mapping dan memutar ulang dengan aman.
Aplikasi SLA memerlukan dua “memori” berbeda: apa yang benar saat ini (untuk memicu peringatan) dan apa yang terjadi sepanjang waktu (untuk menjelaskan dan membuktikan mengapa ia memberi peringatan).
State saat ini adalah status terbaru tiap work item (ticket/insiden/order) plus timer SLA aktifnya (start time, paused time, due time, remaining minutes, current owner).
Pilih penyimpanan yang dioptimalkan untuk baca/tulis cepat per ID dan filter sederhana. Opsi umum: relational DB (Postgres/MySQL) atau key-value store (Redis/DynamoDB). Untuk banyak tim, Postgres cukup dan menyederhanakan pelaporan.
Jaga model state kecil dan mudah di-query. Anda akan sering membacanya untuk tampilan seperti “breaching soon.”
History harus menangkap setiap perubahan sebagai record immutable: created, assigned, priority changed, status updated, customer replied, on-hold started/ended, dll.
Tabel event append-only (atau event store) membuat audit dan replay menjadi mungkin. Jika Anda kemudian menemukan bug di logika pelanggaran, Anda bisa memproses ulang event untuk membangun kembali state dan membandingkan hasil.
Polanya: state table + events table di database yang sama terlebih dahulu; gunakan storage analytics terpisah nanti jika volume naik.
Definisikan retention berdasarkan tujuan:
Gunakan partisi (per bulan/kuartal) untuk membuat arsip dan penghapusan bisa diprediksi.
Rencanakan berdasarkan pertanyaan yang sering diajukan dashboard:
due_at dan status (dan mungkin queue/team).breached_at (atau flag breach terkomputasi) dan tanggal.(customer_id, due_at).Kinerja dimenangkan di sini: susun penyimpanan berdasarkan 3–5 tampilan utama Anda, bukan setiap laporan yang mungkin.
Deteksi pelanggaran real-time terutama soal satu hal: mengubah workflow manusia yang berantakan (assigned, waiting on customer, reopened, transferred) menjadi timer SLA yang jelas dan dapat dipercaya.
Mulai dengan mendefinisikan event mana yang mengontrol jam SLA untuk setiap tipe tiket atau permintaan. Pola umum:
Dari event ini, hitung due time. Untuk SLA ketat, bisa berupa “created_at + 2 hours.” Untuk SLA jam kerja, itu adalah “2 jam kerja,” yang memerlukan kalender.
Buat modul kalender kecil yang konsisten menjawab dua pertanyaan:
Simpan hari libur, jam kerja, dan zona waktu di satu tempat agar setiap aturan SLA menggunakan logika yang sama.
Setelah memiliki due time, menghitung waktu tersisa mudah: due_time - now (dalam menit kerja jika berlaku). Kemudian tetapkan threshold risiko pelanggaran seperti “akan melewati dalam 15 menit” atau “kurang dari 10% sisa SLA.” Ini memberi tanda urgensi dan mengarahkan routing peringatan.
Anda bisa:
Hybrid praktis: pembaruan event-driven untuk akurasi, plus tick per-menit untuk menangkap crossing ambang yang berbasis waktu meski tidak ada event baru.
Alert adalah saat monitoring SLA menjadi operasional. Tujuannya bukan “lebih banyak notifikasi”—melainkan mengarahkan orang yang tepat untuk melakukan tindakan yang tepat sebelum tenggat terlewat.
Gunakan set kecil tipe alert dengan maksud yang jelas:
Peta tiap tipe ke urgensi dan kanal pengiriman yang berbeda (chat untuk peringatan, paging untuk breach confirmed, dll.).
Routing harus didorong data, bukan hard-coded. Gunakan tabel aturan sederhana seperti: service → tim pemilik, lalu terapkan modifier:
Ini menghindari “mengirim ke semua orang” dan membuat kepemilikan terlihat.
Status SLA bisa berubah cepat selama respons insiden. Deduplikasi dengan kunci stabil seperti (ticket_id, sla_rule_id, alert_type) dan terapkan:
Pertimbangkan juga menggabungkan beberapa peringatan menjadi ringkasan periodik.
Setiap notifikasi harus menjawab “apa, kapan, siapa, sekarang apa”:
Jika seseorang tidak bisa bertindak dalam 30 detik setelah membaca notifikasi, maka alert tersebut perlu konteks yang lebih baik.
Dashboard SLA yang baik lebih sedikit soal grafik dan lebih banyak membantu seseorang memutuskan apa yang harus dilakukan berikutnya dalam kurang dari satu menit. Rancang UI di sekitar tiga pertanyaan: Apa yang berisiko? Kenapa? Aksi apa yang harus saya ambil?
Mulai dengan empat tampilan sederhana, masing-masing dengan tujuan jelas:
Fokus tampilan default pada breaching soon, karena di situlah pencegahan terjadi.
Berikan pengguna sekumpulan filter kecil yang memetakan keputusan kepemilikan dan triase nyata:
Buat filter sticky per pengguna agar tidak mereka konfigurasikan ulang setiap kunjungan.
Setiap baris di “breaching soon” harus menyertakan penjelasan singkat dalam bahasa sehari-hari, misalnya:
Tambahkan drawer “Details” yang menampilkan timeline perubahan state SLA (started, paused, resumed, breached), sehingga pengguna bisa mempercayai perhitungan tanpa harus menghitung manual.
Rancang alur kerja default sebagai: review → open → act → confirm.
Setiap item harus punya tombol aksi yang melompat ke sumber kebenaran:
Jika Anda mendukung aksi cepat (assign, change priority, add note), tampilkan hanya di tempat yang bisa diterapkan secara konsisten dan audit perubahan tersebut.
Aplikasi monitoring SLA real-time cepat menjadi sistem catatan untuk performa, insiden, dan dampak pelanggan. Perlakukan seperti perangkat produksi sejak hari pertama: batasi siapa yang bisa melakukan apa, lindungi data pelanggan, dan dokumentasikan bagaimana data disimpan dan dihapus.
Mulai dengan model izin kecil dan jelas, kembangkan hanya saat perlu. Setup umum:
Selaraskan izin dengan alur kerja. Contoh: operator boleh memperbarui status insiden, tetapi hanya admin yang bisa mengubah timer SLA atau aturan eskalasi.
Pemantauan SLA sering melibatkan identifier pelanggan, tier kontrak, dan konten tiket. Minimalkan paparan:
Integrasi (ticketing, chat, metrics, incident tools) sering menjadi titik lemah:
Definisikan kebijakan sebelum Anda mengumpulkan bulan sejarah:
Tuliskan aturan ini dan tampilkan di UI sehingga tim tahu apa yang disimpan—dan untuk berapa lama.
Menguji aplikasi monitoring SLA bukan soal “apakah UI muncul” tapi lebih ke “apakah timer, pause, dan threshold dihitung persis seperti kontrak mengharapkan—setiap saat.” Kesalahan kecil (zona waktu, jam kerja, event hilang) bisa menciptakan peringatan bising atau, lebih buruk, pelanggaran yang terlewat.
Ubah aturan SLA menjadi skenario konkret yang bisa Anda simulasikan end-to-end. Sertakan alur normal dan edge case yang menyulitkan:
Buktikan bahwa logika deteksi pelanggaran stabil di bawah kekacauan operasional nyata, bukan hanya data demo yang bersih.
Buat library fixture event yang dapat diputar ulang: sekumpulan “timeline insiden” yang bisa Anda jalankan ulang melalui ingestion dan perhitungan kapan pun Anda mengubah logika. Ini membantu memverifikasi perhitungan dari waktu ke waktu dan mencegah regresi.
Simpan fixture versi di Git dan sertakan output yang diharapkan: waktu tersisa yang dihitung, saat pelanggaran terjadi, jendela pause, dan pemicu alert.
Perlakukan pemantauan SLA seperti sistem produksi lain dan tambahkan sinyal kesehatan sendiri:
Jika dashboard Anda menunjukkan “hijau” sementara event tertahan, kepercayaan akan cepat hilang.
Tulis runbook singkat dan jelas untuk mode kegagalan umum: consumer macet, perubahan skema, upstream outage, dan backfill. Sertakan langkah untuk memutar ulang event dan menghitung ulang timer dengan aman (periode apa, tenant mana, dan cara menghindari double-alerting). Tautkan ke dokumentasi internal atau halaman sederhana seperti /runbooks/sla-monitoring.
Meluncurkan aplikasi monitoring SLA paling mudah jika Anda memperlakukannya seperti produk, bukan proyek sekali jalan. Mulai dengan rilis minimum viable yang membuktikan loop end-to-end: ingest → evaluate → alert → konfirmasi bahwa itu membantu seseorang bertindak.
Pilih satu sumber data, satu tipe SLA, dan peringatan dasar. Contoh: pantau “first response time” menggunakan satu feed ticketing, dan kirim peringatan saat jam hampir habis (bukan hanya setelah terlanjur melanggar). Ini mempersempit cakupan sambil memvalidasi bagian paling sulit: timestamp, jendela waktu, dan kepemilikan.
Setelah MVP stabil, kembangkan langkah demi langkah: tambah tipe SLA kedua (mis. resolution), lalu sumber data kedua, lalu workflow yang lebih kaya.
Siapkan dev, staging, dan production sejak awal. Staging harus mencerminkan konfigurasi produksi (integrasi, jadwal, jalur eskalasi) tanpa memberi tahu responder nyata.
Gunakan feature flags untuk memperkenalkan:
Jika Anda membangun cepat dengan platform seperti Koder.ai, snapshot dan rollback berguna: kirim UI dan perubahan aturan ke pilot, lalu cepat revert jika peringatan berisik.
Tulis dokumentasi setup singkat dan praktis: “Connect data source,” “Create an SLA,” “Test an alert,” “Apa yang harus dilakukan saat menerima notifikasi.” Simpan dekat produk, mis. halaman internal di /docs/sla-monitoring.
Setelah adopsi awal, prioritaskan perbaikan yang meningkatkan kepercayaan dan mengurangi noise:
Iterasi berdasarkan insiden nyata: setiap peringatan harus mengajarkan apa yang perlu diotomatisasi, diperjelas, atau dihapus.
Sebuah tujuan pemantauan SLA adalah pernyataan terukur yang mendefinisikan:
Tuliskan sebagai tujuan yang bisa diuji: “Mendeteksi potensi pelanggaran dalam X detik dan memberi tahu on-call dalam Y menit.”
Tentukan “real time” berdasarkan kemampuan tim Anda merespons, bukan hanya apa yang secara teknis mungkin.
Intinya adalah menetapkan (event → perhitungan → peringatan/dashboard), lalu rancang sistem di sekitarnya.
Mulai dengan janji yang benar-benar dapat Anda langgar (dan mungkin memberi kompensasi), yang umum:
Banyak tim juga memantau internal yang lebih ketat dari SLA. Jika Anda punya keduanya, simpan dan tampilkan keduanya agar operator bisa bertindak lebih awal sambil tetap melaporkan kepatuhan kontraktual dengan akurat.
Kegagalan SLA sering kali berasal dari kegagalan definisi. Jelaskan:
Kemudian enkode ini sebagai aturan deterministik dan simpan perpustakaan timeline contoh untuk mengujinya.
Tentukan satu set kalender bisnis yang konsisten:
Implementasikan modul kalender reusable yang bisa menjawab:
Pilih "sistem catatan" per bidang dan dokumenkan mana yang menang bila terjadi perselisihan.
Sumber umum:
Untuk perilaku near-real-time, utamakan ; tambahkan untuk rekonsiliasi dan event yang terlewat.
Minimal, tangkap event yang memulai, menghentikan, atau memodifikasi jam SLA:
Juga rencanakan event yang sering terlupakan seperti perubahan kalender bisnis, update zona waktu, dan perubahan jadwal libur—ini dapat mengubah due time tanpa aktivitas tiket.
Gunakan pipeline lima blok sederhana:
Sesuaikan dengan urgensi:
Hibrida yang kuat: pembaruan event-driven untuk ketepatan plus tick per-menit untuk menangkap crossing ambang waktu meski tidak ada event baru (mis. “due dalam 15 menit”).
Perlakukan alerting sebagai workflow, bukan aliran notifikasi:
Jaga agar logika SLA tidak berada di lapisan ingest dan perhitungan berat tidak dilakukan di dashboard. Mulai dengan deployment sederhana (satu region, lingkungan minimal) sampai Anda percaya kualitas data dan kegunaan peringatannya.
(work_item_id, sla_rule_id, alert_type) dan kirim hanya pada transisi state dengan cooldown.Setiap peringatan harus menyertakan: owner/on-call target, due time dan waktu tersisa, aksi berikutnya, dan link seperti /tickets/{id} dan /sla/tickets/{id}.