Coming from Grafana? Bring your dashboards.
Connect a Grafana with a read-only token. Every dashboard comes across with its folder, tags, variables and links, and unmatched panels are listed, not hidden. Every imported query runs. Panels whose queries fail or return nothing go to a repair queue the agent repairs when you ask; placeholders are listed for you to redo by hand. The old links keep resolving, and nothing is written back.
Generated from the importer's test corpus and option catalogs at each release. Never typed.
Connect
Settings › Grafana takes a Grafana URL and a service account token with the Viewer role on the folders to import. The test counts top-level folders and dashboards; the import form shows each Grafana datasource beside its match.
Import, and import again
Choose "Import", then "All folders" and "Start import". Every dashboard comes across with its tags, variables and links, and every imported query runs. A nested folder path is kept as one folder titled Parent / Child. A second run skips dashboards unchanged in Grafana and saves a new version of those that changed; your edits stay in the version history.
Repair
Panels whose queries fail or return nothing go to a repair queue the agent works through; placeholders are listed for you to redo by hand. Those panels are marked unverified, never hidden, and "Repair with the agent" rewrites their queries against the metrics that exist and saves a version you can diff.
Keep the links
Every imported dashboard keeps its Grafana uid, so /d/<uid>/<slug> here redirects to the imported dashboard. Point the old hostname at SlashObserve and runbooks, wiki pages and alert links keep working.
| Name | URL | Last test | Last import | Actions |
|---|---|---|---|---|
| prod | https://grafana.internal | Connected: 14 top-level folders, 212 dashboards.2 min ago | Never | TestImportDelete |
| In Grafana | Type | Use in SlashObserve |
|---|---|---|
| Prometheus main | prometheus | prom (Prometheus) |
| ClickHouse events | grafana-clickhouse-datasource | ch (ClickHouse) |
| Dashboard | Folder | Unverified | Placeholders | Imported | Repair | Actions |
|---|---|---|---|---|---|---|
| Kubernetes / Pods | Platform / Kubernetes | 3 panels | 0 | 2 h ago | Repairing | Repair with the agent |
| Node exporter full | Infra | 5 panels, 1 variable | 0 | 2 h ago | Repair queued | Repair with the agent |
| Payments latency | Platform / Shop | 1 panel | 0 | 2 h ago | Repaired, still failing12 min ago | Repair with the agent |
| Ingest pipeline | Observability | 2 panels | 3 | 2 h ago | Repair failed1 h ago | Repair with the agent |
| Checkout service | Platform / Shop | 1 panel | 0 | 2 h ago | Not requested | Repair with the agent |
| Graphite legacy | Infra | None | 4 | 2 h ago | Not requested | Repair with the agent |
What maps, what changes, what waits.
How each Grafana feature comes across. The numbers above are generated from the importer at every release; this table describes the mapping.
| Grafana feature | Status | What happens on import |
|---|---|---|
| Time series, stat, gauge, bar gauge, table, text, logs, traces | Maps | Each becomes the matching ObserveSpec panel with its units, thresholds, overrides and legend, when its datasource is Prometheus or ClickHouse. |
| Template variables | Maps | Names and formats are kept, so $job and ${job:regex} expand as before. |
| Transforms | Maps | Organize, merge, reduce, filter, group by, join and the rest of the table. An unsupported transformation is dropped and reported at its path; the panel imports as partial. |
| Rows and collapsed rows | Maps | Rows become row panels; collapsed state and repeat are kept. |
| Folders, tags, dashboard links | Changes | A nested folder becomes one folder titled Parent / Child. Tags are lowercased and capped at 20. Links to an address and links by tag are kept. |
| Gradients, shadows, panel backgrounds | Changes | Drawn flat. Colour stays on data and status; the chrome is monochrome by design. |
| Stat colour mode "value" | Changes | The threshold colour pairs with an icon and a word instead of colouring the digits, so warning stays readable on white. |
| Third-party plugin panels | Changes | Worldmap, singlestat, the pie chart plugin and the discrete panel become native geomap, stat or gauge, pie chart and state timeline panels. Any other plugin imports as a placeholder that keeps its title and layout; the original dashboard JSON stays with the import record. |
| Annotations | Waits | Annotation queries are reported and not imported; built-in annotations are skipped. Add markers with observe annotate or the API. |
| Alert rules, contact points, silences | Waits | Not imported in this release. Keep Alertmanager or Grafana alerting running beside SlashObserve. |
| Other datasources | Waits | Panels on a datasource type SlashObserve does not query yet (Loki, Tempo, Elasticsearch and others) import as placeholders that keep the title, layout and reason. The original dashboard JSON stays with the import record. |
The same import, scripted.
Everything the Settings page does is a verb, so a migration can run from CI or a runbook and be repeated.
Import your dashboards this afternoon.
Point it at a Grafana you can read, or run the demo stack's own export through the importer. Nothing is written back.