Creating Dashboards
Learn how to create custom dashboards with panels, visualization types, and query configurations in Last9

You can create dashboards in Last9 either from scratch or by promoting queries from the Logs and Traces explorers.
Creating a Dashboard from Scratch
- Navigate to Dashboards in the left sidebar
- Click Create Dashboard
- Enter a name for your dashboard
- Click Add Panel to add your first visualization
- Configure the panel query and visualization type (see below)
- Click Save to save the dashboard
Creating from Service Overview
You can add any performance chart from the Service Overview directly to a dashboard without writing a query. The underlying PromQL is extracted automatically.

- Navigate to Discover > Services and open a service
- On the Overview tab, hover over any chart panel
- Click the ⋮ menu in the top-right corner of the panel
- Select Add to Dashboard
- Choose to add to an existing dashboard or create a new one
- Provide a panel name and click Save
The following chart types are supported:
| Chart | Visualization added |
|---|---|
| APDEX Score | Time Series |
| Response Time | Time Series |
| Availability | Time Series |
| Throughput & Error Rate | Time Series |
| Error Distribution | Time Series |
Creating from Logs or Traces Explorer
You can promote aggregated queries from the Logs Explorer or Traces Explorer directly into dashboard panels.
- Build an aggregation query in the Logs Explorer or Traces Explorer
- Click the Add to Dashboard button
- Choose to create a new dashboard or add to an existing one
- Provide a descriptive panel name
- You will be redirected to the dashboard with your query added as a panel
For detailed instructions on building aggregation queries, see:
Panels
Panels are the building blocks of a dashboard. Each panel contains a query and a visualization.
Adding a Panel
- Open a dashboard and click Add Panel
- Choose a visualization type from the tabs at the top (Time Series, Bar Chart, Doughnut Chart, Gauge Chart, Stat, Table, Heatmap, or Status History)
- Select a telemetry type (Metrics, Logs, or Traces)
- Write your query using the appropriate query mode
- Configure panel options (legend, units, thresholds)
- Click Save to add the panel to your dashboard
Visualization Types
| Type | Description | Best For |
|---|---|---|
| Time Series | Line or area charts plotted over time | Monitoring trends, comparing metrics over time |
| Bar Chart | Vertical or horizontal bar charts, with optional stacking | Comparing categories, distribution analysis |
| Doughnut Chart | Pie/donut chart showing proportions | Percentage breakdowns, resource allocation |
| Gauge Chart | Dial indicator showing a single value against a range | Utilization metrics, threshold monitoring |
| Stat | Single prominent value display | Key metrics at a glance, counters |
| Table | Tabular data with sorting, filtering, and summaries | Detailed breakdowns, top-N analysis |
| Heatmap | Color-coded cells showing value density over time | Latency distributions, spotting outliers |
| Status History | Discrete state blocks per series over time | Up/down status, pass/fail checks over time |
Telemetry Types and Query Modes
Each panel supports different query modes depending on the selected telemetry type:
Metrics panels use PromQL:
rate(http_requests_total{service="api"}[5m])Logs panels support two modes — Builder for visual query construction, and LogQL for writing queries directly:
sum by (severity) (count_over_time({service="api"} [1m]))Traces panels use the Query Builder with filter and aggregate stages to query span data.
Query Modes
Each query can run in one of two modes:
| Mode | Description | Use Case |
|---|---|---|
| Range | Returns data points over a time range | Timeseries, bar charts, heatmaps |
| Instant | Returns a single data point at the current time | Stat panels, gauge panels, tables |
Panel Configuration
Chart Settings
These options are available under Chart Settings when editing a panel:
- Unit: Set the unit format for panel values (see Units below)
- Legend Type: Auto (uses the query name as the legend label) or Custom (lets you define your own legend label)
- Legend Placement: Bottom, Left, or Right
- Display Type: Line or Area (Time Series panels only)
Bar Chart Options
- Orientation: Vertical or horizontal bars
- Stacked: Enable stacking to show cumulative values
Table Settings
| Option | Description |
|---|---|
| Transpose | Swap rows and columns (max 20 columns when transposed) |
| Density | Compact or comfortable row spacing |
| Summary Footer | Display a summary row at the bottom |
| Summary Type | Aggregation for summary: sum, avg, min, max, first, last, count, p50, p90, p95, p99 |
| Thresholds | Color cells based on their values. Set a value, color, and target (Text or Background). Higher thresholds take precedence. Click + Add for multiple thresholds |
| Column Visibility | Show or hide individual table columns |
Panel Description
Every panel has an optional Description field in the panel editor. The description is plain text and is not subject to character restrictions. It appears in the panel’s info tooltip (the ⓘ icon in the panel header) alongside the query list.
Use descriptions to document what a panel measures, the expected range, or links to relevant runbooks.
Units
Apply unit formatting to panel values. Select from the built-in units or type a custom unit:
| Unit | Format |
|---|---|
| Bytes (IEC) | KiB, MiB, GiB, TiB (factors of 1024) |
| Bytes (SI) | KB, MB, GB, TB (factors of 1000) |
| Bytes/sec (IEC) | KiB/s, MiB/s, GiB/s |
| Bytes/sec (SI) | KB/s, MB/s, GB/s |
| Nanoseconds | ns precision |
| Milliseconds | ms precision |
| Seconds | s precision |
You can also enter any custom unit (e.g., requests/s, %, ops) by typing directly into the unit field.
Threshold Bands
Gauge, Time Series, and Bar panels support configurable threshold bands. Bands are color-coded regions drawn over the chart to indicate normal, warning, and critical ranges.
Gauge panels: Configure thresholds under Gauge Settings in the panel editor. Add one or more threshold values, each with a color. The gauge arc is colored in segments from the lowest threshold to the highest. The panel defaults (previously fixed at 85% and 95%) are now editable.
Time Series and Bar panels: Configure thresholds under Thresholds in the panel editor. Each threshold is drawn as a filled band from its value to the next threshold (or to the axis edge for the topmost). On horizontal bar charts, bands are on the x-axis; on vertical charts and line charts, bands are on the y-axis.
To add a threshold:
- Open the panel editor and expand Thresholds (or Gauge Settings for gauge panels)
- Click + Add
- Enter the threshold value and pick a color
- Save the panel
Field Overrides
Field overrides let you target a specific query or series and change its display properties without altering the query data. Panel-wide settings remain the default; an override applies only to the matched series.
How Overrides Work
Each override rule has:
- A Matcher — select by query reference (A, B, C…) or by field/series name
- One or more Properties to override for matched series
Supported properties:
| Property | Description |
|---|---|
| Display name | The label shown in the legend and tooltip |
| Unit | Override the panel-wide unit for this series |
| Color | Fix the series to a specific color |
| Axis placement | Left, Right, or Hidden |
| Decimals | Number of decimal places shown |
| Min / Max | Override the axis min or max for this series |
Adding an Override
- Open the panel editor and expand Field Overrides
- Click + Add override
- Select a matcher type: Query or Field name
- Choose the query reference or type the field name
- Click + Add property and choose a property to override
- Set the value and repeat for additional properties
- Save the panel
Overrides do not mutate query data — they affect rendering only. Panel-wide defaults apply to any series not matched by an override.
Transformations
Transformations run as an ordered pipeline after queries complete and before the panel renders. Each transformation in the list receives the output of the previous one. Transformations do not affect the underlying data — they change what the panel displays.
Available Transformations
| Transformation | Description |
|---|---|
| Organize | Rename, reorder, or hide fields |
| Merge | Merge multiple query results into a single table |
| Calculate field | Add a new field computed from existing fields (e.g., sum, difference, percentage) |
| Rename by regex | Rename fields using a regex pattern and replacement |
| Series to columns | Pivot multiple series into columns of a single table keyed by a shared time column |
| Series to rows | Flatten multiple series into a single table with a name column per series |
| Group by | Group rows by one or more fields and aggregate the rest |
| Join by field | Join multiple query results on a common field |
| Sort by | Sort table rows by a field, ascending or descending |
Adding a Transformation
- Open the panel editor and select the Transform tab
- Click + Add transformation
- Select a transformation type from the list
- Configure the transformation parameters
- Add more transformations as needed — they execute in order, top to bottom
- Save the panel
Repeat Panels
Repeat panels render one panel instance per selected value of a variable. This lets you create a single panel definition and display it side-by-side for each service, host, or environment selected in a variable — without duplicating panels.
Setting Up a Repeat Panel
- Open the panel editor and expand Repeat
- Choose a Variable from the list of dashboard variables. Multi-select variables work best here
- Choose a Direction: Horizontal (instances side by side) or Vertical (stacked)
- Save the panel
When the variable selection changes, the dashboard renders or removes instances automatically. Editing the source panel updates all instances — generated instances are not independently persisted.
Per-Panel Time Override
By default, every panel uses the dashboard time range. A per-panel time override lets one panel compare a different period — for example, comparing last week’s traffic on the same dashboard as the current hour.
Relative Time
Sets a fixed lookback window for the panel, overriding the dashboard time range’s window length while keeping the dashboard’s selected end time. For example, entering 6h on a dashboard scoped to a historical range shows the 6 hours ending at that range’s end time, not the most recent 6 hours.
Time Shift
Offsets the panel’s effective time range (including any Relative Time lookback) backward from the dashboard’s end time. For example, a shift of 1w moves a “Last 1 hour” dashboard view to the equivalent hour one week ago for that panel.
Configuring a Time Override
- Open the panel editor and expand Time Override
- Enter a Relative Time duration (e.g.,
1h,7d) to fix the panel’s lookback window, or leave blank to inherit the dashboard range - Enter a Time Shift duration (e.g.,
1w,24h) to offset the panel backward, or leave blank for no shift - Save the panel
An active override is shown in the panel header. Dashboard-wide time controls remain the default for all other panels.
Layout
Panels can be repositioned by dragging the panel header and resized using the handles at the panel edges.
Sections
Add Section dividers to organize panels into named groups. Sections act as visual separators with a label, making it easier to navigate dashboards with many panels. You can drag panels between sections and reposition sections themselves by dragging.
Links
Links add navigation from a dashboard to another dashboard, a runbook, or any external page. Every link opens in a new tab.
Last9 supports three link surfaces. All three use the same editor.
| Surface | Where you configure it | Where it appears |
|---|---|---|
| Dashboard links | Dashboard Settings > Custom Links | The dashboard header menu |
| Panel links | Panel editor > Panel Links | The panel header menu |
| Data links | Panel editor > Data Links | When you click a data point on a chart |

Adding a Link
- Open the Custom Links, Panel Links, or Data Links section
- Click Add Link
- Enter a Title — the text shown in the menu
- Enter the URL
- Under Options, optionally enable Keep Time Range and Include Variables
- Save the dashboard or the panel
Link Types
Dashboard links add a Type field with two choices. Panel links and data links are always a single URL.
- URL: a single address. The address can contain tokens, as described in Link Tokens.
- Dashboards with tags: a submenu that lists every other dashboard carrying all of the tags you select. The submenu is labelled with those tags. A dashboard gets its tags in Edit > Tags, and tags are case insensitive. If no dashboard matches, the link does not appear.
Link Options
| Option | Effect |
|---|---|
| Keep Time Range | Adds the dashboard time range to the URL as from and to parameters |
| Include Variables | Adds the selected dashboard variable values to the URL as parameters |
Both options skip a parameter that the URL already sets. For example, if the URL ends with ?from=now-1h, then Keep Time Range does not overwrite that value.
For a Dashboards with tags link, both options apply to every dashboard the submenu opens.
Link Tokens
A token is a placeholder that Last9 replaces with a live value. Tokens work in the Title field and in the URL field. Both ${name} and $name are accepted.
| Token | Resolves to |
|---|---|
${variable} | A dashboard variable value. Multiple values join with commas |
${variable:queryparam} | The same variable as var-name=value&var-name=value2 |
${__from}, ${__to} | The start and the end of the dashboard time range |
${__url_time_range} | The full range as from=...&to=... |
${__value.raw} | The value of the data point you clicked |
${__value.text} | The same value, formatted for display |
${__value.time} | The timestamp of the data point you clicked, in milliseconds |
${__series.name} | The name of the series you clicked |
${__field.labels.<label>} | A label on the data point you clicked, for example ${__field.labels.service} |
${__data.fields.<label>} | An alias of ${__field.labels.<label>} |
For example, this data link searches an internal runbook for the service behind the point you clicked, over the dashboard’s time range:
https://runbooks.internal.example.com/search?q=${__field.labels.service:percentencode}&${__url_time_range}Use :percentencode on any value that lands inside a query parameter, so a value containing a space or a slash still produces a valid URL.
To link to a view inside Last9, open that view, copy the URL from the address bar, and replace the part you want to make dynamic with a token. The address bar is the source for those query parameters.
Link Limits
- The data point tokens —
${__value.raw},${__value.text},${__value.time},${__series.name},${__field.labels.<label>}, and${__data.fields.<label>}— resolve in data links only. Only a data link carries a clicked point. A dashboard link or a panel link that uses one of these tokens never resolves. - If any token in a URL does not resolve, Last9 drops the link and does not show it. A title behaves differently: an unresolved token renders as blank text, and an empty title falls back to
Open link. - Last9 allows the
http:and thehttps:schemes only. It checks the scheme before and after token substitution, and rejects every other scheme.
CSV Datasource
The CSV datasource lets you upload a CSV file and visualize it as a dashboard panel without ingesting it as metrics. It is intended for ad-hoc analysis of data exported from external tools.
How It Works
- One CSV per dashboard, stored inline in the dashboard JSON (no external storage)
- Maximum file size: 1 MB, UTF-8 encoding, header row required
- Column types are inferred on upload and can be overridden
- If a time column is designated, the dashboard time picker filters CSV rows by that column
- All visualization types are supported: Time Series, Line, Bar, Heatmap, Status History, Doughnut, Gauge, Stat, Table
Uploading a CSV
- Open a dashboard and click Add Panel
- Under the datasource selector, choose CSV
- Click Upload CSV and select your file (UTF-8, header row required, max 1 MB)
- Review the inferred column types. Click a column header to override the type if needed
- Optionally designate a Time Column — rows outside the dashboard time range will be hidden
- Choose a visualization type and configure the panel
- Save the panel
Query Options by Visualization Type
Stat and Gauge: choose a Row Reducer to aggregate all rows into a single value:
| Reducer | Result |
|---|---|
| Last | The last row’s value (default) |
| Avg | Average across all rows |
| Sum | Sum of all rows |
| Min | Minimum value |
| Max | Maximum value |
Time Series, Line, and Bar: optionally select a Series/Group-by column to split the data into multiple series, one per unique value in the group column.
Limitations
- Joins with live metrics, logs, or traces are not supported
- Only one CSV per dashboard
- Replacing the CSV file is silent — panels that reference a column that no longer exists enter an error state until the column mapping is updated
- CSV panels inherit the dashboard’s edit permissions; no separate access control
Troubleshooting
Please get in touch with us on Discord or Email if you have any questions.