Dalam tim Go Fiber yang menjalankan layanan produksi, tantangan utamanya adalah memastikan setiap deployment dapat dipantau, diuji, dan dibatalkan tanpa menimbulkan downtime. Artikel ini langsung menjelaskan langkah-langkah observabilitas dasar, strategi rollout, mekanisme rollback cepat, serta postmortem ringan agar tim bisa bereaksi proaktif terhadap regresi.

1. Siapkan Observabilitas Sebelum Rollout

Sebelum mengirimkan kode baru, pastikan aplikasi Go Fiber sudah terhubung dengan observabilitas minimal: metrics, logging terstruktur, dan health check. Observabilitas memungkinkan Anda mendeteksi masalah pada early stage dan memberi data saat rollback.

Metrics yang penting

Gunakan Prometheus untuk mengumpulkan metrics HTTP, latency, dan error rate. Dengan fiber.App, pasang middleware metrics dan exposure endpoint:

app := fiber.New()
metrics := fiberprometheus.New("my_service")
metrics.RegisterAt(app, "/metrics")
app.Use(metrics.Middleware)

Tambahkan metrics khusus saat dependensi penting dipanggil (misal panggilan database) agar rollout baru tidak menaikkan error rate.

Logging dan health check

Pastikan logging terstruktur (JSON) agar log aggregator bisa mengelompokkan berdasarkan request ID. Tambahkan health check endpoint khusus yang memeriksa koneksi ke database dan cache:

app.Get("/health", func(c *fiber.Ctx) error {
    if err := db.Ping(); err != nil {
        return c.Status(503).JSON(fiber.Map{"status": "db-fail"})
    }
    return c.JSON(fiber.Map{"status": "ok"})
})

Endpoint ini digunakan oleh load balancer atau platform deployment untuk menandai instance sebagai ready atau unhealthy.

2. Strategi Rollout Bertahap

Pemanjangan deployment ke seluruh produksi tanpa fase bertahap meningkatkan risiko. Terapkan strategi canary atau progressive rollout dengan tooling seperti Kubernetes Deployment atau platform CI/CD.

  • Canary deployment: Kirim versi baru ke persentase kecil traffic (misalnya 5%). Pantau metrics error dan latency selama window 5-10 menit sebelum menaikkan persentase.
  • Feature flag: Kontrol perilaku lebih halus, aktifkan fitur baru untuk subset user dengan flag (misalnya LaunchDarkly atau library internal). Rollout logika fitur bisa di-roll-back tanpa redeploy.
  • Automated checks: Gabungkan scripts atau test suites yang memanggil endpoint kritis untuk memastikan respon tidak berubah sebelum canary naik.

Penempatan traffic bisa diotomatiskan melalui manifest deployment. Pastikan service mesh atau gateway dapat melakukan weight-based routing.

3. Mecanisme Rollback Cepat

Jika metrics menunjukkan regresi (error rate naik, latency melonjak), rollback harus dapat dilakukan tanpa menunggu deployment manual.

Milestones rollback

Siapkan versi stabil terakhir sebagai tag immutable. Contoh workflow Kubernetes:

# lihat revision history
git checkout stable-tag
kubectl rollout undo deployment/my-service
kubectl get pods -l app=my-service

Atur alert agar jika rollback dijalankan, notifikasi dikirim ke tim (Slack/email). Hal ini menghindari keputusan rollback yang tidak terdokumentasi.

Checklist rollback

  • Rollback command sudah dipraktikkan di staging.
  • Metrics lama dan baru dibandingkan sebelum dan sesudah rollback.
  • Dokumentasi kejadian awal dibuat singkat (apa yang berubah, siapa yang merilis, metric trigger).

4. Postmortem Ringan Setelah Insiden

Postmortem ringan memastikan tim belajar dari kejadian tanpa birokrasi berlebihan. Gunakan template simple:

  1. Summary: Ringkas insiden dalam 3 kalimat.
  2. Timeline: Catat waktu deploy, alert, rollback, restorasi.
  3. Root cause: Jelaskan temuan utama (bug, konfigurasi, kapasitas).
  4. Action items: Langsung priortaskan perbaikan observabilitas atau test.

Pastikan postmortem selesai dalam 48 jam setelah rollback agar detail masih segar. Gunakan platform dokumen kolaboratif atau issue tracker untuk menjaga transparansi.

5. Pencegahan Regresi dan Checklist Deployment Produksi

Berikut checklist yang bisa dijadikan pedoman sebelum tiap deployment:

  • ✅ Unit dan integration tests berhasil, terutama untuk endpoint kritis.
  • ✅ Observabilitas: metrics, log, health check tersedia dan diverifikasi.
  • ✅ Rollout plan (canary, feature flag) sudah disiapkan dengan target threshold.
  • ✅ Dokumen rollback command/step siap dan diuji minimal di staging.
  • ✅ Tim tahu siapa pemilik release dan ada channel notifikasi untuk alert.

Pertahankan budaya slow but visible: lebih baik deployment sedikit lambat walau lengkap observabilitasnya daripada cepat tapi buta terhadap dampak.

6. Debug dan Pemantauan Setelah Deployment

Setelah rollout, pantau dengan cara:

  • Bandingkan latency dan error rate antara versi canary dan baseline.
  • Gunakan log query untuk melihat pola 4xx/5xx dan trace ID.
  • Jika ada spike, cari correlation dengan endpoint atau service (misalnya DB connection).

Jika rollout dilakukan di Kubernetes, periksa kubectl describe pod untuk melihat event dari scheduler. Data ini penting saat menyusun postmortem.

Checklist Tindakan Cepat

  • Lakukan curl -I http://apps/health untuk mengecek health endpoint.
  • Monitoring metrics: curl http://apps/metrics | head memberi gambaran awal.
  • Rollback command: kubectl rollout undo deployment/my-service sudah diuji.
  • Dokumentasikan versi: git describe --tags --dirty.

Dengan pendekatan ini, tim Go Fiber dapat meminimalkan dampak regresi, memastikan rollback berjalan lancar, dan belajar dari setiap insiden tanpa memperlambat ritme delivery.