4.5 KiB
4.5 KiB
Dashboard + panel JSON schema
Dashboard root
{
"title": "My Dashboard",
"uid": "my-dashboard-v1",
"tags": ["service", "production"],
"time": { "from": "now-1h", "to": "now" },
"refresh": "30s",
"timezone": "browser",
"schemaVersion": 41,
"templating": { "list": [] },
"annotations": { "list": [] },
"panels": []
}
uid— stable identifier; keep shortschemaVersion—41for Grafana 11+time.from/to— relative (now-1h) or absolute ISOrefresh—"30s","1m","5m",""(off)
Panel
{
"id": 1,
"type": "timeseries",
"title": "Request Rate",
"gridPos": { "x": 0, "y": 0, "w": 12, "h": 8 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [{
"expr": "sum(rate(http_requests_total{job=\"$job\"}[5m])) by (status_code)",
"legendFormat": "{{status_code}}",
"refId": "A"
}],
"fieldConfig": {
"defaults": {
"unit": "reqps",
"thresholds": { "mode": "absolute", "steps": [
{ "color": "green", "value": null },
{ "color": "yellow", "value": 1000 },
{ "color": "red", "value": 5000 }
]}
},
"overrides": []
},
"options": {
"legend": { "calcs": ["mean","max","last"], "displayMode": "table", "placement": "bottom" },
"tooltip": { "mode": "multi", "sort": "desc" }
}
}
gridPos: 24-column grid. Widths: full=24, half=12, third=8, quarter=6. Height 1 unit ≈ 30 px.
Panel types
| Panel | Use case |
|---|---|
| Time series | Any metric over time |
| Stat | Single value + sparkline |
| Gauge | % or value against min/max |
| Bar gauge | Side-by-side comparison |
| Table | Multi-column data |
| Heatmap | Distribution over time |
| Logs | Loki log streams |
| Traces | Tempo trace search |
| Text | Markdown docs |
| Candlestick | OHLC / min-max-avg |
| Node graph | Service dependency graph |
Useful units
reqps requests/sec
ops ops/sec
Bps bytes/sec
percentunit 0.0-1.0 as %
bytes bytes (auto-scales)
decbytes decimal bytes (1 KB = 1000 B)
ms / s milliseconds / seconds
dtdurationms 1h 2m 3s
short compact (1.2k, 3.4M)
none raw number
Template variables
{ "name":"job", "type":"query", "datasource":{"type":"prometheus","uid":"prometheus"},
"query":{"query":"label_values(up, job)","refId":"A"},
"refresh":2, "includeAll":true, "multi":true, "label":"Service" }
{ "name":"cluster", "type":"constant", "query":"production", "label":"Cluster" }
{ "name":"datasource", "type":"datasource", "pluginId":"prometheus",
"includeAll":false, "label":"Prometheus" }
Multi-value variables expand to a regex OR: $job=["api","worker"] → job=~"api|worker".
Chained: label_values(kube_pod_info{namespace=\"$namespace\"}, pod).
Transformations
"transformations": [
{ "id": "merge", "options": {} },
{ "id": "organize", "options": {
"renameByName": { "Value #A": "Request Rate", "Value #B": "Error Rate" },
"excludeByName": { "Time": true }
}},
{ "id": "calculateField", "options": {
"alias": "Error %", "mode": "reduceRow",
"reduce": { "reducer": "last" },
"binary": { "left": "errors", "right": "total", "operator": "/" }
}},
{ "id": "filterByValue", "options": {
"filters": [{ "fieldName":"Error %", "config":{ "id":"greater", "options":{ "value":0.01 }}}],
"type": "include", "match": "any"
}}
]
Common IDs: merge, organize, rename, calculateField, filterByValue, groupBy, sortBy, limit, labelsToFields, seriesToRows, partitionByValues.
Links & annotations
"links": [
{ "title":"Go to details", "url":"/d/details?var-service=${__field.labels.service}", "targetBlank":false },
{ "title":"Runbook", "url":"https://wiki.example.com/runbook/${job}", "icon":"external link",
"targetBlank":true, "type":"link" }
]
Built-in vars: ${__value.raw}, ${__field.labels.job}, ${__url.params}, ${__from} / ${__to} (Unix ms).
Loki annotation:
{ "datasource":{"type":"loki","uid":"loki"},
"expr":"{job=\"deployments\"} |= \"deployed\"",
"name":"Deployments", "iconColor":"blue",
"titleFormat":"{{service}} deployed", "textFormat":"{{version}} by {{author}}" }
Prometheus annotation:
{ "datasource":{"type":"prometheus","uid":"prometheus"},
"expr":"changes(kube_deployment_status_observed_generation{namespace=\"production\"}[5m]) > 0",
"step":"60s", "name":"Deployments", "iconColor":"blue",
"titleFormat":"Deploy: {{deployment}}" }