Tools

Grafana Alerting: Monitoring & Notifikasi Otomatis

TOKEN

Tutorial komprehensif membangun sistem monitoring dan notifikasi otomatis menggunakan Grafana Alerting β€” dari alert rules, contact points, integrasi Telegram & email, hingga best practices produksi

1. Pengenalan Grafana Alerting

Dalam dunia monitoring, memiliki dashboard yang indah saja tidak cukup. Kamu membutuhkan sistem yang secara otomatis memberitahu kamu ketika sesuatu yang tidak normal terjadi β€” apakah itu server yang down, CPU yang overload, suhu yang terlalu tinggi, atau jaringan yang mendadak lambat. Di sinilah Grafana Alerting berperan penting.

Grafana Alerting adalah sistem notifikasi terintegrasi yang memungkinkan kamu mendefinisikan kondisi kapan alert harus dikirim, ke mana alert dikirim, dan bagaimana alert dikelompokkan. Sistem ini hadir secara native di Grafana 8+ dan sepenuhnya menggantikan sistem alerting lama yang lebih terbatas.

Mengapa Alerting Penting?

Bayangkan skenario berikut: kamu memiliki dashboard monitoring suhu server room. Kamu melihat dashboard hanya di jam kerja. Tapi malam hari, suhu naik drastis karena AC mati. Tanpa alerting, kamu baru tahu keesokan harinya ketika server sudah mati karena overheat.

Dengan Grafana Alerting, sistem akan otomatis:

Fitur Baru Grafana Alerting (Unified Alerting)

Fitur Unified Alerting (8+) Legacy Alerting
Multi-condition Alertβœ… Didukung penuh❌ Terbatas
Multiple Contact Pointsβœ… Banyak sekaligus⚠️ Satu per alert
Notification Policiesβœ… Routing berdasarkan label❌ Tidak ada
Silence & Mute Timingβœ… Lengkap⚠️ Silence saja
State & Health Historyβœ… Detail per rule⚠️ Terbatas
Provisioning as Codeβœ… File YAML/JSON⚠️ Terbatas
Data Source KompatibelSemua + expression queryHanya Grafana-managed
πŸ’‘ Pastikan Unified Alerting Aktif

Di Grafana 8+, Unified Alerting aktif secara default. Jika kamu masih menggunakan Grafana lama, buka grafana.ini dan pastikan [unified_alerting] enabled = true lalu restart Grafana. Menu Alert & IRM akan muncul di sidebar kiri.

2. Arsitektur & Komponen Alerting

Sebelum mulai membuat alert, penting untuk memahami bagaimana komponen-komponen Grafana Alerting saling terhubung. Sistem ini terdiri dari beberapa komponen utama yang bekerja sama dalam satu pipeline.

Diagram: Pipeline Grafana Alerting
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚                    GRAFANA ALERTING                         β”‚
  β”‚                                                             β”‚
  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                   β”‚
  β”‚  β”‚  Data Source  │───▢│   Alert Rules    β”‚                   β”‚
  β”‚  β”‚ (Prometheus,  β”‚    β”‚                  β”‚                   β”‚
  β”‚  β”‚  InfluxDB,    β”‚    β”‚ - Condition      β”‚                   β”‚
  β”‚  β”‚  MySQL, dll)  β”‚    β”‚ - Threshold      β”‚                   β”‚
  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚ - Evaluate every β”‚                   β”‚
  β”‚                       β”‚ - Labels         β”‚                   β”‚
  β”‚                       β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                   β”‚
  β”‚                                β”‚                             β”‚
  β”‚                       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                   β”‚
  β”‚                       β”‚  Notification    β”‚                   β”‚
  β”‚                       β”‚   Policies       β”‚                   β”‚
  β”‚                       β”‚                  β”‚                   β”‚
  β”‚                       β”‚ - Route by label β”‚                   β”‚
  β”‚                       β”‚ - Grouping       β”‚                   β”‚
  β”‚                       β”‚ - Timing         β”‚                   β”‚
  β”‚                       β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                   β”‚
  β”‚                                β”‚                             β”‚
  β”‚              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”‚
  β”‚              β”‚                 β”‚                  β”‚           β”‚
  β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
  β”‚     β”‚  πŸ“± Telegram   β”‚ β”‚  πŸ“§ Email      β”‚ β”‚  πŸ”— Webhook   β”‚  β”‚
  β”‚     β”‚  Contact Point β”‚ β”‚  Contact Point β”‚ β”‚  Contact Point β”‚  β”‚
  β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
  β”‚                                                             β”‚
  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                   β”‚
  β”‚  β”‚  Silence     β”‚    β”‚  Mute Timings    β”‚                   β”‚
  β”‚  β”‚ (temporary)  β”‚    β”‚ (scheduled)      β”‚                   β”‚
  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                   β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Komponen Utama

Alur kerjanya sederhana: Alert Rule mengevaluasi data dari data source β†’ jika kondisi terpenuhi, alert dikirim ke Notification Policy β†’ policy merutekan ke Contact Point yang sesuai β†’ notifikasi sampai ke tim yang tepat.

3. Membuat Alert Rules

Alert Rule adalah jantung dari sistem alerting. Setiap rule mendefinisikan: dari mana data diambil, kondisi apa yang diuji, seberapa sering dievaluasi, dan label apa yang dilekatkan pada alert.

Langkah-langkah Membuat Alert Rule

  1. Buka Grafana β†’ sidebar kiri β†’ Alert & IRM β†’ Alert rules
  2. Klik tombol "+ New alert rule"
  3. Isi tiga bagian utama: Query, Conditions, dan Labels

Contoh: Alert CPU Usage Server

Misalnya kamu ingin membuat alert ketika CPU usage server melebihi 90% selama 5 menit:

PromQL β€” Query CPU Usage
# CPU Usage % (dari Prometheus data source)
100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

Pengaturan di halaman Alert Rule:

Pengaturan Nilai Keterangan
Rule nameHigh CPU UsageNama yang deskriptif untuk alert ini
Data sourcePrometheusSumber data metrik
Evaluate every1mSeberapa sering rule dievaluasi
Evaluate for5mBerapa lama kondisi harus terpenuhi sebelum alert aktif
Threshold conditionIS ABOVE 90Alert aktif jika nilai > 90%
Labelsseverity: criticalLabel untuk routing di notification policy

Jenis-jenis Alert Condition

Grafana mendukung berbagai jenis kondisi evaluasi:

Diagram: Jenis Alert Conditions
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚              JENIS ALERT CONDITIONS                  β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚                                                      β”‚
  β”‚  1. Threshold (Paling Umum)                          β”‚
  β”‚     ──────────────────────────────                   β”‚
  β”‚     β€’ IS ABOVE x     β†’ nilai > x                     β”‚
  β”‚     β€’ IS BELOW x     β†’ nilai < x                     β”‚
  β”‚     β€’ IS EQUALS x    β†’ nilai = x                     β”‚
  β”‚     β€’ IS OUTSIDE RANGE x-y                           β”‚
  β”‚                                                      β”‚
  β”‚  2. Has No Value                                      β”‚
  β”‚     ──────────────────────────────                   β”‚
  β”‚     Alert jika tidak ada data sama sekali            β”‚
  β”‚     Berguna untuk mendeteksi data source down        β”‚
  β”‚                                                      β”‚
  β”‚  3. Reduced Expression                                β”‚
  β”‚     ──────────────────────────────                   β”‚
  β”‚     β€’ last()     β†’ nilai terakhir                    β”‚
  β”‚     β€’ mean()     β†’ rata-rata                         β”‚
  β”‚     β€’ min()      β†’ minimum                           β”‚
  β”‚     β€’ max()      β†’ maksimum                          β”‚
  β”‚     β€’ count()    β†’ jumlah data point                 β”‚
  β”‚                                                      β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Contoh Alert Rule dengan Flux (InfluxDB)

Flux β€” Alert Suhu Kritis
from(bucket: "iot-data")
  |> range(start: -5m)
  |> filter(fn: (r) => r._measurement == "suhu_ruang")
  |> filter(fn: (r) => r._field == "suhu")
  |> aggregateWindow(every: 1m, fn: mean, createEmpty: false)
  |> last()

Pengaturan untuk alert suhu IoT:

Menggunakan Math Expression

Grafana memungkinkan membuat multiple query dalam satu rule dan mengkombinasikannya dengan expression:

Konfigurasi β€” Multi-Query Alert Rule
# Query A: CPU Usage (datasource: Prometheus)
100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

# Query B: Memory Usage (datasource: Prometheus)
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

# Expression C: Math β€” Alert aktif jika CPU > 90% ATAU Memory > 85%
$A > 90 OR $B > 85
⚠️ Hati-hati dengan Evaluate For = 0

Jika Evaluate for diisi 0s (nol detik), alert akan langsung aktif saat kondisi terpenuhi. Ini rentan terhadap false alarm akibat spike data sesaat. Untuk produksi, selalu gunakan minimal 2-5 menit agar kondisi benar-benar stabil sebelum alert dikirim.

4. Contact Points: Telegram & Email

Contact Points adalah tujuan akhir dari notifikasi alert. Grafana mendukung banyak jenis contact point: Telegram, Email, Slack, Discord, PagerDuty, webhook, dan banyak lagi. Di bagian ini, kita akan fokus pada dua yang paling populer: Telegram dan Email.

4.1 Integrasi Telegram

Telegram adalah salah satu platform terbaik untuk menerima alert karena cepat, gratis, dan mendukung bot API yang kuat.

Langkah 1: Membuat Telegram Bot

  1. Buka Telegram, cari @BotFather
  2. Kirim perintah /newbot
  3. Berikan nama bot, misalnya: Grafana Monitor Bot
  4. Berikan username bot, misalnya: grafana_monitor_bot
  5. BotFather akan mengirim API Token, simpan token ini. Format: 123456789:ABCdefGhIjKlMnOpQrStUvWxYz

Langkah 2: Mendapatkan Chat ID

Chat ID dibutuhkan agar bot tahu ke mana mengirim pesan. Ada beberapa cara:

Terminal β€” Mendapatkan Chat ID Telegram
# Cara 1: Kirim pesan dulu ke bot (klik Start), lalu akses URL ini:
curl "https://api.telegram.org/bot/getUpdates"

# Response akan berisi chat_id, contoh:
# "chat": { "id": 123456789, "first_name": "Nama", "type": "private" }

# Cara 2: Untuk grup Telegram:
# 1. Tambahkan bot ke grup Telegram
# 2. Kirim pesan apapun di grup
# 3. Jalankan curl yang sama
# Chat ID grup biasanya negatif: -1001234567890

Langkah 3: Konfigurasi Contact Point di Grafana

  1. Buka Grafana β†’ Alert & IRM β†’ Contact points
  2. Klik "+ Add contact point"
  3. Berikan nama, misalnya: Telegram Tim Ops
  4. Pilih integration: Telegram
  5. Isi pengaturan berikut:
Field Nilai Keterangan
Telegram Bot Token123456789:ABC...Token dari BotFather
Chat ID123456789ID chat/grup tujuan
Message Template(opsional)Custom template pesan

Custom Message Template Telegram

Grafana mendukung template Go untuk mengkustomisasi isi pesan alert:

Go Template β€” Custom Telegram Message
{{ define "custom.telegram.message" }}
{{ if .Alerts.Firing }}
πŸ”₯ *ALERT FIRING*
{{ range .Alerts.Firing }}
━━━━━━━━━━━━━━━━
πŸ“Œ *Rule:* {{ .Labels.alertname }}
⚠️ *Severity:* {{ .Labels.severity }}
πŸ“ *Summary:* {{ .Annotations.summary }}
πŸ’‘ *Description:* {{ .Annotations.description }}
⏰ *Time:* {{ .StartsAt.Format "02-01-2006 15:04:05" }}
{{ end }}
{{ end }}
{{ if .Alerts.Resolved }}
βœ… *ALERT RESOLVED*
{{ range .Alerts.Resolved }}
━━━━━━━━━━━━━━━━
πŸ“Œ *Rule:* {{ .Labels.alertname }}
⏰ *Resolved At:* {{ .EndsAt.Format "02-01-2006 15:04:05" }}
{{ end }}
{{ end }}
{{ end }}
πŸ’‘ Tips: Test Contact Point

Setelah menyimpan contact point, klik tombol "Test" untuk mengirim pesan percobaan. Pastikan bot sudah di-Start (untuk chat pribadi) atau sudah ditambahkan ke grup (untuk grup). Jika test berhasil, pesan akan muncul di Telegram dalam hitungan detik.

4.2 Integrasi Email (SMTP)

Email adalah channel notifikasi klasik yang cocok untuk laporan dan alert formal. Untuk mengaktifkan email, kamu perlu mengkonfigurasi SMTP di Grafana.

Konfigurasi SMTP di grafana.ini

grafana.ini β€” Konfigurasi SMTP Email
[smtp]
enabled = true
host = smtp.gmail.com:587
user = monitoring@example.com
password = app_password_kamu
from_address = monitoring@example.com
from_name = Grafana Alerting
starttls_policy = MandatoryStartTLS
skip_verify = false

[emails]
welcome_email_on_sign_up = false
templates_pattern = emails/*.html
⚠️ Gunakan App Password untuk Gmail

Jangan gunakan password Gmail biasa! Buat App Password di Google Account β†’ Security β†’ 2-Step Verification β†’ App Passwords. Pilih "Mail" dan generate password baru. Gunakan password tersebut di konfigurasi SMTP Grafana. Untuk produksi, gunakan layanan transactional email seperti SendGrid, Mailgun, atau Amazon SES.

Menambahkan Email Contact Point

  1. Buka Alert & IRM β†’ Contact points β†’ + Add contact point
  2. Pilih integration: Email
  3. Isi Addresses dengan satu atau lebih email (pisahkan dengan koma untuk multiple penerima)
  4. Opsional: centang Single email jika ingin semua alert dikirim dalam satu email
Contact Point Kelebihan Kekurangan Cocok Untuk
πŸ“± TelegramCepat, gratis, support bot API, group chatPerlu setup bot, rentan spam jika chat ID bocorTim operasional, alert real-time
πŸ“§ EmailFormal, mudah dibaca, arsip otomatisLambat, bisa masuk spam, perlu SMTP serverLaporan harian, alert manajemen
πŸ’¬ SlackCollaboration, threads, rich formattingButuh workspace SlackTim DevOps, pengguna Slack aktif
πŸ”— WebhookFleksibel, bisa integrasi ke sistem apapunPerlu endpoint sendiri, perlu handling responseIntegrasi custom, ticketing system

5. Notification Policies

Notification Policies menentukan bagaimana alert dirutekan ke contact point yang tepat berdasarkan label. Ini adalah fitur paling powerful dari Grafana Alerting yang memungkinkan kamu membangun sistem notifikasi bertingkat.

Konsep Dasar

Notification Policy bekerja seperti routing tree. Setiap alert yang masuk akan dicocokkan dengan policy berdasarkan matchers (label). Jika cocok, alert dikirim ke contact point yang ditentukan. Jika tidak cocok dengan policy manapun, alert dikirim ke default policy.

Diagram: Notification Policy Routing Tree
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚               DEFAULT POLICY (Root)                      β”‚
  β”‚               β†’ Contact: Telegram Umum                   β”‚
  β”‚               β†’ Group by: alertname                      β”‚
  β”‚               β†’ Group wait: 30s                          β”‚
  β”‚               β”‚                                          β”‚
  β”‚       β”Œβ”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                             β”‚
  β”‚       β”‚                    β”‚                             β”‚
  β”‚  severity=critical    severity=warning                   β”‚
  β”‚  β†’ Telegram On-Call   β†’ Email Tim Ops                    β”‚
  β”‚  β†’ Group wait: 0s     β†’ Group wait: 1m                  β”‚
  β”‚  β†’ Repeat: 1h         β†’ Repeat: 4h                      β”‚
  β”‚       β”‚                                                β”‚
  β”‚  team=infrastructure                                    β”‚
  β”‚  β†’ Slack #infra-alerts                                  β”‚
  β”‚  β†’ Group wait: 10s                                      β”‚
  β”‚                                                          β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Parameter Penting dalam Notification Policy

Parameter Fungsi Contoh Nilai
MatchersLabel yang harus cocok untuk routingseverity=critical, team=devops
Contact pointKe mana alert dikirimTelegram On-Call, Email Manager
Group byLabel untuk mengelompokkan alertalertname, severity
Group waitWaktu tunggu sebelum mengirim grup pertama30 detik
Group intervalWaktu tunggu antar grup5 menit
Repeat intervalSeberapa sering alert diulang jika belum resolved4 jam

Contoh Konfigurasi Notification Policy

YAML β€” Provisioning Notification Policy (opsional)
apiVersion: 1
policies:
  - orgId: 1
    receiver: telegram-umum
    group_by: [alertname]
    group_wait: 30s
    group_interval: 5m
    repeat_interval: 4h
    routes:
      - receiver: telegram-oncall
        matchers:
          - severity = critical
        group_wait: 0s
        repeat_interval: 1h
        continue: true
      - receiver: email-ops
        matchers:
          - severity = warning
        group_wait: 1m
        repeat_interval: 4h
      - receiver: slack-infra
        matchers:
          - team = infrastructure
        group_wait: 10s
        repeat_interval: 2h
πŸ’‘ Tips: Group by Labels

Pengaturan Group by sangat penting. Jika kamu set group_by: [alertname], semua alert dengan nama yang sama akan digabung dalam satu pesan notifikasi. Ini mengurangi noise. Jika kamu ingin alert per instance, tambahkan label instance ke group_by: [alertname, instance].

6. Silence & Mute Timings

Dalam operasional nyata, ada kalanya kamu perlu menonaktifkan alert sementara. Misalnya saat maintenance server, deployment aplikasi, atau jam istirahat untuk alert non-kritis. Grafana menyediakan dua fitur untuk ini: Silence dan Mute Timings.

6.1 Silence

Silence menonaktifkan alert secara temporer berdasarkan label matchers. Alert yang match akan tetap dievaluasi, tetapi notifikasi tidak dikirim.

Membuat Silence

  1. Buka Alert & IRM β†’ Alert rules
  2. Klik ikon πŸ”‡ Silence pada alert rule yang ingin di-silence, atau
  3. Buka Alert & IRM β†’ Silences β†’ + New silence
  4. Isi matcher, durasi, dan alasan
Pengaturan Keterangan Contoh
MatchersLabel untuk menentukan alert mana yang di-silencealertname=HighCPU
Start timeKapan silence mulai berlaku25 Jun 2026 22:00
End timeKapan silence berakhir26 Jun 2026 06:00
DurationBerapa lama silence berlaku8 jam
CommentAlasan silence (untuk audit)"Scheduled maintenance server DB-01"
⚠️ Jangan Lupa Matikan Silence

Silence akan otomatis berakhir sesuai waktu yang ditentukan. Namun, pastikan kamu selalu memberikan comment yang jelas mengapa silence dibuat. Ini penting untuk audit trail β€” tim lain mungkin bingung mengapa alert tidak muncul padahal ada masalah nyata.

6.2 Mute Timings

Berbeda dengan Silence yang bersifat satu kali, Mute Timings adalah jadwal berulang untuk menonaktifkan notifikasi. Misalnya: "Alert non-kritis tidak dikirim setiap hari Jumat 17:00 - Senin 08:00" atau "Alert info tidak dikirim jam 12 malam - 6 pagi".

Membuat Mute Timing

  1. Buka Alert & IRM β†’ Notification policies
  2. Tab Mute timings β†’ + Add mute timing
  3. Berikan nama dan atur jadwal
  4. Terapkan ke notification policy yang diinginkan
Konfigurasi β€” Mute Timing Weekend & Malam Hari
# Mute Timing 1: Jam Istirahat Malam
Name: malam-hari
Time intervals:
  - Start: 00:00
    End: 06:00
    Days: Monday, Tuesday, Wednesday, Thursday, Friday

# Mute Timing 2: Weekend (Sabtu-Minggu)
Name: weekend
Time intervals:
  - Days: Saturday, Sunday
    (seharian penuh)

# Terapkan ke Notification Policy untuk severity=info:
β†’ Mute timings: malam-hari, weekend
Fitur Silence Mute Timing
SifatSekali pakai (one-time)Berulang (recurring)
DurasiTentukan start & endJadwal harian/mingguan
Use CaseMaintenance, deploymentJam istirahat, weekend
Dihubungkan keAlert rule langsungNotification policy
Evaluasi alert tetap jalan?Ya, hanya notifikasi yang diblokirYa, hanya notifikasi yang diblokir

7. Dashboard Khusus Alerting

Grafana menyediakan halaman khusus untuk memantau status semua alert dalam satu tampilan. Kamu juga bisa membuat dashboard custom yang menampilkan data terkait alert.

Halaman Alert Rules

Buka Alert & IRM β†’ Alert rules untuk melihat semua alert rules beserta statusnya:

Membuat Dashboard Monitoring Alert

Kamu bisa membuat dashboard Grafana yang menampilkan informasi terkait alerting menggunakan data source Grafana (built-in). Berikut beberapa panel yang berguna:

PromQL β€” Panel Dashboard Alert Monitoring
# Panel 1: Jumlah Alert Firing Saat Ini
ALERTS{alertstate="firing"}

# Panel 2: Alert History (semua alert dalam 24 jam terakhir)
ALERTS_FOR_STATE

# Panel 3: Alert per Severity
count by (severity) (ALERTS{alertstate="firing"})

# Panel 4: Alert yang Sudah Resolved (dalam 1 jam terakhir)
count(ALERTS{alertstate="resolved"}) OR vector(0)

Panel Rekomendasi untuk Alert Dashboard

Panel Tipe Data Tujuan
Jumlah Alert FiringStatcount(ALERTS{alertstate="firing"})Overview total alert aktif
Alert per SeverityPie Chartcount by (severity) (ALERTS)Distribusi severity
Alert TimelineTime SeriesALERTS_FOR_STATEKapan alert mulai dan berakhir
Top 5 Alert RulesTabletopk(5, count by (alertname) (ALERTS))Alert paling sering firing
Alert Notification LogTableData dari Grafana audit logRiwayat notifikasi terkirim
πŸ’‘ Tips: Dashboard Annotations untuk Alert

Aktifkan annotations di dashboard untuk menampilkan garis vertikal pada grafik setiap kali alert firing atau resolved. Ini membantu mengkorelasikan perubahan metrik dengan kejadian alert. Buka Dashboard β†’ Settings β†’ Annotations β†’ Add annotation query β†’ pilih Grafana alerts.

8. Best Practices Grafana Alerting

Setelah memahami semua komponen Grafana Alerting, berikut best practices yang wajib diterapkan untuk membangun sistem alerting yang efektif dan tidak mengganggu tim.

8.1 Hindari Alert Fatigue

Alert fatigue adalah kondisi ketika tim sudah terlalu banyak menerima alert sehingga mulai mengabaikan semuanya β€” termasuk alert yang benar-benar penting. Ini adalah masalah #1 dalam sistem monitoring.

8.2 Tentukan Threshold yang Tepat

Konfigurasi β€” Contoh Threshold yang Tepat
# ❌ BURUK: Terlalu sensitif
CPU > 50% selama 0 detik
β†’ Akan firing terus-menerus!

# ❌ BURUK: Terlalu tinggi
CPU > 99% selama 30 menit
β†’ Terlambat, server sudah crash

# βœ… BAIK: Sweet spot
CPU > 90% selama 5 menit
β†’ Cukup waktu untuk konfirmasi, tidak terlambat

8.3 Gunakan Evaluate For dengan Bijak

Severity Evaluate For Alasan
Critical (server down)0 - 1 menitHarus cepat, layanan sudah terganggu
Critical (resource)3 - 5 menitKonfirmasi bahwa ini bukan spike sesaat
Warning5 - 10 menitMemberi waktu sistem pulih sendiri
Info10 - 30 menitBenar-benar memastikan tren, bukan fluktuasi

8.4 Dokumentasi dan Runbook

Setiap alert rule sebaiknya dilengkapi dengan runbook URL di bagian annotations. Runbook adalah dokumen yang menjelaskan langkah-langkah yang harus dilakukan ketika alert muncul:

Annotations β€” Runbook URL
# Annotations pada Alert Rule:
summary: "CPU usage above 90% on {{ $labels.instance }}"
description: "CPU usage is {{ $value }}% on {{ $labels.instance }} for the last 5 minutes"
runbook_url: "https://wiki.example.com/runbooks/high-cpu"

8.5 Provisioning as Code

Untuk produksi, simpan semua konfigurasi alerting dalam file YAML/JSON di repository Git. Ini memungkinkan version control, review, dan rollback:

YAML β€” Provisioning Alert Rule
apiVersion: 1
groups:
  - orgId: 1
    name: server-monitoring
    folder: infrastructure
    interval: 1m
    rules:
      - uid: high-cpu-rule
        title: High CPU Usage
        condition: C
        data:
          - refId: A
            datasourceUid: prometheus
            model:
              expr: "100 - (avg by(instance) (irate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)"
        noDataState: NoData
        execErrState: Error
        for: 5m
        annotations:
          summary: "CPU above 90%"
          runbook_url: "https://wiki.example.com/runbooks/high-cpu"
        labels:
          severity: critical
          team: infrastructure

8.6 Checklist Best Practices

βœ… Checklist Grafana Alerting Produksi
  • βœ… Semua alert rule punya label severity dan team
  • βœ… Setiap severity punya notification policy berbeda
  • βœ… Critical alert ke Telegram/Slack (real-time), Warning ke email
  • βœ… Evaluate for minimal 2 menit untuk non-critical
  • βœ… Semua alert rule punya summary dan description annotations
  • βœ… Runbook URL tersedia untuk alert yang butuh aksi manual
  • βœ… Mute timing untuk jam istirahat (alert non-kritis)
  • βœ… Konfigurasi disimpan di Git (provisioning as code)
  • βœ… Review dan test alert secara berkala
  • βœ… Dashboard monitoring alert tersedia
  • βœ… Retrospektif setelah insiden: apakah alertnya tepat?

9. Quiz: Uji Pemahamanmu!

Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang Grafana Alerting:

Pertanyaan 1: Apa fungsi utama "Evaluate for" pada Alert Rule di Grafana?

a) Menentukan seberapa sering rule dievaluasi
b) Menentukan berapa lama kondisi harus terpenuhi sebelum alert aktif
c) Menentukan durasi silence otomatis
d) Menentukan waktu pengiriman ulang notifikasi

Pertanyaan 2: Untuk mengintegrasikan Telegram dengan Grafana Alerting, informasi apa saja yang dibutuhkan?

a) Hanya Bot Token
b) Bot Token dan Chat ID
c) Username dan Password akun Telegram
d) Email dan API Key Telegram

Pertanyaan 3: Apa perbedaan utama antara Silence dan Mute Timing di Grafana?

a) Silence untuk alert critical, Mute Timing untuk alert info
b) Silence menonaktifkan evaluasi alert, Mute Timing hanya menonaktifkan notifikasi
c) Silence bersifat sekali pakai, Mute Timing bersifat berulang (recurring)
d) Tidak ada perbedaan, keduanya sama

Pertanyaan 4: Dalam Notification Policy, apa fungsi parameter "Group by"?

a) Mengelompokkan data dari beberapa data source
b) Mengelompokkan alert berdasarkan label menjadi satu notifikasi
c) Menentukan urutan prioritas contact point
d) Menggabungkan beberapa alert rule menjadi satu

Pertanyaan 5: Best practice severity "critical" untuk Evaluate for yang direkomendasikan adalah...

a) 0 detik agar langsung terkirim tanpa delay
b) 30 menit agar benar-benar yakin
c) 3-5 menit untuk mengkonfirmasi kondisi (untuk resource), 0-1 menit untuk layanan down
d) Tidak perlu Evaluate for, cukup set threshold
← Sebelumnya Grafana + InfluxDB Selanjutnya β†’ MikroTik Queue Management