Dashboard Hanyalah Sebuah Dokumen JSON
Semua yang Anda klik di UI berujung pada satu dokumen JSON. Membaca JSON model adalah keterampilan yang memisahkan pengguna Grafana dari orang yang benar-benar menguasainya: ia membuat Anda bisa mendiagnosis masalah, melakukan review lewat Git, dan mengedit 40 panel dengan satu perintah sed.
{
"uid": "bayarcepat-ikhtisar",
"title": "BayarCepat — Ikhtisar Layanan",
"tags": ["produksi", "bayarcepat"],
"timezone": "browser",
"editable": true,
"schemaVersion": 39,
"version": 12,
"refresh": "30s",
"time": { "from": "now-6h", "to": "now" },
"timepicker": {
"refresh_intervals": ["10s","30s","1m","5m","15m","1h"],
"hidden": false
},
"templating": { "list": [] },
"annotations": { "list": [] },
"links": [],
"panels": []
}Properti yang Sering Salah Dipahami
| Properti | Arti | Jebakan |
|---|---|---|
uid | Identitas permanen dashboard, dipakai di URL | Berubah = seluruh tautan lama mati |
id | ID numerik internal per instansi | Harus null saat impor ke instansi lain |
version | Nomor revisi | Salah versi saat simpan lewat API = konflik ditolak |
schemaVersion | Versi format JSON | Grafana memigrasikan otomatis, tidak bisa turun versi |
timezone | browser / utc / Asia/Jakarta | browser membuat screenshot tim beda-beda |
Anatomi Satu Panel
{
"id": 3,
"type": "timeseries",
"title": "Throughput per Layanan",
"description": "Request per detik, dikelompokkan per layanan.",
"datasource": { "type": "prometheus", "uid": "prom-utama" },
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 0 },
"targets": [
{
"refId": "A",
"expr": "sum by (layanan) (rate(http_requests_total{env=\"$env\"}[$__rate_interval]))",
"legendFormat": "{{layanan}}",
"interval": ""
}
],
"fieldConfig": {
"defaults": {
"unit": "reqps",
"min": 0,
"custom": { "lineWidth": 2, "fillOpacity": 10 },
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "green", "value": null },
{ "color": "red", "value": 500 }
]
}
},
"overrides": []
},
"options": {
"legend": { "displayMode": "table", "placement": "bottom", "calcs": ["mean","max"] },
"tooltip": { "mode": "multi", "sort": "desc" }
},
"transformations": []
}targets— kueri. Satu panel boleh punya banyak kueri (refId A, B, C…).fieldConfig— bagaimana nilai ditampilkan: unit, desimal, threshold, warna. Berlaku untuk semua tipe panel.options— pengaturan khas tipe panel: legenda, tooltip, orientasi.transformations— pengolahan data frame sebelum digambar.
Sistem Grid
Kanvas dashboard selalu selebar 24 unit, apa pun ukuran layar. Tinggi satu unit ±30 piksel.
┌──────────────── 24 unit ─────────────────┐
│ w:6 w:6 w:6 w:6 │ baris stat, h:4
├──────────────────┬───────────────────────┤
│ w:12 h:8 │ w:12 h:8 │ dua grafik
├──────────────────┴───────────────────────┤
│ w:24 h:10 │ tabel lebar penuh
└──────────────────────────────────────────┘
gridPos: { x: kolom mulai (0-23), y: baris, w: lebar, h: tinggi }Lebar yang enak dipakai: 24 (penuh), 12 (setengah), 8 (sepertiga), 6 (seperempat). Hindari lebar ganjil seperti 7 atau 11 — barisnya jadi tidak rata.
Time Range dan Refresh
Time range dashboard diteruskan ke setiap kueri sebagai from dan to. Ada tiga cara ia ditentukan, dengan prioritas dari atas:
- Parameter URL:
?from=now-24h&to=now— menang atas segalanya. - Pilihan pengguna di time picker (tersimpan sementara di sesi).
- Properti
timedi JSON dashboard.
Dashboard dengan 20 panel dan refresh 5s yang dibuka 10 orang menghasilkan 240 kueri per detik ke data source Anda. Prometheus akan sibuk melayani dashboard alih-alih melakukan scrape.
Batasi di sisi server agar tidak bergantung pada disiplin pengguna:
[dashboards]
min_refresh_interval = 10sURL Dashboard yang Perlu Anda Kuasai
/d/<uid>/<slug> buka dashboard
?from=now-24h&to=now time range absolut/relatif
&var-env=produksi&var-layanan=api isi variabel
&viewPanel=3 satu panel layar penuh
&editPanel=3 langsung ke editor panel
&kiosk mode kios (tanpa menu) untuk TV
&refresh=1m paksa interval refresh
&theme=light tema, berguna untuk screenshotslug hanya kosmetik — yang mengikat adalah uid. Karena itu mengganti judul dashboard aman, mengganti UID tidak.