Dashboards
The four ways to create a dashboard, and its panels, sections, variables, and templates
One dashboard is one definition document, made of four parts.
{
"schemaVersion": 1,
"variables": [ ... ], // values picked at the top of the screen
"sections": [ ... ], // groups of panels
"panels": [ ... ], // the tiles; each has one or more queries
"settings": { ... } // default time range, refresh, timezone
}Building one in the editor stores the same document. Field-level syntax is in the Definition JSON reference.
Four ways to create one
| Path | When | Result |
|---|---|---|
| From a template | Starting out — copy a built-in template. | A copy is saved in your workspace; the template itself is untouched. |
| Blank dashboard | Composing panels from scratch | Starts from an empty definition you fill in the editor. |
| Import JSON | Uploading a document exported elsewhere, or one written by hand | Validated first, then saved under a name you choose. |
| Connect a repository | Managing definitions in Git | JSON files under the connected directory become dashboards, and each commit is applied. |
Dashboards that come from a repository can still be edited on screen, and the edited definition can be written back to the file with "Push to repository". Edits you do not push are overwritten the next time that file is committed.
Panels
A panel is one tile. It is placed on a 12-column grid with layout (x, y, w, h), and visualization.type decides how it is drawn.
The visualization does not decide the shape of the result. The query's output.type does; the visualization only has to be compatible with it.
| Visualization | Required result shape | Used for |
|---|---|---|
TIME_SERIES | TIME_SERIES | A trend over time. Multiple series come from groupBy. |
NUMBER | SCALAR | A single number — error rate, availability, anything answered with one value. |
TABLE | TABLE | A table with axis columns and value columns. |
BAR | TABLE | Bars per category, using one axis of the table as the category. |
PIE | TABLE | Share per category. |
HISTOGRAM | HISTOGRAM | Bucket distribution. Only histogram metrics can produce it. |
LOGS | TABLE | Raw log lines. Used with a records query. |
TRACES | TABLE | A list of traces; a row opens the trace detail. |
Queries
A panel can hold several queries (up to 20), each identified by refId. Queries in the same panel can be divided with ratio — an error rate is two queries (errors, total) plus one query that points at them.
Sections
A section groups panels: a title plus panelIds. If it points at a panel that does not exist, the definition is rejected.
Variables
Variables are the values picked at the top of the screen. The picked value is not stored in the definition — the definition only holds the name and where to read candidate values; the selection arrives with each request.
| Type | Value list | Used for |
|---|---|---|
SERVICE | Service names in the workspace | Picking a service — the most common variable. |
ATTRIBUTE | Attribute values actually collected | Values of the axis given by source.signal and source.field — environment, pod name, and so on |
TEXT | None (typed in) | Values with no candidates to list, such as a search term |
CUSTOM | A fixed list written in the definition | A fixed list that does not read from storage |
Filters reference a variable as ${name}. The whole value must be the reference — prefix-${name} is rejected.
ALL is special: picking it removes the filter that uses that variable entirely — "all" is not a value, it means "do not filter". A multi variable accepts several values, and when more than one is bound, even an EQ filter is promoted to IN.
Settings
| Field | Values | Default |
|---|---|---|
defaultTimeRange | LAST_30_MIN · LAST_1_HOUR · LAST_6_HOURS · LAST_24_HOURS · LAST_7_DAYS | LAST_1_HOUR |
refreshInterval | NONE · 10s · 30s · 1m · 5m | 30s |
timezone | BROWSER · UTC | BROWSER |
One refresh issues as many queries as there are panels. A short interval on a large dashboard costs accordingly.
Built-in templates
A shared catalog, independent of any workspace. Picking one copies its definition into a new dashboard.
| Template | Category | Shows |
|---|---|---|
| Service RED | APPLICATION | Rate, errors, and duration for a service, plus the deployed version |
| Trace Analysis | APPLICATION | Slow spans, failing paths, service-to-service calls |
| API Endpoint Performance | APPLICATION | Throughput, errors, latency per route (services sending http.route) |
| Application Metrics | APPLICATION | HTTP throughput and latency plus runtime state (http.server.* metrics) |
| Application Logs | APPLICATION | Log volume by service and level, plus the raw lines |
| Logs & Errors | APPLICATION | Error log trend and its spread over severity and service |
| Database Dependencies | DATA | Slow queries, call volume, errors per dependency (db.system client spans) |
| Deploy Impact | DEPLOY | Rate, errors, latency before and after a deploy, compared by version |
| Service Resources | INFRA | Pod CPU, memory, network, restarts (k8s.* metrics) |
| Kubernetes Workloads | INFRA | Restarts, CPU, memory per namespace and pod (k8s.* metrics) |
| Infrastructure Capacity | INFRA | Host CPU, memory, disk, network saturation (system.* metrics) |
| LLM Gateway | AI | Call volume, latency, token usage per model (gen_ai.* attributes) |
If you are not sending the signals a template reads, its panels stay empty. A workspace that does not collect k8s.* or system.* metrics, for example, gets no values in the infrastructure templates. Check the instrumentation each template expects first.
Limits
| Subject | Limit |
|---|---|
| Grid width | 12 columns (layout.x + layout.w cannot exceed 12) |
| Panel height | 24 |
| Queries per panel | 20 |
| Panels executed at once | 30 |
groupBy axes | 5 |
Value columns per table (measures) | 8 |
| Time series | 20 by default, 100 maximum (limit) |
| Points per series | 1,500 — beyond that the bucket width grows |
| Raw record rows | 200 per page — continued with a cursor |
Next
Field-by-field meaning and validation rules are in the Definition JSON reference; import, export, and repository sync are in Building dashboards as JSON.