A starting-point dashboard you can import in seconds
Building a Grafana dashboard by hand in the UI is fine for one panel and tedious for ten. This builder emits a clean, importable dashboard JSON stub — title, time range, refresh, datasource binding, template variables, and a grid of panels each pre-wired to a PromQL query — so you start from a working layout instead of a blank canvas.
How it works
The tool constructs the JSON Grafana expects on import. The dashboard object carries your title, a null uid (so Grafana assigns a fresh one), a current schemaVersion, a time range, a refresh interval, and a timezone. Each template variable becomes a query-type entry running label_values(<name>) against your Prometheus datasource. Each panel you add gets a sequential id, your chosen panel type (timeseries, stat, gauge, bargauge, or table), a gridPos laid out two-per-row, and a single target holding your PromQL expr. The whole structure is JSON.stringify-formatted in your browser, ready to paste into Dashboards then Import.
Anatomy of the generated JSON
Understanding the key fields in the output helps you edit it confidently after import:
uid: null— Grafana generates a unique identifier on import. Set a stable value if you provision dashboards as code (GitOps) so the URL does not change across updates.schemaVersion— Grafana uses this to migrate dashboards from older formats. Leave it at the value the builder emits unless you are targeting a specific Grafana version.templating.list— each variable here creates a dropdown filter. Thelabel_valuesquery populates it from your Prometheus metric labels at load time.gridPos— controls the panel’s position and size on the canvas. The builder uses a two-column layout (width 12, height 8). After import, drag and resize panels in the visual editor.targets[0].expr— the raw PromQL expression. This is where you paste queries likerate(http_requests_total{job="$job"}[5m]), referencing your template variables with$variablesyntax.
Choosing panel types
| Panel type | Best for |
|---|---|
| timeseries | Rates, counters, latency over time |
| stat | Single current values: uptime, error count, active connections |
| gauge | Values with a known min/max range: CPU %, disk usage |
| bargauge | Comparing the same metric across multiple instances |
| table | Raw label sets, inventory data, multi-column breakdowns |
Finding your datasource UID
Every Grafana datasource has a stable UID you must supply when building the JSON. Find it in Grafana under Connections → Data sources, click your Prometheus source, and look at the URL — it ends with the UID, for example /connections/datasources/edit/abc123def456. The same string also appears in the datasource settings panel under the name field. Pasting the wrong UID means panels silently show no data after import.
Tips
- Add
instanceandjobtemplate variables so a single dashboard filters across every scraped target. Reference them in queries with{job="$job", instance="$instance"}. - Treat the output as a scaffold: import it, then refine thresholds, units, and legends in Grafana’s visual editor. Setting units (bytes, milliseconds, percent) in the panel options transforms raw numbers into readable displays.
- For GitOps workflows, store the JSON file in version control and provision it via Grafana’s dashboard provisioning config rather than using the import UI every time.