Kodeloka
  1. Kodeloka
  2. Kelas Grafana
  3. Materi

Modul 10 ยท Modul 10 dari 15

Merancang Dashboard yang Dipakai: Baris, Anotasi, Tautan

Menyusun dashboard mengikuti cara orang membacanya saat panik, memakai metode RED dan USE, serta menandai peristiwa penting pada grafik.

Dashboard Dibaca oleh Orang yang Sedang Panik

Pertanyaan perancangan yang benar bukan "informasi apa yang bisa saya tampilkan", melainkan "apa yang perlu dilihat seseorang pukul 03:00 saat pager berbunyi, dalam sepuluh detik pertama?"

๐ŸŽฏ Hierarki tiga lapis
  1. Lapis 1 โ€” Apakah ada masalah? Satu baris berisi 4โ€“6 stat: ketersediaan, error rate, latency p95, throughput. Terbaca dari jarak tiga meter.
  2. Lapis 2 โ€” Di mana masalahnya? Grafik per layanan atau per komponen. Menunjukkan siapa yang menyimpang.
  3. Lapis 3 โ€” Kenapa? Detail: per instance, per endpoint, saturasi resource, log terkait. Taruh di baris yang collapsed.

Dua Metode Baku

MetodeUntukMetrik
REDLayanan yang melayani requestRate, Errors, Duration
USESumber daya (CPU, disk, memori, pool)Utilization, Saturation, Errors

Dashboard layanan yang lengkap biasanya memakai RED di bagian atas untuk gambaran pelanggan, dan USE di baris tertutup di bawah untuk mencari penyebab.

Baris (Row) โ€” Struktur, Bukan Hiasan

rowjson
{
  "type": "row",
  "title": "Detail per Instance",
  "collapsed": true,
  "gridPos": { "h": 1, "w": 24, "x": 0, "y": 20 },
  "repeat": "layanan",
  "panels": [ /* panel di dalam row tertutup disimpan di sini */ ]
}
๐Ÿ’ก Row tertutup = panel tidak dieksekusi

Panel di dalam row yang collapsed: true tidak menjalankan kueri sampai row dibuka. Ini teknik optimasi paling sederhana dan paling efektif untuk dashboard besar: taruh semua detail di row tertutup, dan biarkan lapis 1 memuat instan.

Anotasi โ€” Menjawab "Apa yang Berubah?"

Anotasi menggambar garis vertikal atau area pada grafik untuk menandai peristiwa. Nilainya besar: sebagian besar insiden disebabkan oleh perubahan, dan anotasi membuat korelasinya terlihat seketika.

sumber anotasijson
"annotations": {
  "list": [
    {
      "name": "Deploy",
      "datasource": { "type": "prometheus", "uid": "prom-utama" },
      "enable": true,
      "iconColor": "blue",
      "expr": "changes(app_build_info[5m]) > 0",
      "titleFormat": "Deploy {{layanan}}",
      "textFormat": "versi {{versi}}"
    },
    {
      "name": "Insiden",
      "datasource": { "type": "grafana" },
      "enable": true,
      "iconColor": "red",
      "filter": { "exclude": false, "ids": [] },
      "target": { "type": "tags", "tags": ["insiden"], "matchAny": false }
    },
    {
      "name": "Alert aktif",
      "datasource": { "type": "grafana" },
      "enable": true,
      "iconColor": "orange",
      "target": { "type": "dashboard", "limit": 100 }
    }
  ]
}

Anotasi juga bisa dikirim lewat API โ€” pola yang sangat berguna adalah menambahkan satu langkah di pipeline CI/CD yang mencatat setiap deploy.

anotasi dari pipelinebash
curl -sS -X POST http://grafana:3000/api/annotations \
  -H "Authorization: Bearer $GRAFANA_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{
    \"time\": $(date +%s000),
    \"tags\": [\"deploy\", \"$LAYANAN\", \"$LINGKUNGAN\"],
    \"text\": \"Deploy $LAYANAN versi $VERSI oleh $CI_ACTOR\"
  }"

Dashboard Links dan Panel Links

  • Dashboard link (tipe dashboards) โ€” tautan ke semua dashboard bertag tertentu. Aktifkan Include current time range dan Include current variable values agar konteks ikut berpindah.
  • Dashboard link (tipe link) โ€” URL bebas: runbook, papan insiden, dokumentasi arsitektur.
  • Panel link โ€” muncul di sudut panel, untuk konteks spesifik panel itu.
  • Data link โ€” pada titik data; membawa nilai dan label ke tujuan (lihat bab 7).
โš ๏ธ Tanpa "include variables", tautan kehilangan konteks

Pengguna sedang melihat produksi/cluster-jkt, mengklik tautan ke dashboard detail, dan mendapat dashboard dengan variabel default โ€” kembali ke staging. Alur investigasi terputus dan orang harus memilih ulang semuanya secara manual.

Praktik Baik yang Terbukti

  • Judul yang menyatakan sesuatu. "Error rate melewati SLO?" lebih baik daripada "Errors".
  • Isi description setiap panel. Terutama kueri yang tidak jelas โ€” ikon info menyelamatkan rekan tim.
  • Panel teks di paling atas. Satu paragraf: dashboard ini untuk apa, siapa pemiliknya, tautan runbook.
  • Batasi 12โ€“15 panel terlihat. Selebihnya masukkan row tertutup.
  • Beri tag konsisten: tim:pembayaran, tingkat:layanan, produksi.
  • Uji di lebar layar target. Dashboard untuk TV ruang operasi harus dirancang di resolusi TV, bukan laptop.

Mode Kiosk untuk Layar Operasi

URL kiosktext
/d/<uid>/<slug>?kiosk&refresh=1m&theme=light&from=now-6h&to=now

kiosk        sembunyikan menu dan chrome
kiosk=tv     sembunyikan menu, sisakan header
&autofitpanels    panel mengisi tinggi layar

Untuk rotasi beberapa dashboard di satu layar, gunakan Playlist. Pasangkan dengan akun khusus ber-peran Viewer dan token yang berumur panjang, jangan memakai akun pribadi seseorang.