# Dashboards

> Ask your agent for a dashboard and get back a stable, shareable link to live panels over your logs, traces, and metrics, which it updates in place when you ask for changes.

A dashboard in Fixter is a question you have already answered, kept as a live page with a
stable link. You do not build one by hand. You describe what you want to watch, your
agent composes the panels, Fixter checks every panel against your live data, and you get
back a link to paste into an incident channel or a runbook.

Ask your [connected agent](/setup/mcp/) for one, or open
[Dashboards](https://app.fixter.dev/dashboards) in the app to find the ones you already
have.

## Before you start

- **An agent connected over MCP.** Dashboards are created only through an agent. In
  Claude Code the [plugin](/setup/claude-code-plugin/) adds a `composing-dashboards`
  skill; any other MCP agent uses the same tools directly.
- **An environment on your telemetry.** Every dashboard over logs or traces is scoped to
  one deployment environment, read from the `deployment.environment.name` resource
  attribute. If none of your telemetry carries it, a dashboard over logs or traces cannot
  be created. [Name the environment](/setup/opentelemetry/#name-the-environment) shows
  the one line that sets it. A dashboard built only from metrics is the exception.

## Ask for a dashboard

Describe what you want to see and who it is for:

```
Make a dashboard for checkout in production: request rate, error rate, and p95
latency over the last 24 hours, plus the ten slowest endpoints.
```

The guide Fixter hands your agent for composing dashboards has it work in this order:

1. **It looks for one that already exists.** If a dashboard already answers the question,
   it offers to change that one rather than create a second link to the same answer.
2. **It asks what it cannot look up.** Typically which environment, and whether the
   dashboard is for an incident (a short range that refreshes) or a weekly review (a long
   range that does not).
3. **It tests every query first.** Each panel's query runs against your data before it
   becomes a panel, so the agent chooses the chart form from real rows rather than
   guessing.
4. **It creates the dashboard.** Fixter runs every panel against your live data again
   and reports anything wrong: empty panels, too many series for a legend, a missing
   environment scope. Errors stop the dashboard being created; warnings come back
   alongside the link.

What you get back is a link and an id:

```
https://app.fixter.dev/dashboards/checkout-production?range=24h&refresh=1m
```

The last part of the path is a readable name taken from the dashboard's title. Open the
link to check it before you share it. The id is what your agent uses to change the
dashboard later.

Any MCP agent can do this with the [dashboard tools](/reference/mcp/tools/#dashboards):
`list_dashboards` to check for an existing one, `describe_dashboards` for the format,
`run_sql` to test each query, then `mint_dashboard`.

<!-- fx-image: a dashboard at /dashboards/<slug> with the environment selector, a row of stat tiles, a latency line with a deploy marker, and a toplist of slow endpoints -->

## What a dashboard can show

| Panel | Use it for |
| --- | --- |
| Time series | a value sampled continuously, such as latency or queue depth |
| Bars | a count or sum per interval, such as errors per hour, or anything sparse |
| Stat | one headline number |
| Toplist | ranking something over the window, such as the slowest endpoints |
| Pie or donut | the share of a whole, such as requests by region |
| Heatmap | one measure across many services or hosts |
| Table | several measures per row, read side by side |

On top of the panels, a dashboard can carry:

- **Selectors.** A dropdown for the environment on every dashboard, and others you ask
  for, such as service or host.
- **Threshold lines.** A labelled level on a time series or bar chart, such as an SLO
  or a memory limit.
- **Markers.** Vertical lines across every time panel, typically at each deploy.
- **Sections, a default time range, and a refresh interval.**

## Change a dashboard

Ask for the change in the same way:

```
On the checkout dashboard, split the error rate by region and add a line at 2%.
```

Your agent reads the stored dashboard, edits it, and saves it under the same id. The link
does not change, so everyone who already has it sees the new version. If you do not
remember what a dashboard is called, ask your agent to list your dashboards first.

## Link to a specific view

A dashboard link can carry the view you want someone to land on. Add these to the end of
the link:

| Parameter | Effect | Example |
| --- | --- | --- |
| `range` | the time window, in minutes, hours, or days | `range=1h` |
| `from` and `to` | a fixed window, as ISO 8601 times; leave out `range`, which wins if both are present | `from=2026-09-14T08:00:00Z&to=2026-09-14T10:00:00Z` |
| `refresh` | how often it refreshes; `0` turns refresh off | `refresh=30s` |
| `var-<name>` | preselects a selector | `var-env=staging` |

For example, the checkout dashboard over the last hour in staging:

```
https://app.fixter.dev/dashboards/checkout-production?range=1h&var-env=staging
```

## In the app

The [Dashboards](https://app.fixter.dev/dashboards) page lists every dashboard your
account has, newest first. It shows the 100 most recently updated; search by title to
reach the rest.

- **Rename** changes the title, and the link keeps working. Under **Change the link** you
  can also change the readable part of the link, which breaks every copy of the old link
  already shared.
- **Delete** removes the dashboard. Its link stops working for everyone who has it, and
  the panels cannot be recovered.

## If a dashboard does not come out right

- **Your agent says the environment selector has no options.** None of the telemetry in
  the window carries `deployment.environment.name`. Set it as shown in
  [Name the environment](/setup/opentelemetry/#name-the-environment), redeploy, and ask
  again once new data has arrived.
- **Your agent says a dashboard with that title already exists.** Two dashboards cannot
  share a title. Ask it to change the existing one instead, or to use a different title.
- **A panel is empty.** Creating the dashboard warns about this. Either nothing happened
  in that window, or the query filters on a value your data does not have. Ask your agent
  to widen the range or check the filter.
- **A shared link stopped working.** The dashboard was deleted or its link was changed.
  Find the current link on the [Dashboards](https://app.fixter.dev/dashboards) page, or
  ask your agent to list your dashboards.

Still stuck? Email [info@fixter.dev](mailto:info@fixter.dev) and one of our founders will help you fix your problem asap.

## Related

- [Debugging](/using-fixter/debugging/): answering the question in the first place
- [MCP tools](/reference/mcp/tools/#dashboards): the dashboard tools an agent calls
- [QuerySQL](/reference/querysql/): the query language every panel is written in
- [OpenTelemetry](/setup/opentelemetry/#name-the-environment): setting the environment attribute