Second Brain

Sebuah catatan perjalanan menekuni bidang IT Infra, Cloud, DevOps, dan Security

Membangun Sistem “Early Warning” Server dengan Grafana & Telegram Alerting

Kita tidak bisa berharap server akan baik-baik saja selamanya. Oleh karena itu, saya membangun sistem Observability menggunakan Prometheus dan Grafana untuk memantau kesehatan server secara real-time.

Namun, dashboard yang cantik tidak berguna jika kita harus memelototinya 24 jam. Di artikel ini, saya akan membagikan perjalanan teknis saya mengonfigurasi Automated Alerting ke Telegram, termasuk bagaimana saya menangani insiden saat Stress Testing.

Arsitektur Sistem

  • Metrics Collector: Node Exporter (Linux Metrics).

  • Time-Series DB: Prometheus.

  • Visualisasi & Alerting: Grafana.

  • Notification Channel: Telegram Bot.

Menyiapkan Telegram Bot

Pada tahap ini kita akan membuat Bot Telegram untuk menampilkan pesan alert.

  • Buat Bot Baru:

    • Buka Telegram, cari @BotFather.

    • Ketik /newbot.

    • Ikuti instruksi (beri nama bot & username).

    • Simpan HTTP API Token yang diberikan. Nantinya ini kita gunakan untuk proses menghubungkan Grafana dengan Telegram.

  • Cari ID Telegram:

    • Cari bot @userinfobot.

    • Klik Start. Salin angka ID yang muncul.

  • Aktifkan Bot:

    • Cari nama bot yang baru kita buat tadi.

    • Klik START (/start). Tanpa langkah ini, bot tidak punya izin mengirim pesan ke kita.

Konfigurasi Contact Point di Grafana

Agar Grafana bisa terhubung dengan Telegram kita perli daftarkan Bot tadi ke Grafana.

  1. Masuk ke Dashboard Grafana.

  2. Buka menu Alerting Contact points.

  3. Klik + Add contact point.

  4. Isi konfigurasi:

    • Name: Telegram-Alert

    • Integration: Telegram

    • Bot API Token: (Paste token dari langkah 1)

    • Chat ID: (Paste ID dari langkah 1)

  5. Validasi: Klik tombol Test di pojok kanan atas Send test notification.

    • Jika pesan masuk: Koneksi Sukses.

    • Jika error: Cek kembali Token/ID dan pastikan sudah /start bot-nya.

  6. Klik Save contact point.

Membuat Alert Rule

Di sini kita mengajarkan Grafana cara mendeteksi bahaya.

  1. Buka menu Alerting Alert rules.

  2. Klik + New alert rule. Beri nama High CPU Load.

  3. Setting Query (Kotak A):

    • Pilih datasource: Prometheus.

    • Mode: Code.

    • Masukkan Query (Mendeteksi penggunaan CPU):

      100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)
  4. Setting Logika (Kotak B – Reduce):

    • Jangan gunakan Mean (Rata-rata) jika ingin deteksi instan. Gunakan Last.

    • Function: Last.

    • Input: A.

  5. Setting Ambang Batas (Kotak C – Threshold):

    • Input: B.

    • IS ABOVE: 60 (Bunyi jika CPU di atas 60%).

    • Klik Set as alert condition.

Mengatur Notifikasi

Agar notifikasi tidak telat atau malah menjadi spam, kita perlu mengatur “Traffic Light”-nya.

  1. Buka menu Alerting Notification policies.

  2. Edit Default policy.

  3. Pastikan Contact point mengarah ke Telegram-Alert.

  4. Tuning Timing (Agar Responsif):

    • Group wait: 10s (Hanya tunggu 10 detik sebelum kirim).

    • Group interval: 1m (Update info setiap 1 menit).

    • Repeat interval: 5m (Ingatkan lagi setiap 5 menit jika masalah belum kelar).

Template Pesan Alert

Pesan bawaan Grafana sangat teknis. Kita ubah agar mudah dibaca manusia.

  1. Kembali ke Contact points Tab Notification templates.

  2. Buat template baru bernama telegram_bersih.

  3. Isi dengan kode berikut:

    {{ define "telegram_bersih" }}
    {{ if gt (len .Alerts.Firing) 0 }}
    🔥 <b>ALARM BAHAYA (FIRING)</b>
    {{ range .Alerts.Firing }}
    <b>Server:</b> {{ .Labels.instance }}
    <b>Pesan:</b> {{ .Annotations.summary }}
    ------------------------------
    {{ end }}
    {{ end }}
    
    {{ if gt (len .Alerts.Resolved) 0 }}
    ✅ <b>SUDAH SEMBUH (RESOLVED)</b>
    {{ range .Alerts.Resolved }}
    <b>Server:</b> {{ .Labels.instance }}
    {{ end }}
    {{ end }}
    {{ end }}
  4. Simpan Template.

  5. Edit Contact Point Telegram-Alert lagi, di bagian Optional Telegram settings > Message, panggil template tadi:

    {{ template "telegram_bersih" . }}

Stress Testing

Sistem belum teruji tanpa simulasi bencana.

  1. Siapkan Terminal VPS dan HP Anda.

  2. Jalankan perintah Stress Test (Membebani CPU):

    ab -n 5000 -c 100 http://43.xx.xx.238/2025/12/31/test/
  3. Observasi:

    • Menit ke-0: CPU naik di Dashboard.

    • Menit ke-1: Status Alert di Grafana berubah jadi Pending (Kuning) lalu Firing (Merah).

    • Notifikasi Masuk: “🔥 ALARM BAHAYA…”

  4. Hentikan script (Ctrl+C). Tunggu beberapa menit.

    • Notifikasi Masuk: “✅ SUDAH SEMBUH…”

 

Kesimpulan

Dengan konfigurasi ini, saya berhasil menurunkan Mean Time To Detect (MTTD) insiden server. Sistem ini bekerja otomatis 24/7, memungkinkan tim SRE untuk tidur nyenyak dan hanya bangun ketika ada masalah yang benar-benar nyata (Critical).