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?"
- Lapis 1 โ Apakah ada masalah? Satu baris berisi 4โ6 stat: ketersediaan, error rate, latency p95, throughput. Terbaca dari jarak tiga meter.
- Lapis 2 โ Di mana masalahnya? Grafik per layanan atau per komponen. Menunjukkan siapa yang menyimpang.
- Lapis 3 โ Kenapa? Detail: per instance, per endpoint, saturasi resource, log terkait. Taruh di baris yang collapsed.
Dua Metode Baku
| Metode | Untuk | Metrik |
|---|---|---|
| RED | Layanan yang melayani request | Rate, Errors, Duration |
| USE | Sumber 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
{
"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 */ ]
}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.
"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.
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).
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
descriptionsetiap 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
/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 layarUntuk 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.