> ## Documentation Index
> Fetch the complete documentation index at: https://arize-ax.mintlify.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Set Up Dashboards

> Build dashboards to track your app's health, token usage, eval scores, and experiment results at a glance

You've defined [custom metrics](/ax/observe/projects/custom-metrics-api) to measure what matters. Dashboards put those metrics — plus token counts, latency, error rates, and eval trends — on one page you can check daily.

Two ways to get started: pick a pre-configured template or start with a blank dashboard. Either way, you shape the dashboard by adding widgets.

## Start from a template or build a custom dashboard

Go to **Dashboards** in the sidebar and click **+ New Dashboard**. Pick a **template** for a pre-configured layout, or **Blank Dashboard** to start from scratch.

<Frame>
  <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/dashboard_template.png" alt="Dashboard Templates selection showing available starter dashboards" />
</Frame>

For LLM tracing projects, two templates cover most needs:

### Tracing Project Overview

A comprehensive view of project health:

* **Trace Volume and Errors**: total requests and error counts
* **Latency**: average span latency and distribution
* **Model Performance**: token count and cost per model
* **Token Usage**: prompt, completion, and total tokens over time
* **Average Cost**: cost over time (if cost tracking is set up)
* **Average Eval Scores**: eval score trends over time

<Frame>
  <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/tracing_project_overview.png" alt="Tracing Project Overview dashboard showing traces over time, latency, distribution, and token usage widgets" />
</Frame>

### Token Tracking and Latency

Focused on usage and performance:

* **Total and Average Token Counts**: prompt and completion tokens over time
* **Number of Requests**: request volume
* **Average Latency**: response time trends

<Frame>
  <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/token_tracking.png" alt="Token Tracking and Latency dashboard showing token counts, request volume, and latency" />
</Frame>

## Add a widget

Every dashboard, template or blank, is shaped by the widgets you add. Open a dashboard and click **+ Add Widget** in the top right. You'll see a list of widget types: Time Series, Distribution, Statistic, Pivot Table, Scatter Plot, Text, Experiment, and more. Pick one to open the widget config.

<Frame>
  <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/custom_dashboard.png" alt="Creating a dashboard widget with configuration panel" />
</Frame>

Inside the widget config, the **Metric** dropdown lets you pick a specific span metric under **Span Metrics**, or a roll-up like **Trace Average** or **Session Average**. Pick the level you actually want to measure.

<Tip>
  **Span-level vs. trace-level.** Metrics under **Span Metrics** count every span. A count of 1,000 error spans could be 1,000 failing requests, or 10 failing traces with 100 errors each. Pick **Trace Average** or **Session Average** from the Metric dropdown to roll up to trace-level or session-level numbers.
</Tip>

The widget types below are the ones customers reach for most. Pick a tab to see configuration and a real example.

<Tabs>
  <Tab title="Time Series">
    Time Series widgets show how a metric changes over time. A good first widget: p95 latency for LLM spans, so you can see slow responses at a glance.

    * **Widget type:** Time Series
    * **Metric:** p95 latency (add a [custom metric](/ax/observe/projects/custom-metrics-api) using `APPROX_QUANTILE`)
    * **Filter:** `attributes.openinference.span.kind = 'LLM'`

    <Frame>
      <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/count.png" alt="Time Series widget showing p95 latency trending over time" />
    </Frame>
  </Tab>

  <Tab title="Eval score">
    Most production dashboards track an eval score over time — hallucination, relevance, or QA correctness. A Time Series of the Hallucination Eval Score tells you whether response quality is trending up or down.

    * **Widget type:** Time Series
    * **Metric:** Hallucination Eval Score — add a [custom metric](/ax/observe/projects/custom-metrics-api):

    ```sql theme={null}
    -- Hallucination rate percentage
    SELECT COUNT(*) FILTER (WHERE "eval.Hallucination.label" = 'hallucinated') /
           COUNT(*) FILTER (WHERE "eval.Hallucination.label" IS NOT NULL) * 100
    FROM MODEL
    ```

    <Frame>
      <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/dashboard_eval.png" alt="Time Series widget showing Hallucination Eval Score trending over time" />
    </Frame>
  </Tab>

  <Tab title="Statistic">
    Statistic widgets show a single aggregate value — the current state of things. Pair them with a Time Series for a "right-now" reading alongside the trend.

    * **Widget type:** Statistic
    * **Metric:** error rate as a percentage ([custom metric](/ax/observe/projects/custom-metrics-api) using `COUNT(*) FILTER (WHERE "status_code" = 'ERROR') / COUNT(*)`)

    <Frame>
      <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/total_token_count.png" alt="Statistic widget showing current error rate" />
    </Frame>
  </Tab>

  <Tab title="Distribution">
    Distribution widgets show the spread of values across a dimension. Group errors by `graph.node.id` to see which part of your agent is failing most.

    * **Widget type:** Distribution
    * **Metric:** count of error spans
    * **Group by:** `attributes.graph.node.id`

    <Frame>
      <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/distribution.png" alt="Distribution widget showing error counts by agent node" />
    </Frame>
  </Tab>

  <Tab title="Pivot Table">
    Pivot Table widgets compare a metric across categories in a table. Group by span kind to see how latency breaks down across LLM, Retriever, Tool, and Agent spans at a glance.

    * **Widget type:** Pivot Table
    * **Group By Dimension:** `attributes.openinference.span.kind`
    * **Value:** `latency_ms` with Metric **Avg**, labeled "Average Latency"

    <Frame>
      <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/pivot_overview.png" alt="Pivot Table widget showing average latency by span kind (Agent, LLM, Retriever, Tool)" />
    </Frame>
  </Tab>

  <Tab title="Scatter Plot">
    Scatter Plot widgets show how two attributes correlate. Plot token count against latency for LLM spans to see whether longer prompts actually take longer to respond.

    * **Widget type:** Scatter Plot
    * **X-Axis:** `latency_ms`
    * **Y-Axis:** `attributes.llm.token_count.total`
    * **Filter:** `attributes.openinference.span.kind = 'LLM'`

    <Frame>
      <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/scatter_plot.png" alt="Scatter Plot widget showing token count vs. latency for LLM spans" />
    </Frame>
  </Tab>

  <Tab title="Text">
    Text widgets add context, section headers, or notes alongside your charts. Use them to explain what a dashboard tracks, link to runbooks, or separate dashboard sections.

    * **Widget type:** Text
    * **Content:** Markdown — headings, bold, lists, and inline code all render

    <Frame>
      <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/text.png" alt="Text widget rendered on a dashboard showing a heading and description next to other chart widgets" />
    </Frame>
  </Tab>
</Tabs>

Save the dashboard. The rest of this page is about refining it — filters, exports, and gotchas.

## Using your dashboards

### Global filters and time range

The selectors at the top apply to every widget on the dashboard.

* **Time range** — presets (Last 15 Min to Last 6 Months), custom range, or typed value. Timezone persists across sessions.
* **Metadata filters** — scope by attributes like model name, environment, or custom metadata.

<Frame>
  <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/using_dashboard.png" alt="Dashboard with global filters and time range selector at top" />
</Frame>

### Per-widget filters

Each widget can override the global filter. Open the widget's config panel and add a filter there — useful when one widget needs a narrower or different scope than the rest of the dashboard.

<Frame>
  <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/filter.png" alt="Widget config panel with a per-widget filter on attributes.openinference.span.kind equal to LLM" />
</Frame>

### View traces behind a widget

The most common dashboard workflow: click a data point on a chart to jump straight to the traces behind it. When you notice an anomaly — a latency spike, an error surge — one click takes you to the filtered trace list, where you can open any trace or span.

<Frame>
  <video controls className="w-full aspect-video rounded-xl" src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/view_traces_from_dashboard.mp4" />
</Frame>

### Interact with widgets

Click a legend entry to isolate that series. Click the widget itself to open its config panel (metric, filter, visualization, title). Use the widget's **`...`** menu to duplicate, resize, or delete; drag to reorder.

<Frame>
  <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/export_data.png" alt="Widget context menu on a dashboard widget showing Edit Widget, Duplicate Widget, Export Data, Export as PDF, View In Fullscreen, and Delete Widget" />
</Frame>

### Export and share

| Option                             | How                                                                                                     |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------- |
| **Export as PDF (full dashboard)** | Dashboard **`...`** menu → **Export as PDF**                                                            |
| **Export as PDF (single widget)**  | Widget **`...`** menu → **Export as PDF**                                                               |
| **Export widget data as CSV**      | Widget **`...`** menu → **Export Data**. Per-widget only — no dashboard-wide CSV                        |
| **Share a link**                   | Copy the URL. Anyone with access to the space can open it; permissions follow the space's role settings |
| **Programmatic access**            | Dashboard and widget data are accessible via the [GraphQL API](/ax/graphql-reference)                   |

### Copy a dashboard

Duplicate a dashboard using the dashboard's **`...`** menu → **Copy Dashboard**. To recreate a dashboard in a different project, start from the same template there.

<Frame>
  <img src="https://storage.googleapis.com/arize-phoenix-assets/assets/images/arize-docs-images/observe/copy_dashboard.png" alt="Dashboard context menu showing Edit Dashboard Title, Copy Dashboard, Export Dashboard as PDF, and Delete Dashboard options" />
</Frame>

***

## Next step

You've put your metrics on a dashboard. Now set monitors on the same ones so regressions page you instead of waiting to be noticed:

<Card title="Next: Continuously Monitor" icon="arrow-right" href="/ax/observe/production-monitoring" />
